Javascript 使用mapbox创建的多边形的中心
我想知道如何从Mapbox计算使用以下代码创建的多边形的中心: 我想在多边形创建后在其中心放置一个标记。Javascript 使用mapbox创建的多边形的中心,javascript,polygon,mapbox,Javascript,Polygon,Mapbox,我想知道如何从Mapbox计算使用以下代码创建的多边形的中心: 我想在多边形创建后在其中心放置一个标记。 提前感谢。要计算多边形的中心,首先需要得到它的边界,可以使用L.polygon的getBounds方法进行计算,该方法由L.Polyline增强: 返回多段线的LatLngBounds 它返回一个L.LatLngBounds对象,该对象具有getCenter方法: 返回边界的中心点 它返回一个L.LatLng对象,可用于创建L.Marker: var polygon = new L.Po
提前感谢。要计算多边形的中心,首先需要得到它的边界,可以使用
L.polygon
的getBounds
方法进行计算,该方法由L.Polyline
增强:
返回多段线的LatLngBounds
它返回一个L.LatLngBounds
对象,该对象具有getCenter
方法:
返回边界的中心点
它返回一个L.LatLng
对象,可用于创建L.Marker
:
var polygon = new L.Polygon(coordinates).addTo(map);
var bounds = polygon.getBounds();
var center = bounds.getCenter();
var marker = new L.Marker(center).addTo(map);
或者你可以用速记法:
var polygon = new L.Polygon(coordinates).addTo(map);
var marker = new L.Marker(polygon.getBounds().getCenter()).addTo(map);
在Mapbox示例中使用该选项将类似于以下内容:
function showPolygonArea(e) {
featureGroup.clearLayers();
featureGroup.addLayer(e.layer);
// Here 'e.layer' holds the L.Polygon instance:
new L.Marker(e.layer.getBounds().getCenter()).addTo(featureGroup);
e.layer.bindPopup((LGeo.area(e.layer) / 1000000).toFixed(2) + ' km<sup>2</sup>');
e.layer.openPopup();
}
功能区(e){
featureGroup.clearLayers();
特性组。添加层(e层);
//此处“e.layer”包含L.多边形实例:
新的L.Marker(e.layer.getBounds().getCenter()).addTo(featureGroup);
e、 图层(LGeo.面积(e.图层)/1000000.toFixed(2)+“km2”);
e、 layer.openPopup();
}
您可以使用turflibrary.turf.center(特征)
在所有输入特征的绝对中心点为您提供点特征。其中,您案例中的特征将是所选的多边形,您可以使用mapboxDraw.getAll()
获得该多边形。我尝试使用以下方法:var center=e.layer.bounds.getCenter();但它不起作用。我已经找到了其他脚本来计算多边形的中心,但我不确定在哪里可以找到多边形CreatedHanks iH8,如何从mapbox示例代码中获取已创建多边形的坐标?这就是我丢失的地方,我在那段代码中找不到任何L.多边形。有没有一种方法可以从这里获得坐标:函数showPolygonArea edited(e){e.layers.eachLayer(函数(layer){showPolygonArea({layer:layer});});我会在我的回答中附加一个L.Draw用例哦,ic,你是说这样的吗?:var marker=new L.marker(L.Draw.getBounds().getCenter()).addTo(map);不,那不行,请检查我的更新答案。新的L.Marker(e.layer.getBounds().getCenter()).addTo(featureGroup);
是在showPolygorea
方法中需要执行的操作。