我正在使用Google Maps Image APIs來獲取地圖的靜態圖像。我有中心位置座標和縮放級別。在使用.NET的靜態圖像地圖上繪製Lat/Lng值
我想要做的是將其他緯度/經度座標放在靜態地圖圖像上,所以我應該將緯度/經度座標轉換爲XY座標。
我的方法:
首先我計算使用類似於this一個墨卡託投影中心點的World Coordinates。 後來我想出了靜態圖像的使用該公式如下範圍:
PointF SWPoint = new PointF((float)(centerPointWorldCoordinates.X - (mapWidth/2.0f)/scale), (float)(centerPointWorldCoordinates.Y + (mapHeight/2.0f)/scale));
PointF NEPoint = new PointF((float)(centerPointWorldCoordinates.X + (mapWidth/2.0f)/scale), (float)(centerPointWorldCoordinates.Y - (mapHeight/2.0f)/scale));
SWPoint和NEPoint有南,西點的世界座標和東北點(圖像地圖邊界)。然後我計算使用以下公式這些點的Pixel Coordinates:
pixelCoordinate = worldCoordinate * 2^zoomLevel
取界限像素座標後,我還計算每個緯度/經度點的像素座標(我想在地圖上繪製)使用相同的公式。
爲了將某個點處的圖像上,我使用:
PointF point = new PointF((float)(pointPixelCoordinates.X - SWpixelCoordinate.X), (float)(pointPixelCoordinates.Y - NEpixelCoordinate.Y));
這樣我可以計算出的像素移動的點(從左上角)的量。
這種方法正在工作,但它並不是真的準確,特別是當縮放級別非常高時。這一點被不可接受的距離所抵消。
我該如何做這項工作?我在這裏錯過了什麼嗎? 我真的很感謝幫助:)
根據維基百科,Google地圖使用墨卡託投影的*近似變體*。您是使用Google變體還是標準Mercator? http://en.wikipedia.org/wiki/Google_Maps – 2014-09-25 20:25:19
我正在使用此鏈接中詳細介紹的Google變體https://developers.google.com/maps/documentation/javascript/examples/map-coordinates – kristoffz 2014-09-25 20:27:28
您可能正在運行使用'float'而不是'double'變成精度錯誤?當您放大顯示時,您提到問題體現。 – 2014-09-25 20:34:05