1. 程式人生 > >經緯度轉換為螢幕座標

經緯度轉換為螢幕座標

地理座標定義規則:X軸(代表經度)向右遞增,Y軸(緯度)向上遞增,就好比小學學過的平面座標。向左、向下的規則。 螢幕座標定義規則:X軸向右遞增,Y軸向下遞增。

可以看出,地理座標和螢幕座標的區別僅僅只是在於Y軸遞增方向是相反的(這就是不同)。 這裡強調一點的就是為了保證精度,地理座標的度*3600換算成秒,所有的取值用double來計算,最後的結果再轉換成int。

1 已知道螢幕的高(y)和寬(h),地理座標區域的範圍(maxLon,minLon,maxLat,minLat),這裡我們知道了這些已知的引數。

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

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

公式:scaleY = ((maxLat-minLat)*3600)/y     ----------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 - 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;

公式:X = (lon - minLon)*3600/(((maxLon-minLon)*3600)/h); 

公式:Y = (maxLat - lat)*3600/(((maxLat-minLat)*3600)/y);