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


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

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

5 6

5 ответов:

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

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

Нашел этот простой javascript Билл Чедвик. Просто введите LatLng в массив и передайте исходные аргументы в функции здесь Douglas Peucker line simplification routine

Он выведет массив с меньшим количеством точек для полигона.

 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 неразумного, сайт поддерживает GeoJson, я использовал его на своем сайте,и он сократил мой geoJson ,но я думаю, что вам также нужен этот world country geo Json