Frage
Wie konvertiere ich eine SVG-Datei in das GeoJSON-Format?
Gewünschtes Ergebnis:
Ich möchte eine Choropleth-Map mit etwas wie D3.js oder einer der anderen Bibliotheken da draußen erstellen.
Herausforderung:
Ich habe eine SVG-Datei, die ich für eine bestimmte Provinz eines bestimmten Landes aus dem öffentlichen Bereich der Verwaltungsregionen erhalten konnte. Ich glaube, ich muss das in GeoJSON konvertieren, bevor ich es in den mir bekannten Bibliotheken verwenden kann.
Antworten:
Ich habe gerade eine Bibliothek geschrieben, die ein SVG-Bild in ein (leicht falsches) GeoJSON konvertiert.
svg2geojson
Sie müssen Ihre SVG-Datei manuell bearbeiten, um zwei XML-Tags hinzuzufügen, die einen SVG-Speicherort mit einem Lat / Long-Wert verknüpfen. Außerdem wird ein Befehlszeilentool zum Konvertieren der Datei bereitgestellt. Wenn Sie möchten, werden sogar alle Gruppen der obersten Ebene (als was Illustrator die Ebenen exportiert) und als separate Dateien exportiert.
Verwendung
Einschränkungen
Verwendet eine naive / inkorrekte Entprojektionstechnik, bei der angenommen wird, dass ein rechteckiger Bereich des Bildes einem rechteckigen Lat / Long-Bereich entspricht. Beispielsweise ist bei einem Rechteck in der Nähe von San Francisco, das etwa 1,6 km breit und 1,5 km hoch ist, die Unterkante etwa 5 cm länger als die Oberkante. Dies war nah genug für meine Bedürfnisse.
Derzeit wird SVG nicht unterstützt, das Pfade mit quadratischen Bézier- oder elliptischen Bogenbefehlen verwendet. (Ich arbeite daran, diese hinzuzufügen.)
quelle
<p5:GeoItem Longitude="22.1471203091967" Latitude="44.2498454806746" X="0" Y="1" />
Wie können diese 4 Geokoordinaten in diesen 8-Artikel-Datensatz übersetzt werden?Es gibt ein Kommandozeilen-Tool von Phrogz, das ich nicht ausgecheckt habe:
/gis//a/245085/35596
Für jeden, der hierher kommt, lautet die Antwort: "Es ist ziemlich schwierig (zumindest für einen erfahrenen Programmierer, aber unerfahrenen Kartografen)." Es erfordert ein mehr als oberflächliches Verständnis der Funktionsweise der Spacial Reference Systems (SRS). Sie müssen Ihre .SVG mehr oder weniger mit etwas wie QGIS geokodieren. Wie geht das? Immer noch keine Ahnung. Aber die Antwort lautet:
"Sie können SVG nicht einfach in GeoJSON konvertieren, da in SVG die grundlegenden Geoverweise fehlen."
Wenn Sie fortfahren möchten, suchen Sie nach einer Georeferenzierungsmethode für eine DXF-Datei.
Wie berechnet man Parameter für die QGIS-Affintransformation?
Die Antwort von Germán Carrillo ist sehr nützlich.
quelle
Das Kommandozeilen-Tool ogr2ogr sollte das können. Etwas wie:
Beide Formate werden unterstützt http://www.gdal.org/ogr_formats.html . Wenn Sie mit ogr2ogr nicht vertraut sind, können Sie es am einfachsten über https://trac.osgeo.org/osgeo4w/ herunterladen und installieren .
quelle
Sie müssen nicht von SVG nach GeoJSON konvertieren, um das Bild für ein Choroplethen in d3 zu verwenden, obwohl dies für andere Bibliotheken erforderlich sein kann.
Die Pfadinformationen in der SVG-Datei (es muss mindestens einen Pfad für jedes Bundesland / Land / Bundesland / Untergebiet in Ihrer Karte geben) reichen aus, um Daten auf Ihr SVG-Bild in d3 abzubilden.
Lassen Sie es mich anders sagen: Wenn Sie in Ihrem Original-SVG eine d3.select ausführen können, die nur einen Pfad pro Bundesstaat / Land / Region zurückgibt, können Sie mit d3 ein Choroplethen erstellen. Dies ist normalerweise der Fall, wenn Sie eine Karte in SVG haben. Es ist tatsächlich einfacher als die Verwendung einer GeoJSON-Datei, da Sie sich nicht um den Speicherort, die Projektion usw. kümmern müssen. Möglicherweise möchten Sie sogar die ursprüngliche SVG-Datei optimieren, um fehlende Informationen hinzuzufügen (z. B. Statusnamen, die Sie als DOM-IDs oder hinzufügen können Klassen) vor der Verwendung mit D3, aber das ist in der Regel nicht erforderlich.
Auf der anderen Seite enthält SVG, wie bereits erwähnt, nur Pfad- / Linieninformationen, keine geografischen / räumlichen Informationen. Wenn Sie also von SVG zu GeoJSON konvertieren möchten, müssen Sie Geolocation-Informationen zu Ihrem SVG-Bild HINZUFÜGEN / MAPEN. Zum Beispiel können Sie zuerst von svg nach JSON konvertieren, dann Geolocation-Informationen berechnen / hinzufügen (dies hängt von der Region ab, die Sie zuordnen) und daraus ein GeoJSON generieren. Soweit ich weiß, gibt es kein sofort einsatzbereites Tool, um diesen Job für Sie zu erledigen.
quelle
Ich würde versuchen, das Shapefile- Format anstelle von SVG für die gesuchte Provinz zu verwenden. Da die Daten gemeinfrei sind, sind die Chancen gut, dass Sie sie finden. Versuchen Sie http://www.naturalearthdata.com/ oder stellen Sie hier eine Frage. Konvertieren Sie dann von Shapefile nach GeoJSON oder TopoJSON. MapShaper ist dein Freund. Ab diesem Punkt sollte D3 in Reichweite sein (exzellentes Tutorial Let's Make a Map )
quelle