【问题标题】:JMapViewer, get the OSM map scale, JavaJMapViewer,获取OSM地图比例,Java
【发布时间】:2017-01-17 00:21:16
【问题描述】:

在我的 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);

像素坐标以“米”为单位计算;公式缺少像素大小...

【问题讨论】:

  • 将其重新发布为独立于 Java、JMapViewer、JPanel 等的算法问题。您有 Lon/Lat 坐标和墨卡托投影,并且您想要计算在宽度 dx 和高度 dy 的像素框上的投影。为问题添加缩放方面,即您将拥有一个缩放中心点和一个比例因子。其余的无关紧要。在目前的形式中,您很可能得不到合理的答案。

标签: java scale jmapviewer


【解决方案1】:

JMapViewer 方法getMeterPerPixel() 返回当前缩放级别下每像​​素的米数。它使用TileSource::getDistance,它“使用spherical law of cosines 获取距离”。在org.openstreetmap.gui.jmapviewer.Demo 中,您可以看到该值如何随缩放成反比变化; 10 级和 98.5 米/像素如下所示。有关典型实现,请参阅 OsmMercator::getDistance

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-20
    相关资源
    最近更新 更多