Pytanie
Jak przekonwertować plik SVG do formatu GeoJSON?
Pożądany wynik:
Chcę zrobić mapę choropleth przy użyciu czegoś takiego jak D3.js lub dowolnej innej biblioteki.
Wyzwanie:
Mam plik SVG, który udało mi się uzyskać z domeny publicznej regionów administracyjnych dla konkretnej prowincji danego kraju. Uważam, że muszę przekonwertować to na GeoJSON, zanim będę mógł używać go w bibliotekach, o których wiem.
Odpowiedzi:
Właśnie napisałem bibliotekę, która konwertuje obraz SVG na (nieco niepoprawny) GeoJSON.
svg2geojson
Wymaga ręcznej edycji pliku SVG, aby dodać dwa tagi XML, które kojarzą lokalizację SVG z długością / długością, oraz zapewnia narzędzie wiersza polecenia do konwersji pliku. Jeśli chcesz, nawet weźmie wszystkie grupy najwyższego poziomu (tak jak program Illustrator eksportuje swoje warstwy) i wyeksportuje je jako osobne pliki.
Stosowanie
Ograniczenia
Wykorzystuje naiwną / niepoprawną technikę niep rzutowania, która zakłada, że prostokątny obszar obrazu odpowiada prostokątnemu obszarowi lat / long. Na przykład na prostokącie o szerokości około 1 mili i wysokości pół mili w pobliżu San Francisco dolna krawędź jest około 4 cali dłuższa niż górna krawędź. To było wystarczająco blisko moich potrzeb.
Obecnie nie obsługuje SVG, które wykorzystuje ścieżki z kwadratowymi poleceniami Béziera lub eliptycznymi łukami. (Pracuję nad ich dodaniem).
źródło
<p5:GeoItem Longitude="22.1471203091967" Latitude="44.2498454806746" X="0" Y="1" />
jaki sposób te 4 geokoordynaty mogą zostać przetłumaczone na ten 8-elementowy zestaw danych?Istnieje narzędzie wiersza polecenia Phrogza wspomniane poniżej, którego nie sprawdziłem:
/gis//a/245085/35596
Dla każdego, kto tu przyjdzie, odpowiedź brzmi: „jest to dość trudne (przynajmniej dla doświadczonego programisty, ale niedoświadczonego kartografa)”. Wymaga to bardziej niż powierzchownego zrozumienia, jak działają kosmiczne systemy odniesienia (SRS). Mniej więcej musisz geokodować swój .SVG przy użyciu czegoś takiego jak QGIS. Jak to się robi? Nadal nie mam pojęcia. Ale odpowiedź brzmi:
„Nie można po prostu przekonwertować SVG na GeoJSON, ponieważ SVG nie ma podstawowych odniesień geograficznych”.
Jeśli chcesz kontynuować, rozpocznij wyszukiwanie georeferencji pliku DXF.
Jak obliczyć parametry transformacji afinicznej QGIS?
Odpowiedź Germána Carrillo jest bardzo przydatna.
źródło
Powinno być to możliwe w narzędziu ogr2ogr z wiersza poleceń. Coś jak:
Oba te formaty są obsługiwane http://www.gdal.org/ogr_formats.html . Jeśli nie znasz ogr2ogr, najłatwiejszym sposobem na jego pobranie i zainstalowanie jest prawdopodobnie https://trac.osgeo.org/osgeo4w/ .
źródło
Nie trzeba konwertować z SVG na GeoJSON, aby użyć obrazu do choropleta w d3, chociaż może być to konieczne w przypadku innych bibliotek.
Informacje o ścieżce w pliku SVG (musi istnieć co najmniej jedna ścieżka dla każdego stanu / kraju / stanu / podziału na mapie) jest wystarczająca do mapowania danych na obrazie SVG w d3.
Powiem inaczej: jeśli możesz zrobić plik d3.select na swoim oryginalnym pliku svg, który zwróci tylko jedną ścieżkę na stan / kraj / region, możesz użyć d3 do zbudowania choropletha. Zwykle dzieje się tak, gdy masz mapę w SVG. Jest to w rzeczywistości prostsze niż użycie pliku GeoJSON, ponieważ nie musisz martwić się o lokalizację miejsca, projekcję itp. Możesz nawet dostosować oryginalny plik SVG, aby dodać brakujące informacje (takie jak nazwy stanów, które możesz dodać jako identyfikatory DOM lub Klasy) przed użyciem go z D3, ale zwykle nie jest to konieczne.
Z drugiej strony, jak powiedziano wcześniej, SVG ma tylko informacje o ścieżce / liniach, a nie informacje geograficzne / przestrzenne, więc jeśli chcesz przekonwertować z SVG do GeoJSON, musisz dodać informacje geolokalizacyjne do mapy SVG. Na przykład możesz najpierw przekonwertować z svg na JSON, a następnie obliczyć / dodać informacje o geolokalizacji (będzie to zależało od regionu, na którym mapujesz) i wygenerować z tego GeoJSON. O ile wiem, nie ma gotowego narzędzia do wykonania tej pracy dla ciebie.
źródło
Spróbowałbym pobrać format pliku shapefile zamiast SVG dla prowincji, której szukasz. Ponieważ dane są własnością publiczną, istnieje duże prawdopodobieństwo, że je znajdziesz. Spróbuj http://www.naturalearthdata.com/ lub zadaj pytanie tutaj. Następnie przekonwertuj z Shapefile na GeoJSON lub TopoJSON; MapShaper jest twoim przyjacielem. Od tego momentu D3 powinien być w zasięgu ręki (doskonały samouczek Zróbmy mapę )
źródło