Карта Google со слишком большим количеством полигонов приводит к сбою iOS

У меня есть карта Google с более чем 400 полигонами, эти полигоны состоят из более чем 40 000 координат широты и долготы. Это все голландские муниципалитеты, результат можно увидеть здесь: http://silktool.com/maptest.php

Он отлично работает (немного медленно загружается при 2,5 МБ / 500 КБ в сжатом виде) на настольных компьютерах, но при открытии URL-адреса на устройстве iOS происходит сбой Mobile Safari (в Chrome для iOS это работает).

Я подозреваю, что это потому, что это просто слишком много кода или полигонов. Когда загружаю только половину полигонов, Mobile Safari не вылетает.

Я загружаю каждый полигон следующим Javasctipt:

var city1 = new google.maps.Polygon({
  paths: [
    new google.maps.LatLng(53.0873209365,6.79015076682),
    …many many latlng coordinates… 
    new google.maps.LatLng(53.0716361297,6.81423099069),
    new google.maps.LatLng(53.0873209365,6.79015076682)
  ],
  strokeColor: "#fff",
  strokeOpacity: 0.5,
  strokeWeight: 1,
  fillColor: "rgb(60,255,160)",
  fillOpacity: 0.7
});


var city2 = new google.maps.Polygon({
  paths: [
    new google.maps.LatLng(53.0873209365,6.79015076682),
    …many many latlng coordinates… 
    new google.maps.LatLng(53.0716361297,6.81423099069),
    new google.maps.LatLng(53.0873209365,6.79015076682)
  ],
  strokeColor: "#fff",
  strokeOpacity: 0.5,
  strokeWeight: 1,
  fillColor: "rgb(60,255,160)",
  fillOpacity: 0.7
});

Я хочу, чтобы код не вылетал на iOS, и мне было интересно, как это сделать?

Я думал о нескольких вариантах, но я не знаю, будут ли они работать:

  • сделать код более эффективным/компактным
  • не используйте карты Google, а, например, Leaflet с параметром сглаживания для упрощения полигонов на разных уровнях масштабирования (http://leaflet.cloudmade.com/reference.html#polyline-options)
  • поместите координаты в массив Javascript (теперь они находятся в массиве PHP, и с этим создается javascript).
  • больше опций?

Я не знаю, какой вариант выбрать, есть идеи?


person Rutger    schedule 11.07.2012    source источник
comment
Может быть, вам следует попытаться отобразить этот слой на стороне сервера (например, wikimapia.org)?   -  person fedosov    schedule 11.07.2012


Ответы (1)


Вы также можете попробовать использовать google.maps.KmlLayer.

Рассматривали ли вы возможность использования нового KmlLayer API Google Maps v3? По сути, здесь происходит то, что Google действует как прокси для захвата любого общедоступного слоя KML и автоматически разбивает его на плитки. Этот мозаичный слой также может реагировать на события щелчка, очень похоже на то, как это сделал бы векторный слой. (ссылка)

Пожалуйста, обратитесь к похожей теме на https://gis.stackexchange.com/.

person fedosov    schedule 11.07.2012
comment
Спасибо! Слои KML кажутся подходящим вариантом. Я тестировал это раньше, но у меня сложилось впечатление, что вы не можете стилизовать формы KML. Однако это возможно (в файле KML). - person Rutger; 11.07.2012
comment
Также вы можете размещать и редактировать KML в инструменте Google Maps My Places. - person fedosov; 11.07.2012