कन्वर्ट करने के तरीके .SVG फाइल जियोजॉन के लिए


12

सवाल

मैं एसवीजी फ़ाइल को जियोसन प्रारूप में कैसे परिवर्तित करूं?

वांछित परिणाम:

मैं डी 3.js, या वहाँ से बाहर किसी भी अन्य पुस्तकालयों की तरह कुछ का उपयोग कर एक कोरोप्लेथ नक्शा बनाना चाहता हूं।

चुनौती:

मेरे पास एक एसवीजी फ़ाइल है जिसे मैं किसी विशेष देश के एक विशेष प्रांत के लिए प्रशासनिक क्षेत्रों के सार्वजनिक डोमेन से प्राप्त करने में सक्षम था। मेरा मानना ​​है कि मुझे उन पुस्तकालयों में इसका उपयोग करने में सक्षम होने से पहले जियोसन में परिवर्तित करना होगा जिनके बारे में मैं जानता हूं।


2
विशेष देश के विशेष प्रांत के प्रशासनिक क्षेत्र क्या हैं? हम गलत समस्या को हल करने के लिए लड़ने के बजाय SHP या GeoJSON उपलब्ध फ़ाइलों को खोजने में मदद कर सकते हैं।
थॉमसजी 7

जवाबों:


5

मैंने सिर्फ एक पुस्तकालय लिखा है जो एक SVG छवि को (थोड़ा-गलत) GeoJSON में परिवर्तित करता है।

svg2geojson

यह आवश्यक है कि आप अपने एसवीजी को दो XML टैग जोड़ने के लिए हाथ से संपादित करें जो एक एसवीजी स्थान को एक अव्यक्त / लंबे समय के साथ जोड़ते हैं, और यह फ़ाइल को परिवर्तित करने के लिए एक कमांड-लाइन टूल प्रदान करता है। यह भी, यदि आप चाहें, तो सभी शीर्ष-स्तरीय समूह (जो कि इलस्ट्रेटर अपनी परतों को निर्यात करता है) को ले जाएं और उन्हें अलग-अलग फ़ाइलों के रूप में निर्यात करें।

प्रयोग

# First, install Node.js

$ npm install svg2geojson -g  # install globally for easy access to executable

$ svg2geojson -h
Usage: svg2geojson [options] file.svg

Options:
 -t, --tolerance=0.1 Distance (world meters) to sample curves to. (default: 0.1)
 -l, --layers        Split top-level groups into separate files. (default: one file)
 -o, --stdout        Output GeoJSON to stdout. (default: write files with names based on the SVG/layer)
 -m, --minimal       Make the GeoJSON as small as possible (not pretty).
 -p, --precision     Number of decimal places to format JSON numbers to. (default:6, as GeoJSON recommends)
 -d, --debug         Include ids for each SVG element in the features. (default: no properties)
 -v, --version       Output the version of svg2geojson as the first line on stdout (0.7.0).
 -h, --help          Show this help message.

$ svg2geojson my.svg
Wrote my.geojson

सीमाएं

  • एक भोले / गलत संयुक्त प्रक्षेपण तकनीक का उपयोग करता है जो मानता है कि छवि का एक आयताकार क्षेत्र एक आयताकार लैट या लंबे क्षेत्र से मेल खाता है। उदाहरण के लिए, सैन फ्रांसिस्को के पास आधा मील लंबा एक 1 मील चौड़ा एक आयत पर, नीचे का किनारा शीर्ष किनारे से लगभग 4 इंच लंबा है। यह मेरी जरूरतों के लिए पर्याप्त था।

  • वर्तमान में एसवीजी का समर्थन नहीं करता है जो द्विघात या अण्डाकार चाप कमांड के साथ पथ का उपयोग करता है। (मैं इन्हें जोड़ने पर काम कर रहा हूं।)


दिसंबर 2017 से संस्करण उस रिपॉजिटरी के एक पुल अनुरोध में भी काम करता है, यदि आप चाहते हैं कि 2 के बजाय 3 बिंदुओं के साथ जियोफेरेंस की आवश्यकता है। मुझे अभी भी मेरे सिर को परेशान करने की ज़रूरत है कि दोनों संस्करणों के साथ कौन सा तरीका है, और मेरे परिणामस्वरूप बहुभुज को प्रतिबिंबित किया गया था उल्टा। इसने एसवीजी से प्रापर्टीज में शामिल होने के लिए थोड़ा और काम किया होगा। हालांकि भविष्य में उपयोग करने के लिए तत्पर हैं। शांत मॉड्यूल के लिए धन्यवाद।
thadk

