簡體   English   中英

JMapViewer,獲取OSM地圖比例,Java

[英]JMapViewer, get the OSM map scale, Java

在我的Java應用程序中,我使用的是JmapViewer; 地圖繪制在jPanel上。 是否可以獲得與當前縮放級別相對應的地圖比例? 該地圖基於眾所周知的墨卡托投影:

X = R * lon * cos(lat1);
Y = R * log(tan(lat/2 + 45)), lat1 = 0;

投影是共形的,因此局部線性標度與方向無關。 我的想法使用兩個點共享相同的並行:

 Point p1 = new Point(0,0);
 Point p2 = new Point(100,0);

 final double dlon = getPosition(p2).getLon() - getPosition(p1).getLon();
 final double scale = 6380000 * abs(dlon) * PI / 180 / 100;  //scale = (R * dlon)/||p1-p2||

改進:初始點p1可以是視圖的中心。

Point p1 = new Point(jPanel1.width()/2,jPanel1.height()/2);
Point p2 = new Point(jPanel1.width()/2  + 100, jPanel1.height()/2);

像素坐標以“米為單位”進行評估; 公式缺少像素大小......

JMapViewer方法getMeterPerPixel()返回當前縮放級別的每像素的米數。 它使用TileSource::getDistance ,“使用余弦球面定律獲取距離”。 org.openstreetmap.gui.jmapviewer.Demo ,您可以看到值與縮放的反向變化; 等級10和98.5米/像素如下所示。 有關典型實現,請參閱OsmMercator::getDistance

地圖圖片

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM