天天看點

地理坐标、經緯度坐标與螢幕坐标的轉換!

地理坐标定義規則:X軸(代表經度)向右遞增,Y軸(緯度)向上遞增,就好比國小學過的平面坐标(貌似又忘了,要重讀國小了)吧?向左,向下的規則,這個不用我再闡述了吧

    螢幕坐标定義規則:X軸向右遞增,Y軸向下遞增..

    可以看出,地理坐标和螢幕坐标的差別僅僅隻是在于Y軸遞增方向是相反的…(這就是不同).

    好了,現在我們開始轉換他們吧.  這裡強調一點的就是為了保證精度,地理坐标的度*3600換算成秒,所有的取值用double來計算,最後的結果再轉換成int

    1.已知道螢幕的高(y)和寬(h),地理坐标區域的範圍(maxLon,minLon,maxLat,minLat)..這裡我們知道了這些已知的參數…

    2.我們可以算出每像素所代表的經度和緯度(有人稱這個為比例因子):

        公式:scaleX = h/((maxLon-minLon)*3600)  ———-X軸上每像素代表的經度秒數;

        公式:scaleY = y/((maxLat-minLat)*3600)  ———–Y軸上每像素代表的緯度秒數;

        這兩個比例因子就是兩個坐标系之間的關系..

    3.很簡單的一步了,那就是算出該地理坐标區域中的任何一點(lon,lat)在螢幕上的坐标了,怎麼算?下面來講:

       公式:screenX = lon*3600/scaleX;  ———螢幕坐标X軸坐标

       公式:screenY = lat*3600/scaleY; ———-螢幕坐标Y軸坐标,        怎麼樣?很簡單吧?這裡我們就算出地理坐标上任何一點轉到螢幕上的坐标是多少了……

        還有最後一步,那就是我們要把該地理區域占滿占個螢幕該怎麼辦呢?

   4. 接着我們需要該地理區域占滿占個螢幕該怎麼辦呢

        公式:minX = minLon*3600/scaleX;    區域左邊置最左端

        公式:minY = minLat*3600/scaleY;     區域上面置最上端

   5. 當地地理範圍區域占滿整個螢幕時,我們需要用到第三步計算出來的 screenX和screenY兩個參數

,該區域中的任何一點的公式如下:   

       公式:X = screenX – minX = (lon – minLon)*3600/scaleX;     

       由于緯度的方向和螢幕Y軸是相反的, 

       公式:screenMaxLat = (maxLat – minLat)*3600/scaleY;

       公式:screenLat = (lat – minLat)*3600/scaleY;

       公式:Y = screenMaxLat – screenLat = (maxLat – lat)*3600/scaleY;     至于為什麼是這個公式,我想大家仔細想想就明白了..

  6.總結:

        經緯度轉螢幕坐标的最終公式如下:

        公式: X = (lon – minLon)*3600/scaleX;  

        公式: Y =  (maxLat – lat)*3600/scaleY;

        接着我們由上面的公式可以推出螢幕坐标轉經緯度坐标公式如下:

   公式:lon = X * scaleX/3600 + minLon;

        公式:lat = maxLat – y* scaleY/3600;

程式代碼共享下載下傳 :http://www.3g2y.com

360