Оптимизация полигонов Google maps
Я извлек откуда-то данные о контуре страны и успешно сумел преобразовать их в массив координат lat-lng, который я могу передать в Google maps API для рисования полилиний или полигонов.
Проблема заключается в том, что существует около 1200+ точек в этой форме. Он отлично отображается в Google maps, но мне нужно уменьшить количество точек с 1200 до менее чем 100. Мне не нужен очень гладкий контур, мне просто нужно отбросить те моменты, без которых я могу жить. Любой алгоритм или онлайн-инструмент, который может помочь мне уменьшить количество очков, необходимых.
5 ответов:
Нашел этот простой 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