Оптимизация полигонов Google maps

я извлек откуда-то данные контура страны и успешно сумел преобразовать их в массив координат lat-lng, которые я могу передать в Google maps API для рисования полилиний или полигонов.

проблема в том, что в этой форме есть около 1200+ точек. Он отлично отображается на картах Google, но мне нужно уменьшить количество точек с 1200 до менее 100. Мне не нужен очень гладкий контур, мне просто нужно отбросить точки, без которых я могу жить. Любой нужен алгоритм или онлайн-инструмент, который может помочь мне уменьшить количество точек.

5 ответов


Я думаю MapShaper можете сделать это онлайн

в противном случае, реализовать некоторые алгоритм


нашел этот простой 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