如何在 Leaflet 地图上正确绘制多边形(lat/lng 个顶点和旋转)?
How to correctly draw a polygon (lat/lng vertices and rotation) on a Leaflet map?
我正在尝试在传单地图上绘制代表一艘船的移动多边形。
我拥有的(每帧)信息是多边形的 "center" 点 (latitude/longitude) 的位置及其尺寸(顶点与中心点之间的距离),如以及多边形的旋转角度。
我可以将多边形添加到传单地图中,但在应用旋转和平移后,多边形似乎倾斜了。
确切的过程是:首先我存储一个坐标数组(顶点 latitude/longitude 是 0,0 和多边形尺寸之间的距离),每次我想绘制多边形时,我复制然后数组将旋转角度应用于所有坐标(围绕 0,0 简单旋转)然后平移所有坐标并绘制结果。
这是我仅应用旋转后多边形的样子:
这就是我应用旋转和平移(无缩放)后多边形的样子:
您看到失真是因为在 Leaflet(与大多数网络地图一样)使用的 spherical Mercator projection 上,纬度和经度的纵横比在赤道处仅为 1:1。当您向两极移动时,一侧的 "square" 1 度会显得越来越垂直拉伸。
如果您使用 L.Projection 将 lat/lon 点转换为投影坐标(具体来说,使用 L.Projection.SphericalMercator.project(...)
),您可以在投影 space 中进行计算,然后转换当您将其添加到地图时,使用 L.Projection.SphericalMercator.unproject(...)
返回 lat/lon。然后您的多边形应该保持其形状。
我正在尝试在传单地图上绘制代表一艘船的移动多边形。
我拥有的(每帧)信息是多边形的 "center" 点 (latitude/longitude) 的位置及其尺寸(顶点与中心点之间的距离),如以及多边形的旋转角度。
我可以将多边形添加到传单地图中,但在应用旋转和平移后,多边形似乎倾斜了。
确切的过程是:首先我存储一个坐标数组(顶点 latitude/longitude 是 0,0 和多边形尺寸之间的距离),每次我想绘制多边形时,我复制然后数组将旋转角度应用于所有坐标(围绕 0,0 简单旋转)然后平移所有坐标并绘制结果。
这是我仅应用旋转后多边形的样子:
这就是我应用旋转和平移(无缩放)后多边形的样子:
您看到失真是因为在 Leaflet(与大多数网络地图一样)使用的 spherical Mercator projection 上,纬度和经度的纵横比在赤道处仅为 1:1。当您向两极移动时,一侧的 "square" 1 度会显得越来越垂直拉伸。
如果您使用 L.Projection 将 lat/lon 点转换为投影坐标(具体来说,使用 L.Projection.SphericalMercator.project(...)
),您可以在投影 space 中进行计算,然后转换当您将其添加到地图时,使用 L.Projection.SphericalMercator.unproject(...)
返回 lat/lon。然后您的多边形应该保持其形状。