传单:如何计算从中心点到边缘的距离

Leaflet: How to calculate distance from center point to the edges

我正在使用传单绘制控件获取特定区域的几何图形。这些几何图形是多边形、线串、矩形和圆形,我将它们放在一个 database.I 中,想要获得从中心点到这些几何图形边缘的距离。

我正在使用 https://github.com/mapbox/leaflet-omnivore 以这种方式解析几何:

var layer = omnivore.wkt.parse(geometry);
var center = layer.getBounds().getCenter();

我不知道如何计算中心到边缘的距离。可能吗?

L.Circle 是可能的,只有 L.Rectangle 是完全正方形的。

得到L.Circle的半径其实很简单。它有一个 getRadius 方法,可以 return 以米为单位的半径。

var radius = circle.getRadius();

L.Circle参考:http://leafletjs.com/reference.html#circle

对于 L.Rectangle,您可以使用 getBounds 方法,其中 return 是一个 L.Bounds 对象,该对象具有 getNorthWestgetNorthEast 方法 return L.LatLng 这些点的对象。您可以使用 L.LatLng 个对象的 distanceTo 方法来计算它们之间的距离(以米为单位),然后您需要将其除以二:

var bounds = rectangle.getBounds(),
    northWest = bounds.getNorthWest(),
    northEast = bounds.getNorthEast(),
    distance = northWest.distanceTo(northEast),
    distanceFromCenter = distance / 2;

L.Rectangle参考:http://leafletjs.com/reference.html#rectangle

L.Bounds参考:http://leafletjs.com/reference.html#latlngbounds

L.LatLng参考:http://leafletjs.com/reference.html#latlng

这里的问题是,如果你没有完美的正方形,northWest/northEast和northWest/southWest之间的距离就会不同。也就是说,您可以理解,对于示例图片中的五边形形状进行这样的计算是不可能的,因为距离会有所不同,因为它取决于您测量它的点。

对于多边形、折线和矩形,您可以遍历图层点(使用 layer.getLatLngs())并使用 L.LatLng.distanceTo() 方法计算到顶点的距离或使用 L.LineUtil.pointToSegmentDistance() 计算到边缘的距离。

圆形更棘手,因为 Leaflet 在当前地图投影中绘制圆形,而不是 sphere/ellipsoid 上的圆形。因此,从中心到真正绘制的圆的测地距离对于不同的圆点是不同的。您可以使用 L.Circle.getRadius() 作为近似值,并将边界边缘的距离用作距离的最小值和最大值。

如果你有两个对撞机并且想获得它们之间的最小距离,你可能需要使用 Physics.Distance