Как вы визуализируете полигоны с отверстиями из WKT в Google Maps?

Проект, над которым я работаю, включает в себя анализ SVG, извлечение координат пути, преобразование их в общеизвестный текст, а затем в GeoJSON для добавления в слой данных API Карт Google.

Это все работает нормально, пока в пути нет одного или нескольких отверстий. В данном случае я имею дело с одним составным путем, описывающим множество взаимосвязанных дорог. Я использую SVG-to-WKT для генерации WKT, и его функция пути утверждает, что если в пути есть дыры, возвращаемый примитив преобразуется в синтаксис вычитаемого многоугольника с массивами координат для отверстий, следующих за массивом координат для контур. Этот многоугольник, по-видимому, правильно конвертируется в GeoJSON (используя Terraformer), что приводит к массиву массивов координат. Координаты пикселей, полученные в результате этого преобразования, затем переводятся в координаты карты.

Однако, когда GeoJSON добавляется в слой данных, координаты для отверстий искажаются и появляются в верхнем левом углу их предполагаемого положения с некоторыми полигонами, растягивающимися между двумя точками.

Это лишь небольшая выдержка из результата (не показывает растяжение): http://bl.ocks.org/d/4ace4c9c25e02ad658be21c92187b336

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

Ниже приведен скриншот того, как существует группа дорог в SVG с выбранным одиночным составным путем:

введите описание изображения здесь

И вот как создается вся группа дорожек:

введите описание изображения здесь

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

1 ответ

Вопрос оказался довольно тривиальным, но потребовалось время, чтобы осознать. Я сократил SVG до одного пути и внимательно изучил данные координат. Я заметил, что отверстия были добавлены как относительные пути, а не как абсолютные. Это нормально для SVG, но WKT-конвертер предполагает, что каждый путь является абсолютным.

Я просто добавил библиотеку Snap и пропустил каждый путь через функцию toAbsolute().

Другие вопросы по тегам