我一直在工作一個項目,涉及添加大量的覆蓋到mkmapkit。MKMapkit XY座標到緯度
我目前有一個工作公式將lat/long轉換爲xy,但是我發現現在需要做相反的操作。
我目前使用的代碼是這樣的:
-(CGPoint)calculateXYLatitude:(float)latitude longitude:(float)longitude zoom:(int)zoom
{
CGPoint p;
float zm = (float)zoom;
float offset = (pow(2.0, zm-1.0));
float radius = offset/M_PI;
p.x = (offset + radius * longitude * M_PI/180.0);
p.y = (offset - radius * logf((1.0 + sinf(latitude * M_PI/180.0))/(1.0 - sinf(latitude * M_PI/180.0)))/2.0);
return p;
}
我成功設法反轉這個函數的第一部分是僅僅是有我難倒了最後一道防線。
到目前爲止,我有:
-(float)calculateLongitudeFromX:(float)x zoom:(int)zoom
{
float zm = (float)zoom;
float offset = (pow(2.0, zm-1.0));
float radius = offset/M_PI;
float longitude = (x - offset) * 180/radius/M_PI;
return longitude;
}
這些功能上面進行測試,並都在我的項目很好地工作。
我需要創建 - (float)calculateLatitudeFromY:(float)Y zoom:(int)縮放方法。
任何幫助將不勝感激。
你轉換屏幕座標地圖座標? –
不,我將地圖上的lat和lon轉換爲google maps x和y座標系 –
我不知道MapKit直接暴露了Google的Mercator座標。 (還要注意CGPoint使用浮點數,它只能精確到180度左右的1米左右)。 –