java - JMapViewer,获取OSM map 比例尺,Java

标签 java scale jmapviewer

在我的 Java 应用程序中,我使用 JmapViewer; map 绘制在 jPanel 上。是否可以获取当前缩放级别对应的 map 比例尺?该 map 基于著名的墨卡托投影:

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可以是 View 的中心。

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 了解典型的实现。

map image

关于java - JMapViewer,获取OSM map 比例尺,Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39401582/

相关文章:

Java - 用反射实例化不起作用

java - 无法单击 WebElement

canvas - 在对象缩放时,fabric.js 中矩形的宽度和高度不会改变

android - 用小的缩放动画 "rebound"

java - 如何持续更新JPanel?

java - 在 JMapViewer 中动态更新标记

java - 在java中提取 "[[ ]]"内的文本

Java split() 方法不会再次起作用

css - 最大高度不会缩放网站

java - 将经度和纬度转换为点