यह शायद आदर्श नहीं है, लेकिन मैंने आपके एसवीजी के एक परिवर्तित पीएनजी पर क्यूजीआईएस जियोफेरेन्सर प्लगइन का उपयोग किया है ताकि आपको अंक तालिका बनाने में मदद मिल सके और जांच करें कि क्या एक रैखिक आयताकार बदलाव भी प्रशंसनीय था, हालांकि मुझे यकीन नहीं है कि कैसे देखना है एसवीजी अंतरिक्ष में अंक सही ढंग से।
thadk

मैंने लाइब्रेरी की जांच की है। मैं समझता हूं कि रूपांतरण एक जियोकोर्डिनेट बाउंडिंग आयत के भीतर एसवीजी अंक के परिवर्तन के माध्यम से होता है। लेकिन यह 4 अंक बनाता है (अर्थात वामपन्थी = "0.1617178" शीर्षस्थति = "23.4999998" सही अर्थ = "15.9990339" श्रेष्ठता = "11.694295")। सभी दो एक्सएमएल टैग, सभी में 8 बिट डेटा और प्रोग्नोज़ के लिए डॉक्यूमेंटेशन ने मुझे अच्छी तरह से भ्रमित <p5:GeoItem Longitude="22.1471203091967" Latitude="44.2498454806746" X="0" Y="1" /> कर दिया है कि उन 4 जियोकॉर्डिनेट्स इस 8 आइटम डेटा सेट में कैसे अनुवादित हो सकते हैं?
जेरोम

4

नीचे वर्णित फ्रॉगज़ द्वारा एक कमांड-लाइन टूल है, जिसकी मैंने जाँच नहीं की है:

/gis//a/245085/35596


यहां आने वाले किसी भी व्यक्ति के लिए, इसका उत्तर है: "यह काफी कठिन है (कम से कम एक अनुभवी प्रोग्रामर लेकिन अनुभवहीन कार्टोग्राफ के लिए)।" यह एक से अधिक-सतही समझ की आवश्यकता है कि स्पेसियल रेफरेंस सिस्टम (SRS) कैसे काम करता है। आपको अपने या .VV को QGIS जैसी किसी चीज़ का उपयोग करने की आवश्यकता है। कैसे किया जाता है? फिर भी कोई सुराग नहीं। लेकिन जवाब है:

"आप एसवीजी को केवल जियोसन में परिवर्तित नहीं कर सकते, क्योंकि एसवीजी मौलिक भू संदर्भों को याद नहीं कर रहा है।"

यदि आप आगे बढ़ना चाहते हैं, तो खोज करना शुरू करें कि एक DXF फ़ाइल को कैसे जियोजित किया जाए।

QGIS Affine रूपांतरण के लिए मापदंडों की गणना कैसे करें?

जर्मेन कैरिलो का जवाब बहुत उपयोगी है।


1
हो सकता है कि इस जानकारी को प्रश्न में शामिल किया जाना चाहिए, अर्थात, svg फ़ाइल को जियोफेरेंस नहीं किया गया है। या शायद सवाल यह होना चाहिए: मैं QGIS जैसी किसी चीज़ का उपयोग करके एक .SVG को जियोकोड कैसे कर सकता हूं?
user55937

क्या एसवीजी प्रारूप के भीतर जियोफेरेंसिंग संभव है?
माइकल पेल

2
मुझे ठीक-ठीक पता नहीं है। यह मुझे लगता है जैसे आपके पास एसवीजी प्रारूप में एक नक्शा है जो कि पैमाने पर है, लेकिन सर में नहीं। तो ऐसा लगता है कि आपको ज्ञात निर्देशांक के साथ कुछ जमीनी नियंत्रण बिंदुओं की आवश्यकता होगी, और फिर इसे कुछ वास्तविक समन्वय प्रणाली में डेटा को जियोरेफेरेंस करने के लिए कुछ परिवर्तन लागू करें। शायद ये मदद करेंगे ?: gis.stackexchange.com/questions/33208/… gisforthought.com/…
user55937

