Question
Comment convertir un fichier SVG au format GeoJSON?
Résultat souhaité:
Je veux créer une carte choroplèth en utilisant quelque chose comme D3.js, ou n'importe quelle autre bibliothèque.
Défi:
J'ai un fichier SVG que j'ai pu obtenir du domaine public des régions administratives pour une province particulière d'un pays particulier. Je crois que je dois le convertir en GeoJSON avant de pouvoir l'utiliser dans les bibliothèques que je connais.
Réponses:
Je viens d'écrire une bibliothèque qui convertit une image SVG en un GeoJSON (légèrement incorrect).
svg2geojson
Il nécessite que vous modifiez manuellement votre SVG pour ajouter deux balises XML qui associent un emplacement SVG à un lat / long, et il fournit un outil en ligne de commande pour convertir le fichier. Il prendra même, si vous le souhaitez, tous les groupes de niveau supérieur (c'est ainsi qu'Illustrator exporte ses calques) et les exportera en tant que fichiers séparés.
Usage
Limites
Utilise une technique de non-projection naïve / incorrecte qui suppose qu'une région rectangulaire de l'image correspond à une région rectangulaire lat / longue. Par exemple, sur un rectangle d'environ 1 mile de large par un demi-mile de haut près de San Francisco, le bord inférieur est environ 4 pouces plus long que le bord supérieur. C'était assez proche de mes besoins.
Actuellement, ne prend pas en charge SVG qui utilise des chemins avec des commandes quadratiques de Bézier ou d'arc elliptique. (Je travaille sur l'ajout de ceux-ci.)
la source
<p5:GeoItem Longitude="22.1471203091967" Latitude="44.2498454806746" X="0" Y="1" />
Comment ces 4 coordonnées géographiques peuvent-elles être traduites dans cet ensemble de données de 8 éléments?Il y a un outil en ligne de commande par Phrogz mentionné ci-dessous que je n'ai pas vérifié:
/gis//a/245085/35596
Pour quiconque vient ici, la réponse est: "c'est assez difficile (au moins pour un programmeur expérimenté mais un cartographe inexpérimenté)". Cela nécessite une compréhension plus que superficielle du fonctionnement des systèmes de référence spatiale (SRS). Vous avez plus ou moins besoin de géocoder votre .SVG en utilisant quelque chose comme QGIS. Comment cela se fait-il? Toujours aucun indice. Mais la réponse est:
"Vous ne pouvez pas simplement convertir SVG en GeoJSON, car SVG manque les références géographiques fondamentales."
Si vous souhaitez continuer, commencez à rechercher comment géoréférencer un fichier DXF.
Comment calculer les paramètres de la transformation QGIS Affine?
La réponse de Germán Carrillo y est très utile.
la source
L'outil de ligne de commande ogr2ogr devrait pouvoir le faire. Quelque chose comme:
Ces deux formats sont pris en charge http://www.gdal.org/ogr_formats.html . Si vous n'êtes pas familier avec ogr2ogr, le moyen le plus simple de le télécharger et de l'installer est probablement via https://trac.osgeo.org/osgeo4w/ .
la source
Vous n'avez pas besoin de convertir de SVG en GeoJSON pour utiliser l'image pour un choroplèth en d3, bien que cela puisse être nécessaire pour d'autres bibliothèques.
Les informations de chemin sur le fichier SVG (il doit y avoir au moins un chemin pour chaque état / pays / état / subdivision dans votre carte) sont suffisantes pour mapper les données à votre image SVG en d3.
Permettez-moi de le dire d'une autre manière: si vous pouvez faire un d3.select sur votre svg d'origine qui ne renverra qu'un seul chemin par état / pays / région, alors vous pouvez utiliser d3 pour construire un choroplèth. C'est généralement le cas lorsque vous avez une carte en SVG. C'est en fait plus simple que d'utiliser un fichier GeoJSON car vous n'avez pas à vous soucier de l'emplacement de l'espace, de la projection, etc. Avant de l'utiliser avec D3, mais ce n'est généralement pas nécessaire.
D'un autre côté, comme cela a été dit précédemment, les SVG ont juste des informations de chemin / lignes, pas des informations géographiques / spatiales, donc si vous voulez convertir de SVG en GeoJSON alors vous devez AJOUTER / MAP des informations de géolocalisation à votre image SVG. Par exemple, vous pouvez d'abord convertir de svg en JSON, puis calculer / ajouter des informations de géolocalisation (cela dépendra de la région que vous mappez) et générer un GeoJSON à partir de cela. Pour autant que je sache, il n'y a pas d'outil prêt à l'emploi pour faire ce travail pour vous.
la source
J'essaierais de source le format shapefile au lieu de SVG pour la province que vous recherchez. Comme les données sont du domaine public, les chances sont bonnes, vous pouvez les trouver. Essayez http://www.naturalearthdata.com/ ou posez une question ici. Convertissez ensuite de Shapefile en GeoJSON ou TopoJSON; MapShaper est votre ami. A partir de là, D3 devrait être à portée de main (excellent tutoriel Créons une carte )
la source