Leaflet JS добавляет форму GeoJSON как отверстие в многоугольнике

9

У меня есть набор данных, который уже содержит геойсон. Я могу добавить его на карту со следующей строкой кода.

L.geoJson(data.geojson).addTo(map);

И я получаю это геойсон нанесен на карту

Но я хочу добиться этого, когда окружающая область покрыта, а моя форма геойсона - это дыра в середине.

геойсон как дыра в карте

Согласно листовке документации

Вы также можете создать многоугольник с отверстиями, передав массив массивов значений latlngs, причем первый массив значений latlngs представляет внешнее кольцо, а остальные представляют отверстия внутри.

Так что в теории что-то вроде:

var scotland = [[60,-13],[60,0],[50,4],[50,-13]];
L.Polygon([scotland,coordinatesOfShapeHole].addTo(map);

Моя проблема в том, что эта функция, похоже, не любит, когда я передаю data.geojson или data.geojson.coordinates в качестве второго параметра (argumentsOfShapeHole);

Есть ли какой-нибудь способ преобразовать data.geojson в формат, которым довольна функция L.Polygon?

Или альтернативно сделать то же самое, но с L.geoJson?

elMarquis
источник

Ответы:

7

Это должно работать. Какую версию Leaflet вы используете?

Вот, посмотрите на этот jsFiddle.

Важно, чтобы вы правильно поняли массивы.

Первый массив - это объект многоугольника [здесь внешнее кольцо [здесь некоторые [lat, lon], [,] закрывают внешнее кольцо], затем внутреннее кольцо [здесь некоторые [lat, lon], [,] закрывают внутреннее кольцо] закрыть многоугольник].

scotland = L.polygon([[[60,-13],[60,0],[50,4],[50,-13]],
                  [[55.7,-4.5],[56,-4.5],[56,-4],[55.7,-4]]]);
scotland.addTo(map);
Деннис Баусус
источник
1
Привет спасибо. Это прекрасно работает, если я имею дело с простым многоугольником, но мои данные в формате геойсона. Знаете ли вы, есть ли способ преобразовать геойсон в координаты многоугольника? Или добиться этого с помощью L.geoJson?
ElMarquis,
Это не должно быть проблемой. Я разветвлял jsFiddle, чтобы использовать L.geoJson. jsfiddle.net/goldrydigital/xa6vg5zj
Деннис Баусус
Блестящее спасибо. Я не осознавал, что геойсон содержит определение многоугольника, который может быть передан в виде множественного массива, аналогичного стандартному многоугольнику.
elMarquis