Есть несколько подходов к этому, в зависимости от того, что вы точно хотите.
Самый простой способ - рассчитать центроид полигонов в целом. Много геопространственных программного обеспечения способен рассчитать центроиды 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. Если вы учитываете геодезические (т. Е. Тот факт, что Земля не является двумерной плоскостью), все становится еще сложнее.
Так что, в зависимости от того, что вы хотите сделать, вам может понадобиться более продуманное решение, чтобы найти не центроид, а точку, которая минимизирует расстояние до любого из полигонов (понимается как минимальное расстояние до любого из вершины к этому многоугольнику).
Как я могу автоматически регулировать уровень масштабирования карты, чтобы соответствовать всем/большинству полигонов? – codejunkie
Получите оценки для каждого многоугольника и создайте экземпляр 'L.Bounds', который распространяется по всем границам. Прочтите документальные листы, это должно быть просто сделать самостоятельно. – IvanSanchez
http://stackoverflow.com/questions/16845614/zoom-to-fit-all-markers-in-mapbox-or-leaflet ---> помог мне – codejunkie