Самый простой способ будет сделать это, добавив их в качестве многоугольников листовка-х L.GeoJSON
. Сначала вам нужно найти правильный набор данных о границах мира. Я нашел его здесь: https://github.com/johan/world.geo.json Сохраните файл world.geo.json
, чтобы вы могли использовать его на своем собственном сервере. Теперь инициализировать простую карту:
var map = L.map('map', {
'center': [0, 0],
'zoom': 0,
'layers': [
L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
'attribution': 'Map data © OpenStreetMap contributors'
})
]
});
Fetch файл GeoJSON с помощью своей любимой библиотеки XHR (я использую JQuery в данном примере), а затем использовать эти данные для инициализации GeoJSON слоя и сделать некоторые стили:
$.getJSON('world.geo.json', function (geojson) { // load file
L.geoJson(geojson, { // initialize layer with data
style: function (feature) { // Style option
return {
'weight': 1,
'color': 'black',
'fillColor': 'yellow'
}
}
}).addTo(map); // Add layer to map
});
Вот и все, не может быть проще. Вот рабочий пример на Plunker:
http://plnkr.co/edit/UGQ9xt?p=preview
(обратите внимание, что я загрузить файл GeoJSON непосредственно через Gitraw/Github, но вы не должны делать это в производственной площадке)
И вот ссылка на L.GeoJSON
:
http://leafletjs.com/reference.html#geojson
Edit: Другие варианты являются более сложными, но не имеют некоторые недостатки вы упоминали в комментариях, здесь лучшее, что я могу придумать:
Используя комбинацию листовки и потрясающую библиотеку D3 от Майка Бостока. Вот краткий пример: http://bost.ocks.org/mike/leaflet/ Он не страдает от перерисовывания на кастрюле, но его сложнее понять.
Другое решение использует Mapbox У них есть инструмент под названием TileMill, который позволяет создавать собственные плитки. Это было бы идеальным решением, у него не было бы ни одного из упомянутых недостатков, и вы можете создать почти все. Единственным недостатком является то, что вам нужно будет устраивать плитки самостоятельно.
Ваше решение действительно просто, спасибо. Несмотря на то, что есть некоторые недостатки, такие как границы, которые точно не соответствуют контурам (может быть лучше с более точным набором данных) или полигонам, которые не обновляются при панорамировании до мыши. К сожалению, клиент очень рад изменениям цвета и, вероятно, хвастается упомянутыми недостатками. – phippu
Более точный набор данных действительно является решением, я просто демонстрировал. Он будет увеличиваться, так что это более длительная загрузка, но это может быть решено путем преобразования вашего набора данных в [topojson] (https://github.com/mbostock/topojson) и покрытия его на клиенте. Есть и другие варианты, которые используют Листовку, я добавлю их к моему ответу. И нет, спасибо, вы всегда приветствуете, это то, для чего SO. Просто примите ответ, если это решение вашей проблемы, чтобы другие с той же проблемой могли найти утвержденное решение. – iH8
@ iH8 + 1up для упоминания TileMill. Отлично работает – FredFury