1

कमांड लाइन उपकरण ogr2ogr ऐसा करने में सक्षम होना चाहिए। कुछ इस तरह:

ogr2ogr -f "GeoJSON" dst.json src.svg

वे दोनों प्रारूप http://www.gdal.org/ogr_formats.html समर्थित हैं । यदि आप ogr2ogr से परिचित नहीं हैं, तो इसे डाउनलोड और इंस्टॉल करने का सबसे आसान तरीका शायद https://trac.osgeo.org/osgeo4w/ है


3
यह सीधे आगे नहीं है, ओजीआर एसवीजी चालक केवल एक विशेष प्रकार के एसवीजी का समर्थन करता है जो कि "क्लाउडमैटिक वेक्टर स्ट्रीम सर्वर" और ईपीएसजी: 3857 में बनाया गया है।
एंड्रयूहवे जुने

1

आपको d3 में कोरोपलेथ के लिए छवि का उपयोग करने के लिए एसवीजी से जियोसन में बदलने की आवश्यकता नहीं है, हालांकि यह अन्य पुस्तकालयों के लिए आवश्यक हो सकता है।

एसवीजी फ़ाइल पर पथ की जानकारी (आपके नक्शे में प्रत्येक राज्य / देश / राज्य / उपखंड के लिए कम से कम एक पथ होना चाहिए) d3 में आपकी SVG छवि के लिए डेटा मैप करने के लिए पर्याप्त है।

मुझे इसे दूसरे तरीके से रखना चाहिए: यदि आप अपने मूल svg पर d3.select कर सकते हैं जो प्रति राज्य / देश / क्षेत्र में सिर्फ एक ही रास्ता लौटाएगा तो आप एक कोरूप्लेथ बनाने के लिए d3 का उपयोग कर सकते हैं। यह आमतौर पर मामला है जब आपके पास एसवीजी में एक नक्शा होता है। यह वास्तव में GeoJSON फ़ाइल का उपयोग करने की तुलना में सरल है क्योंकि आपको अंतरिक्ष स्थान, प्रक्षेपण आदि के बारे में चिंता करने की आवश्यकता नहीं है। आप लापता जानकारी जोड़ने के लिए मूल एसवीजी को भी ट्विस्ट करना चाह सकते हैं (जैसे राज्य के नाम, जिसे आप DOM आईडी के रूप में जोड़ सकते हैं या कक्षाएं) डी 3 के साथ उपयोग करने से पहले लेकिन यह आमतौर पर आवश्यक नहीं है।

दूसरी ओर, जैसा कि पहले कहा गया था, एसवीजी के पास सिर्फ पथ / रेखाओं की जानकारी है, भौगोलिक / स्थानिक जानकारी नहीं है, इसलिए यदि आप एसवीजी से जियोसन में बदलना चाहते हैं, तो आपको अपनी एसवीजी छवि में एडीडी / एमएपी जियोलोकेशन की जानकारी चाहिए। उदाहरण के लिए, आप पहले svg से JSON में परिवर्तित कर सकते हैं, फिर जियोलोकेशन जानकारी की गणना / जोड़ सकते हैं (यह उस क्षेत्र पर निर्भर करेगा जिसे आप मैप कर रहे हैं) और उसी से एक GeoJSON उत्पन्न करते हैं। जहाँ तक मुझे पता है कि आपके लिए यह काम करने के लिए कोई बॉक्स टूल नहीं है।


0

मैं उस प्रांत के लिए एसवीजी के बजाय आकार- प्रारूप का प्रयास करूंगा , जिसे आप खोज रहे हैं। चूंकि डेटा पब्लिक डोमेन के चांस हैं इसलिए आप इसे पा सकते हैं। Http://www.naturalearthdata.com/ आज़माएँ या यहाँ एक प्रश्न पूछें। फिर शेपफाइल से जियोसन या टोपोजॉन में परिवर्तित करें; MapShaper आपका मित्र है। इस बिंदु से डी 3 पहुंच में होना चाहिए (उत्कृष्ट ट्यूटोरियल चलो एक नक्शा बनाएं )

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.