2017-08-16 74 views
0

我如何獲得谷歌地圖中特定瓷磚像素的緯度/經度。在谷歌地圖中獲取像素的緯度/經度在谷歌地圖中#

例如 - 我有變焦5,X = 4,Y = 5

我想要得到的每個像素的緯度/經度在該圖塊的256×256矩陣

是有一個包或公式來得到它?

+0

採取https://developers.google.com/maps/documentation/javascript/examples/map-coordinates – scaisEdge

+0

你可以告訴我們爲什麼你需要每個像素的座標..當你可以得到每個位置的座標時dinamically ??? – scaisEdge

+0

我得到一個256 x 256數據的浮點矩陣,用於縮放5,x = 4,y = 5,我需要獲取矩陣中每個值的緯度/經度 – asaf

回答

0

這裏是C#中的答案

的響應是從https://help.openstreetmap.org/questions/747/given-a-latlon-how-do-i-find-the-precise-position-on-the-tile

static void PixelXYToLatLongOSM(int pixelX, int pixelY, int zoomLevel, out float latitude, out float longitude) 
    { 
     int mapSize = (int)Math.Pow(2, zoomLevel) * 256; 
     int tileX = (int)Math.Truncate((decimal)(pixelX/256)); 
     int tileY = (int)Math.Truncate((decimal)pixelY/256); 

     float n = (float)Math.PI - ((2.0f * (float)Math.PI * (ClipByRange(pixelY, mapSize - 1)/256))/(float)Math.Pow(2.0, zoomLevel)); 

     longitude = ((ClipByRange(pixelX, mapSize - 1)/256)/(float)Math.Pow(2.0, zoomLevel) * 360.0f) - 180.0f; 
     latitude = (180.0f/(float)Math.PI * (float)Math.Atan(Math.Sinh(n))); 
    } 

    static float ClipByRange(float n, float range) 
    { 
     return n % range; 
    } 

    static float Clip(float n, float minValue, float maxValue) 
    { 
     return Math.Min(Math.Max(n, minValue), maxValue); 
    } 

    static void LatLongToPixelXYOSM(float latitude, float longitude, int zoomLevel, out int pixelX, out int pixelY) 
    { 
     float MinLatitude = -85.05112878f; 
     float MaxLatitude = 85.05112878f; 
     float MinLongitude = -180; 
     float MaxLongitude = 180; 
     float mapSize = (float)Math.Pow(2, zoomLevel) * 256; 

     latitude = Clip(latitude, MinLatitude, MaxLatitude); 
     longitude = Clip(longitude, MinLongitude, MaxLongitude); 

     float X = (float)((longitude + 180.0f)/360.0f * (float)(1 << zoomLevel)); 
     float Y = (float)((1.0 - Math.Log(Math.Tan(latitude * (Math.PI/180.0)) + 1.0/Math.Cos(latitude * (Math.PI/180.0)))/Math.PI)/2.0 * (1 << zoomLevel)); 

     int tilex = (int)(Math.Truncate(X)); 
     int tiley = (int)(Math.Truncate(Y)); 
     pixelX = (int)ClipByRange((tilex * 256) + ((X - tilex) * 256), mapSize - 1); 
     pixelY = (int)ClipByRange((tiley * 256) + ((Y - tiley) * 256), mapSize - 1); 
    } 
相關問題