2016-11-15 36 views

回答

2

有几种方法这一点,取决于你到底想要什么。

最简单的一个就是计算整个多边形的质心。很多地理空间软件能够计算multipolygons的重心,与多个外环,多边形等

如果您使用单张及GeoJSON的,我个人的选择是使用Turf.js为地理处理,如:

var poly1 = { 
    type: 'Feature', 
    geometry: { 
    type: 'Polygon', 
    coordinates: [[[10, 10], [10, 20], [20, 15]]] 
    } 
}; 

var poly2 = { 
    type: 'Feature', 
    geometry: { 
    type: 'Polygon', 
    coordinates: [[[10, 45], [20, 40], [20, 50]]] 
    } 
}; 

var featCollection = { 
    type: 'FeatureCollection', 
    features: [poly1, poly2] 
} 

L.geoJSON(featCollection).addTo(map) 

// Magic happens here: 
var centroid = turf.centroid(featCollection); 

L.geoJSON(centroid).addTo(map); 

您可以看到,作为working example

现在,质心是的中心密度的多边形。如果你还记得高中几何,你会记得lots of centers for something as simple as a triangle,每个都有自己的属性。

对于更复杂的多边形,这是正确的:some times you don't want the centroid。如果考虑到测地线(即地球不是二维平面),事情变得更加复杂。

因此,根据你想要做什么,你可能需要一个更详细的解决方案,以便找到不是质心,而是一个点,它将与任何多边形的距离最小化(理解为距离任何该多边形的顶点)。

+0

如何自动调整地图的缩放级别以适合所有/大部分多边形? – codejunkie

+1

获取每个多边形的边界,并创建一个延伸到所有边界的'L.Bounds'实例。阅读宣传单文件,它应该很简单,你自己做。 – IvanSanchez

+0

http://stackoverflow.com/questions/16845614/zoom-to-fit-all-markers-in-mapbox-or-leaflet --->帮助我 – codejunkie