Pregunta
¿Cómo convierto un archivo SVG al formato GeoJSON?
Resultado deseado:
Quiero hacer un mapa coroplético usando algo como D3.js, o cualquiera de las otras bibliotecas disponibles.
Desafío:
Tengo un archivo SVG que pude obtener del dominio público de las regiones administrativas para una provincia en particular de un país en particular. Creo que necesito convertir eso a GeoJSON antes de poder usarlo en las bibliotecas que conozco.
Respuestas:
Acabo de escribir una biblioteca que convierte una imagen SVG en un GeoJSON (ligeramente incorrecto).
svg2geojson
Requiere que edite manualmente su SVG para agregar dos etiquetas XML que asocian una ubicación SVG con un lat / long, y proporciona una herramienta de línea de comandos para convertir el archivo. Incluso, si lo desea, tomará todos los grupos de nivel superior (que es a lo que Illustrator exporta sus capas) y los exportará como archivos separados.
Uso
Limitaciones
Utiliza una técnica de no proyección ingenua / incorrecta que asume que una región rectangular de la imagen corresponde a una región rectangular larga / larga. Por ejemplo, en un rectángulo de aproximadamente 1 milla de ancho por media milla de alto cerca de San Francisco, el borde inferior es aproximadamente 4 pulgadas más largo que el borde superior. Esto fue lo suficientemente cerca para mis necesidades.
Actualmente no es compatible con SVG que utiliza rutas con Bézier cuadrático o comandos de arco elíptico. (Estoy trabajando en agregar estos).
fuente
<p5:GeoItem Longitude="22.1471203091967" Latitude="44.2498454806746" X="0" Y="1" />
¿Cómo pueden traducirse esas 4 geocoordenadas en este conjunto de datos de 8 elementos?Hay una herramienta de línea de comandos de Phrogz mencionada a continuación que no he revisado:
/gis//a/245085/35596
Para cualquiera que venga aquí, la respuesta es: "es bastante difícil (al menos para un programador experimentado pero cartógrafo inexperto)". Requiere una comprensión más que superficial de cómo funcionan los sistemas de referencia espacial (SRS). Más o menos necesita geocodificar su .SVG usando algo como QGIS. ¿Cómo se hace eso? Todavía no tengo idea. Pero la respuesta es:
"No puede simplemente convertir SVG a GeoJSON, ya que a SVG le faltan las referencias geográficas fundamentales".
Si desea continuar, comience a buscar cómo georreferenciar un archivo DXF.
¿Cómo calcular los parámetros para la transformación QGIS Affine?
La respuesta de Germán Carrillo allí es muy útil.
fuente
La herramienta de línea de comandos ogr2ogr debería poder hacerlo. Algo como:
Ambos formatos son compatibles con http://www.gdal.org/ogr_formats.html . Si no está familiarizado con ogr2ogr, la forma más fácil de descargarlo e instalarlo es probablemente a través de https://trac.osgeo.org/osgeo4w/ .
fuente
No necesita convertir de SVG a GeoJSON para usar la imagen para un coropthth en d3, aunque puede ser necesario para otras bibliotecas.
La información de ruta en el archivo SVG (debe haber al menos una ruta para cada estado / país / estado / subdivisión en su mapa) es suficiente para asignar datos a su imagen SVG en d3.
Permítanme decirlo de otra manera: si puede hacer un d3.select en su svg original que devolverá solo una ruta por estado / país / región, entonces puede usar d3 para construir un coropleth. Este suele ser el caso cuando tiene un mapa en SVG. En realidad, es más simple que usar un archivo GeoJSON, ya que no necesita preocuparse por la ubicación del espacio, la proyección, etc. Es posible que incluso desee modificar el SVG original para agregar información faltante (como nombres de estado, que puede agregar como ID de DOM o Clases) antes de usarlo con D3, pero eso generalmente no es necesario.
Por otro lado, como se dijo antes, SVG solo tiene información de ruta / líneas, no información geográfica / espacial, por lo que si desea convertir de SVG a GeoJSON, entonces necesita AGREGAR / MAP información de geolocalización a su imagen SVG. Por ejemplo, primero puede convertir de svg a JSON, luego calcular / agregar información de geolocalización (esto dependerá de la región que esté mapeando) y generar un GeoJSON a partir de eso. Sin embargo, hasta donde sé, no existe una herramienta lista para usar que haga este trabajo por usted.
fuente
Intentaría obtener el formato de archivo de forma en lugar de SVG para la provincia que está buscando. Dado que los datos son de dominio público, es muy probable que pueda encontrarlos. Pruebe http://www.naturalearthdata.com/ o haga una pregunta aquí. Luego convierta de Shapefile a GeoJSON o TopoJSON; MapShaper es tu amigo. Desde este punto, D3 debería estar al alcance (excelente tutorial Hagamos un mapa )
fuente