传单:如何计算从中心点到边缘的距离
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
对象,该对象具有 getNorthWest
和 getNorthEast
方法 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
。
我正在使用传单绘制控件获取特定区域的几何图形。这些几何图形是多边形、线串、矩形和圆形,我将它们放在一个 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
对象,该对象具有 getNorthWest
和 getNorthEast
方法 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
。