标签:scale jmapviewer 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,它“使用spherical law of cosines获取距离”.在org.openstreetmap.gui.jmapviewer.Demo中,您可以看到该值与缩放如何成反比. 10级和98.5米/像素如下所示.有关典型的实现,请参见OsmMercator :: getDistance.
标签:scale,jmapviewer,java 来源: https://codeday.me/bug/20191118/2026290.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。