經(jīng)緯度坐標(biāo)轉(zhuǎn)換成屏幕坐標(biāo) 地理坐標(biāo)定義規(guī)則:X軸(代表經(jīng)度)向右遞增,Y軸(緯度)向上遞增,就好比小學(xué)學(xué)過(guò)的平面坐標(biāo)。向左、向下的規(guī)則。屏幕坐標(biāo)定義規(guī)則:X軸向右遞增,Y軸向下遞增。 可以看出,地理坐標(biāo)和屏幕坐標(biāo)的區(qū)別僅僅只是在于Y軸遞增方向是相反的(這就是不同)。 這里強(qiáng)調(diào)一點(diǎn)的就是為了保證精度,地理坐標(biāo)的度*3600換算成秒,所有的取值用double來(lái)計(jì)算,最后的結(jié)果再轉(zhuǎn)換成int。 1 已知道屏幕的高(y)和寬(h),地理坐標(biāo)區(qū)域的范圍(maxLon,minLon,maxLat,minLat),這里我們知道了這些已知的參數(shù)。 2 我們可以算出每像素所代表的經(jīng)度和緯度(有人稱這個(gè)為比例因子)。 公式:scaleX = ((maxLon-minLon)*3600)/h ----------X軸上每像素代表的經(jīng)度秒數(shù); 公式:scaleY = ((maxLat-minLat)*3600)/y ----------Y軸上每像素代表的緯度秒數(shù); 這兩個(gè)比例因子就是兩個(gè)坐標(biāo)系之間的關(guān)系。 3 很簡(jiǎn)單的一步了,那就是算出該地理坐標(biāo)區(qū)域中的任何一點(diǎn)(lon,lat)在屏幕上的坐標(biāo)了。 公式:screenX = lon*3600/scaleX;---------屏幕坐標(biāo)X軸坐標(biāo) 公式:screenY = lat*3600/scaleY; ---------屏幕坐標(biāo)Y軸坐標(biāo) 還有最后一步,那就是我們要把該地理區(qū)域占滿占個(gè)屏幕該怎么辦呢? 4 接著我們需要該地理區(qū)域占滿占個(gè)屏幕該怎么辦呢 公式:minX = minLon*3600/scaleX;區(qū)域左邊置最左端 公式:minY = minLat*3600/scaleY; 區(qū)域上面置最上端 5 當(dāng)?shù)氐乩矸秶鷧^(qū)域占滿整個(gè)屏幕時(shí),我們需要用到第三步計(jì)算出來(lái)的 screenX和screenY兩個(gè)參數(shù),該區(qū)域中的任何一點(diǎn)的公式如下: 公式:X = screenX - minX = (lon - minLon)*3600/scaleX; 公式:Y = screenMaxLat - screenLat = (maxLat - lat)*3600/scaleY; 6 總結(jié): 經(jīng)緯度轉(zhuǎn)屏幕坐標(biāo)的最終公式如下: 公式:X = (lon - minLon)*3600/scaleX; 公式:Y = (maxLat - lat)*3600/scaleY; 接著我們由上面的公式可以推出屏幕坐標(biāo)轉(zhuǎn)經(jīng)緯度坐標(biāo)公式如下: 公式:lon = X * scaleX/3600 + minLon; 公式:lat = maxLat - y* scaleY/3600;
本文來(lái)自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/SchnecKen/archive/2010/11/22/6026751.aspx
|