在我的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
。
问题内容: 我想从图像为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()... 谢谢你的帮助。
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