Daha çox

.SVG Dosyasını GeoJSON-a çevirmə üsulları


Sual

Bir SVG sənədini GeoJSON formatına necə çevirə bilərəm?

İstədiyiniz nəticə:

D3.js və ya oradakı digər kitabxanalar kimi bir şeydən istifadə edərək choropleth xəritəsi hazırlamaq istəyirəm.

Çağırış:

Müəyyən bir ölkənin müəyyən bir əyaləti üçün inzibati bölgələrin ictimai sahəsindən əldə edə bildiyim bir SVG sənədim var. Bildiyim kitabxanalarda istifadə edə bilmədən əvvəl GeoJSON-a çevirməyim lazım olduğuna inanıram.


Sadəcə bir SVG görüntüsünü (bir az səhv) bir GeoJSON-a çevirən bir kitabxana yazdım.

Svg2geojson

Bir SVG yerini bir lat / long ilə əlaqələndirən iki XML etiketi əlavə etmək üçün SVG-nizi əl ilə düzəltməyinizi tələb edir və bu faylı çevirmək üçün bir əmr sətri vasitəsi təmin edir. İstəsəniz, bütün üst səviyyəli qrupları (Illustrator-un təbəqələrini ixrac etdiyi budur) götürüb ayrı-ayrı sənədlər şəklində ixrac edəcəkdir.

İstifadəsi

# Əvvəlcə Node.js yükləyin $ npm quraşdırma svg2geojson -g # yürütülə bilən $ svg2geojson -h # -ə asanlıqla daxil olmaq üçün qlobal olaraq quraşdırın. İstifadəsi: svg2geojson [options] file.svg Seçimlər: -t, --tolerance = 0.1 məsafəsi (dünya metr) nümunə əyriləri. (standart: 0.1) -l, - layers Üst səviyyəli qrupları ayrı-ayrı sənədlərə ayırın. (varsayılan: bir fayl) -o, --stdout GeoJSON-u stdout-a çıxarın. (varsayılan: SVG / qatına əsaslanan adları olan faylları yazın) -m, --minimal GeoJSON-u mümkün qədər kiçik olun (yaraşıqlı deyil). -p, - dəqiqlik JSON nömrələrini formatlaşdırmaq üçün onluq yerlərin sayı. (default: 6, GeoJSON-un tövsiyə etdiyi kimi) -d, --debug Hər SVG elementi üçün identifikatorları xüsusiyyətlərə daxil edin. (default: xassələr yoxdur) -v, --version svg2geojson versiyasını stdout (0.7.0) sətirində ilk sətir olaraq çıxardı. -h, --help Bu kömək mesajını göstərin. $ svg2geojson my.svg my.geojson yazdı

Məhdudiyyətlər

  • Görüntünün düzbucaqlı bir bölgəsinin düzbucaqlı bir lat / uzun bölgəyə uyğun gəldiyini düşünən sadəlövh / səhv bir proyeksiya texnikasından istifadə edir. Məsələn, San Fransisko yaxınlığında təxminən 1 mil enində və yarım mil hündürlüyündə bir düzbucaqlıda, alt kənar üst kənarından təxminən 4 düym uzundur. Bu ehtiyaclarım üçün kifayət qədər yaxın idi.

  • Hal-hazırda kvadratik Bézier və ya eliptik yay əmrləri olan yollardan istifadə edən SVG-ni dəstəkləmir. (Bunları əlavə etmək üzərində işləyirəm.)


Phrogz tərəfindən aşağıda göstərilən bir komanda xətti vasitəsi var, yoxlamamışam:

https://gis.stackexchange.com/a/245085/35596


Buraya gələn hər kəsə cavab belədir: "bu olduqca çətindir (ən azı təcrübəli bir proqramçı, lakin təcrübəsiz bir kartoqraf üçün)." Spacial Reference Systems (SRS) nin necə işlədiyini səthi deyil, daha çox başa düşmək lazımdır. QGIS kimi bir şey istifadə edərək .SVG-nizi coğrafi kodlaşdırmağınıza az və ya çox ehtiyacınız var. Bu necə edilir? Hələ bir ipucu yoxdur. Ancaq cavab budur:

"Sadəcə SVG-ni GeoJSON-a çevirə bilməzsiniz, çünki SVG əsas coğrafi istinadları əskikdir."

Davam etmək istəyirsinizsə, bir DXF sənədinin yerindən necə müraciət ediləcəyini axtarmağa başlayın.

QGIS Affine transformasiyası üçün parametrlər necə hesablanır?

Germán Carrillo-nun cavabı çox faydalıdır.


Digər kitabxanalar üçün lazım ola bilsə də, şəkli d3-də bir choroplet üçün istifadə etmək üçün SVG-dən GeoJSON-a çevirmək lazım deyil.

SVG sənədindəki yol məlumatları (xəritənizdə hər bir əyalət / ölkə / əyalət / bölmə üçün ən azı bir yol olmalıdır) məlumatları SVG şəklinizə d3-də göstərmək üçün kifayətdir.

Bunu başqa bir şəkildə izah edim: orijinal svg-də bir əyalət / ölkə / bölgə üçün yalnız bir yol qaytaracaq bir d3.select edə bilsən, o zaman bir choropleth qurmaq üçün d3-dən istifadə edə bilərsən. Bu, ümumiyyətlə SVG-də bir xəritə olduğunda olur. Əslində bir GeoJSON faylı istifadə etmək daha asandır, çünki yerin yerləşməsi, proyeksiya və s. Barədə narahat olmağınız lazım deyil, hətta əskik SVG-yə çatışmayan məlumatları əlavə etmək üçün (dövlət adları kimi, DOM ID-ləri kimi əlavə edə biləcəyiniz) Dərslər) D3 ilə istifadə etmədən əvvəl, lakin ümumiyyətlə lazım deyil.

Digər tərəfdən, daha əvvəl də deyildiyi kimi, SVG-də coğrafi / məkan məlumatları deyil, sadəcə yol / xətt məlumatları var, bu səbəbdən SVG-dən GeoJSON-a çevirmək istəyirsinizsə, SVG görüntüsünüzə coğrafi yerləşmə məlumatlarını əlavə etməlisiniz. Məsələn, əvvəlcə svg-dən JSON-a çevirə bilərsiniz, sonra coğrafi yerləşmə məlumatlarını hesablaya / əlavə edə bilərsiniz (bu xəritələşdirdiyiniz bölgədən asılı olacaq) və bundan GeoJSON yarada bilərsiniz. Bildiyim qədər bu işi sizin üçün görməyə imkan verən bir vasitə yoxdur.


Aradığınız əyalət üçün SVG əvəzinə shapefile formatının mənbəyini sınayardım. Məlumatlar ictimai mülkiyyət şansları olduğundan, tapa bilərsiniz. Http://www.naturalearthdata.com/ saytını sınayın və ya burada bir sual verin. Sonra Shapefile-dən GeoJSON və ya TopoJSON-a çevirin; MapShaper sizin dostunuzdur. Bu nöqtədən etibarən D3 əlçatan olmalıdır (əla dərslik Bir xəritə edək)


Videoya baxın: NETCADDE - DXF DWG UZANTILI DOSYALARA KOT VERMEK (Oktyabr 2021).