Оптимизация полигонов Google maps
я извлек откуда-то данные контура страны и успешно сумел преобразовать их в массив координат lat-lng, которые я могу передать в Google maps API для рисования полилиний или полигонов.
проблема в том, что в этой форме есть около 1200+ точек. Он отлично отображается на картах Google, но мне нужно уменьшить количество точек с 1200 до менее 100. Мне не нужен очень гладкий контур, мне просто нужно отбросить точки, без которых я могу жить. Любой нужен алгоритм или онлайн-инструмент, который может помочь мне уменьшить количество точек.
5 ответов
нашел этот простой javascript Билл Чедвик. Просто введите LatLng в массив и передайте исходные аргументы в функции здесь Дуглас Пекер линия упрощение рутины
Он выведет массив с меньшим количеством точек для полигона.
var ArrayforPolygontoUse= GDouglasPeucker(theArrayofLatLng,2000)
var polygon=new google.maps.Polygon({
path:ArrayforPolygontoUse,
geodesic:true,
strokeColor:"#0000FF",
strokeOpacity:0.8,
strokeWeight:2,
fillColor:"#0000FF",
fillOpacity:0.4,
editable:true
});
theArrayofLatLng-это массив latlng, который вы собрали с помощью Google maps api. Значение 2000-излом в метрах. Мое предположение, чем выше значение, тем больше точек будет удалено как выход.
для настоящих новичков: Убедитесь, что вы объявили файл js на своей html-странице перед его использованием. :)
<script type="text/javascript" src="js/GDouglasPeucker.js"></script>
Если вы можете установить postgis, который я думаю, легко, поскольку они предоставляют установщик, вы можете импортировать данные и выполнить snaptogrid () или st_simplify() для которого я не могу найти эквивалент в MySQL.Если вы решите пойти с postgis, который я рекомендую, потому что это поможет вам в будущем, я могу предоставить вам детали.
теперь для легкого изготовленного на заказ решения вы можете уменьшить размер путем резать или округлять некоторые из последних чисел координат и затем объедините те же самые координаты, что фактически приводит к простой snaptogrid().
надеюсь, это поможет
скорее всего, вы хотите разделить точки На 2 половины и хотите попробовать мою функцию Javascript:
function shortenAndShow ( polyline, color ) {
var dist = 0, copyPoints = Array ( );
for ( var n = 0, var end = polyline.getVertexCount ( ) - 1; n < end ; n++ ) {
dist += polyline.getVertex ( n ).distanceFrom ( polyline.getVertex ( n +1 ) );
copyPoints.push ( polyline.getVertex (n) );
}
var lastPoint = copyPoints [copyPoints.length-1];
var newLine = new GPolyline (copyPoints, color, 2, 1);
gmap2.addOverlay ( newLine );
}
Я согласен с Anwser Unreason, поддержка сайта GeoJson, я использовал его на своем сайте ,и он сократил мой geoJson, но я думаю, что вам также нужно это страна мира geo Json