当前位置: 首页 > 知识库问答 >
问题:

JMapViewer,获取OSM地图比例

史钊
2023-03-14

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

像素坐标“以米为单位”进行评估;公式缺少像素大小...

共有1个答案

鱼宜
2023-03-14

JMapViewer方法getMeterPerPixel()返回当前缩放级别下每个像素的米数。它使用tileSource::getDistance,它“使用余弦球面定律获取距离”。在org.openstreetmap.gui.jmapviewer.demo中,您可以看到该值如何随着缩放而相反地变化;10级和98.5米/像素如下所示。有关典型的实现,请参见OSMmercator::GetDistance

 类似资料:
  • 问题内容: 我想从图像为JMapViewer创建离线地图图块。我怎么能做到呢?生成这些图块的工具是什么? 问题答案: 有多种方法可以实现该目标。它们全部利用外部工具链: 1.离线渲染器 这有点复杂,因为您需要使用渲染器,地图样式和OSM数据包在盒子上渲染自己的地图图块。第一种简单的方法是使用 Maperitive,因为它很容易配置并且带有样式。更高级的是,您可以设置整个OSM渲染堆栈(Mapnik

  • 我想用多边形类和一组lat/lng坐标在谷歌地图上画一个城区区域。 OpenStreetMap为我提供了所需的所有数据——如果我键入一些地区名称,我可以获得OSM XML格式的有用数据,例如拉脱维亚里加“Vecmilgravis”地区的OSM绘制多边形,以及OSM XML格式的数据。 问题是所有这些节点都是按某种奇怪的顺序排序的,因此如果我只提取所有和对,并为Google Maps多边形类创建一个

  • 我想从图像为JMapViewer创建离线地图瓷砖。我怎样才能做到?用来生成那些瓷砖的工具是什么?

  • 我正在使用Swing中的JMapViewer创建一个地图。我在地图上有几个表示汽车的MapMarkerDots。我试图更新这些标记的位置,以便它们看起来在地图上行驶,但它不太正常工作。我有一个“汽车”要遵循的坐标列表,但发生的情况是,位置被更新,但标记在完成之前不会重新绘制,这意味着标记是在初始位置和最终位置绘制的,而不是在两者之间的每一点绘制的。下面是我使用的代码。你知道为什么会发生这种情况吗?

  • 若要避免鼠标监听器的双重调用,请参见问题 JMapViewer,MouseListener调用2次 该类不是直接从JMapViewer派生的。通过鼠标单击,我得到了两个坐标[lat,lon],它们将用于绘制由P1,P2给出的一条线,其中P1=[lat,lon],P2=[lat+10,lon+10]。 当前版本不能很好地工作,没有调用paintComponent()... 谢谢你的帮助。

  • osm

    Open Service Mesh (OSM) Open Service Mesh (OSM) is a lightweight, extensible, Cloud Native service mesh that allows users to uniformly manage, secure, and get out-of-the-box observability features for