Вопрос
Как преобразовать файл SVG в формат GeoJSON?
Желаемый результат:
Я хочу сделать карту с хороплетом, используя что-то вроде D3.js или любую другую библиотеку.
Вызов:
У меня есть файл SVG, который я смог получить из общественного достояния административных регионов для конкретной провинции конкретной страны. Я считаю, что мне нужно преобразовать это в GeoJSON, прежде чем я смогу использовать его в библиотеках, которые мне известны.
Ответы:
Я только что написал библиотеку, которая преобразует SVG-изображение в (слегка некорректный) GeoJSON.
svg2geojson
Это требует, чтобы вы вручную отредактировали свой SVG, чтобы добавить два XML-тега, которые связывают местоположение SVG с широтой / долготой, и он предоставляет инструмент командной строки для преобразования файла. Он даже при желании возьмет все группы верхнего уровня (как это делает Illustrator для экспорта своих слоев) и экспортирует их как отдельные файлы.
использование
Ограничения
Использует наивную / неправильную технику непроекции, которая предполагает, что прямоугольная область изображения соответствует прямоугольной широте / длинной области. Например, на прямоугольнике шириной около 1 мили и высотой в полмили около Сан-Франциско нижний край на 4 дюйма длиннее верхнего. Это было достаточно близко для моих нужд.
В настоящее время не поддерживается SVG, в котором используются пути с квадратичными командами Безье или эллиптической дуги. (Я работаю над добавлением этих.)
источник
<p5:GeoItem Longitude="22.1471203091967" Latitude="44.2498454806746" X="0" Y="1" />
Как эти 4 геокоординаты могут быть переведены в этот набор данных из 8 элементов?Phrogz упомянул ниже инструмент командной строки, который я не проверял:
/gis//a/245085/35596
Для всех, кто приходит сюда, ответ таков: «это довольно сложно (по крайней мере, для опытного программиста, но неопытного картографа)». Это требует более чем поверхностного понимания того, как работают Spacial Reference Systems (SRS). Вам более или менее необходимо геокодировать ваш .SVG, используя что-то вроде QGIS. Как это сделать? До сих пор нет понятия. Но ответ таков:
«Вы не можете просто конвертировать SVG в GeoJSON, так как в SVG отсутствуют основные гео-ссылки».
Если вы хотите продолжить, начните поиск с географической привязкой файла DXF.
Как вычислить параметры для аффинного преобразования QGIS?
Ответ Германа Каррильо там очень полезен.
источник
Инструмент командной строки ogr2ogr должен уметь это делать. Что-то вроде:
Оба этих формата поддерживаются http://www.gdal.org/ogr_formats.html . Если вы не знакомы с ogr2ogr, самый простой способ загрузить и установить его, вероятно, через https://trac.osgeo.org/osgeo4w/ .
источник
Вам не нужно конвертировать из SVG в GeoJSON, чтобы использовать изображение для хороплета в d3, хотя это может быть необходимо для других библиотек.
Информация о пути в файле SVG (должен быть хотя бы один путь для каждого штата / страны / штата / подразделения на вашей карте) достаточно для сопоставления данных с вашим SVG-изображением в d3.
Позвольте мне выразить это по-другому: если вы можете сделать d3.select на вашем исходном svg, который будет возвращать только один путь на штат / страну / регион, то вы можете использовать d3 для создания хороплета. Обычно это тот случай, когда у вас есть карта в SVG. На самом деле это проще, чем использовать файл GeoJSON, так как вам не нужно беспокоиться о местоположении в пространстве, проекции и т. Д. Возможно, вы даже захотите настроить исходный SVG-файл, чтобы добавить недостающую информацию (например, имена состояний, которые вы можете добавить в качестве идентификаторов DOM или Классы), прежде чем использовать его с D3, но обычно это не нужно.
С другой стороны, как было сказано ранее, в SVG есть только информация о путях / линиях, а не географическая / пространственная информация, поэтому, если вы хотите конвертировать из SVG в GeoJSON, вам нужно добавить информацию о геолокации ADD / MAP в ваше изображение SVG. Например, вы можете сначала преобразовать из SVG в JSON, а затем рассчитать / добавить информацию о геолокации (это будет зависеть от региона, который вы отображаете) и сгенерировать из него GeoJSON. Насколько я знаю, нет готового инструмента, который бы сделал эту работу за вас.
источник
Я бы попробовал использовать исходный формат шейп- файла вместо SVG для провинции, которую вы ищете. Поскольку данные являются достоянием общественности, вы можете найти их. Попробуйте http://www.naturalearthdata.com/ или задайте вопрос здесь. Затем конвертируйте из Shapefile в GeoJSON или TopoJSON; MapShaper твой друг. С этого момента D3 должен быть в пределах досягаемости (отличный учебник Давайте создадим карту )
источник