一世m having little trouble finding a relation between the movement at centre and edge of a circle, I
我正在做平移世界地图,我的地图范围是 180,89:-180,-89,我的地图通过将 change(dx,dY) 添加到其范围而不是其中心来平移。现在出现了一种情况,我必须将地图移动到特定的中心,以计算经度的变化非常容易和简单,但是纬度的变化引起了问题。似乎地图 centerY 的变化超过了 mapY 边缘的变化,或者只是如果我必须将地图中心从 0long,0lat 移动到 73long,33lat,对于 dX 我只是得到 73,但对于 dY 显然它看起来 33 但如果我将 33 添加到地图顶部 89 ,它将是 122 ,这是不正确的,因为纬度在 90 和 -90 之间。似乎是一个圆在 2D 平面上的投影,其中圆的边缘由于角度而向后移动,变化较小,而中心变化较大,现在这两个因素之间有关系吗?我尝试将 OriginY 和 destinationY 之间的差异转换为弧度,然后添加到地图的顶部和底部,但这对我来说并没有真正起作用。请注意,地图是在虚拟画布上的项目,其宽度从 256 开始并增加 256*2^z ,z=0 是默认值,整个世界在画布范围内可见
public void moveMapTo(double destinationLongitude,double destinationLattitude) // moves map to the new centre
{
double dXLong=destinationLongitude-centreLongitude; // centreLongitude and centreLattitude are centre of current map position
double atanhsinO = atanh(Math.sin(destinationLattitude * Math.PI / 180.00));
double atanhsinD = atanh(Math.sin(centreLatitude * Math.PI / 180.00));
double atanhCentre = (atanhsinD + atanhsinO) / 2;
double latitudeSpan =destinationLattitude - centreLatitude;
double radianOfCentreLatitude = Math.atan(Math.sinh(atanhCentre));
double dXLat=latitudeSpan / Math.cos(radianOfCentreLatitude);
dXLat*=getLattitudeSpan()*(Math.PI/180); //<--- HERE IS THE PORBLEM
System.out.println("dxLong:"+dXLong+"_dxLat:"+dXLat);
//map left.right.top,bottom are current extents of map
mapLeft+=dXLong;
mapRight+=dXLong;
mapTop+=dXLat;
mapBottom+=dXLat;
}
private double getLattitudeSpan()
{
double latitudeSpan = mapTop - mapBottom;
latitudeSpan = latitudeSpan / Math.cos(radianOfCentreLatitude);
return Math.abs(latitudeSpan);
}