地圖經緯度坐標與屏幕坐標的轉換(android版)


     我們在開發GIS系統的時候,首先要解決的就是地圖的可視化問題,這個問題的關鍵就在於如何把地圖的坐標轉換成屏幕坐標,然后才到渲染着色、標注等。以下以wgs84經緯度坐標為基准,介紹一下地圖經緯度坐標與屏幕坐標轉換的問題。

     一、比例尺

     首先地圖本身就是表達地球上各種事物的空間分布、聯系及時間中的發展變化狀態繪制的圖形。如何把地球上大量的空間信息顯示在有限的地圖上,這就是涉及到比例尺的問題。比例尺=圖上距離與實際距離的比。

     比例尺有resolution和scale兩個概念

    Resolution是指屏幕上一個像素和其所顯示的地圖在實際地面上的距離之比。

    Scale是圖上線段的長度和該段距離在地面的實際長度之比

    一般來說計算機是使用Resolution這個概念,而人們生活中就是使用scale這個概念,因為Resolution直接就使用屏幕像素來計算,所以性能上比scale要快。

//計算resolution
double Resolution=map.width / screen.width

//計算scale
float dpi=this.view.getResources().getDisplayMetrics().xdpi;
double PIXEL_SIZE=(1/dpi)*0.0254;
PIXEL_SIZE=(1/dpi)*0.0254
double Scale=Resolution* MetersPerUnit /PIXEL_SIZE
//0.0254為1英寸=0.0254米

   二、地圖坐標和屏幕坐標的轉換

如圖所示,由於地球是球形的,同樣兩條經線,緯度越高,經線之間的直線距離越短,但經度還是保持不變的,所以在北半球或南半球上任意兩條經線和緯線之間的區域,都是類似梯形的,由於這個梯形的左上角和左下角,右上角和右下角的經度都是相同的,所以我們可以把這個梯形看成是長方形,經過投影轉換,在屏幕上看到的地圖就是經過拉伸長方形了。

由於越向北,兩條經線之間的實際距離越短,所以,要投影成長方形,就必須確定一個經度的長度:MetersPerUnit=111319.4908

//地圖坐標轉屏幕坐標:
screenPt.x=screen.center.x+ ((mapPt.x-mapExtent.center.x)/resolution+0.5);
screenPt.y=screen.center.y- (mapPt.y-mapExtent.center.y)/resolution+0.5);
//屏幕坐標轉地圖坐標:
mapPt.x=mapExtent.center.x+(screenPt.x-screen.center.x)*resolution;
mapPt.y=mapExtent.center.y-(screenPt.x-screen.center.x)*resolution;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM