GeoJSON भी भारी - क्या करना है?


20

मैं वेब उपयोगकर्ताओं को क्षेत्र चुनने के लिए अनुमति देने के लिए पत्रक का उपयोग कर रहा हूं । वैध क्षेत्र अमेरिकी राज्य, कनाडा के भविष्य और दुनिया के देश (अमेरिका और कनाडा को छोड़कर) हैं। मैंने Qgis का उपयोग करते हुए खुद एक आकृति का निर्माण किया और इसे जियोजोन के रूप में सहेजा। मैंने जितना हो सके ज्यामितीयों को सरल बनाया।

परिणामी शेपफाइल 400kb है, लेकिन जियोजेन्स मेगाबाइट पर है। यह मेरे से बड़ा है। मुझे इस जानकारी को स्थानांतरित करने में शामिल नेटवर्क ओवरहेड को कम करने की आवश्यकता है।

ऐसा करने का सही तरीका क्या है? मैं जिन विकल्पों की कल्पना कर सकता हूं वे हैं:

  1. जियोज़ोन फ़ाइल परोसें, ग्राहक को अनपैक करें।
  2. जियोजोन के लिए क्लाइंट पर शेपफाइल पार्स करें
  3. मेरी अपनी टाइलें आकृति आकृति से उत्पन्न करें और उन परोसें

अगर कोई मुझे बता सकता है कि कौन सा विकल्प सबसे अच्छा है (या उपरोक्त में से कोई नहीं) तो मैं इसकी सराहना करूंगा!


मैं ध्यान देता हूं कि आपने कहा था कि आपने ज्यामिति को सरल बनाने की कोशिश की है, लेकिन क्या आपने जीआईएस सरलीकरण एल्गोरिथ्म का उपयोग करने और परिणामों की जांच करने की कोशिश की है? यह देखने में भी मदद कर सकता है कि JSON का कौन सा हिस्सा सबसे अधिक जगह ले रहा है।
ब्रैडहार्ड्स

1
सुनिश्चित करें कि GeoJSON सुंदर-मुद्रित नहीं है, सभी अनावश्यक सफेद स्थान को अलग करने से फ़ाइल को छोटा करने में मदद मिलेगी - जरूरी नहीं कि एक बड़ी राशि से लेकिन यह सब मदद करता है!
चेंडरसन

जवाबों:


14

Mapshaper.org एक आसान मुफ्त ऑनलाइन टूल है जो आपको जियोजोन फ़ाइल अपलोड करने की अनुमति देता है, इसे एक मानचित्र के रूप में प्रदर्शित करता है, फिर तीन सरलीकरण में से एक का चयन करें जो आप स्लाइडर के साथ ताकत को समायोजित कर सकते हैं।

यह मैप को अपडेट करता है और लाल रंग के किसी भी स्थान पर हाइलाइट करता है, जहां दो क्षेत्रों के बीच ओवरलैप जैसी अखंडता का नुकसान होता है। एक 'फिक्स' बटन है जो आमतौर पर (लेकिन हमेशा नहीं) ऐसी समस्याओं को ठीक करता है।

आप सरलीकरण का एक स्तर पा सकते हैं जो स्वीकार्य है और नव सरलीकृत जियोजोन फ़ाइल निर्यात करता है।

जाहिर है यह इस बात पर निर्भर करता है कि आपको किस स्तर की आवश्यकता है, लेकिन परिणाम प्रभावशाली हो सकते हैं। उदाहरण के लिए, यहां 40mb जियोजोन फ़ाइल से स्कॉटलैंड का नक्शा:

यहाँ छवि विवरण दर्ज करें

99% एप्लिकेशन इसे 441 केबी फ़ाइल तक कम कर देता है, जिसमें कोई ओवरलैप नहीं होता है और इस ज़ूम स्तर पर अदृश्य होने वाले विवरण की हानि होती है:

यहाँ छवि विवरण दर्ज करें

99.95% एप्लिकेशन (नीचे 29kb) दिखाता है कि किस तरह का पथ सरलीकरण लागू किया जा रहा है (और अभी भी ओवरलैप से बचने के लिए प्रबंधन करता है, और राष्ट्रीय स्तर के क्लोरोप्लेथ जैसे उपयोगों के लिए पूरी तरह उपयुक्त है):

यहाँ छवि विवरण दर्ज करें


मैं हर समय इस उपकरण का उपयोग करता हूं। यह बेहतरीन है!
माइक फुरलेंडर

1
आप एक जीवन रक्षक है!!
खिजर

13

किसी भी अधिक कठिन रास्तों पर जाने से पहले, ज्यामिति को कम करने का सबसे सरल विकल्प है। आपके स्रोत डेटासेट क्या हैं? आपने उन्हें कैसे सरल बनाया? इसने जियोजोन फ़ाइल का आकार कितना कम कर दिया?

यदि आप आश्वस्त हैं कि आपने उपरोक्त सभी कार्य किए हैं, तो आपके विकल्पों में से सबसे कम लटका हुआ फल है

  1. जियोज़ोन फ़ाइल परोसें, ग्राहक को अनपैक करें।

सभी आधुनिक ब्राउज़र स्वचालित रूप से gzipped डेटा की अनपैकिंग करते हैं, इसलिए यह आपके वेब सर्वर को भेजने से पहले डेटा सेट करने का मामला है। यह आम तौर पर एक अपेक्षाकृत सीधा आगे होता है, जिसमें अपाचे , आईआईएस या नग्नेक्स के लिए बहुत अधिक सामग्री होती है

मेरा टिप यह होगा कि पहले यह प्रयास करें, परीक्षण करें, फिर यदि विलंबता / प्रतिक्रिया / डेटा का आकार स्वीकार्य नहीं है, तो अन्य विकल्पों पर जाएँ। मैं समय से पहले अनुकूलन करने की कोशिश से भी सावधान रहूंगा, मैं यह निर्धारित करना चाहूंगा कि आपको डेटा का आकार कम करने की आवश्यकता क्यों है, और एक बार ऐसा करने के लिए आपके पास कठिन कारण (और संख्याएं) हैं, फिर पुनरावृत्त रूप से परिवर्तनों को लागू करने और देखने के लिए पुन: परीक्षण कर रहे हैं। आपको लाभ मिल रहा है।


6

मुझे आश्चर्य है कि यदि आप इस उत्तर में पाए गए संपीड़न का उपयोग कर सकते हैं जो जियोजोन को टॉपोजन के साथ संपीड़ित करने की बात करता है ।

मुझे नहीं पता कि अगर जिरह अभी भी जियोसन पढ़ पाएगी - तो कोशिश करने के लिए कुछ =)

Topojson के बारे में अधिक जानकारी: https://github.com/mbostock/topojson/


CAT.GeoJSON चाप डेटा को पार्स नहीं करता है, इसलिए यह दृष्टिकोण काम नहीं करेगा
smcphill

USC मूल रूप से नहीं कर सकता है, लेकिन आप इसे करने के लिए क्लाइंट की ओर से टॉपोजोन का उपयोग कर सकते हैं, पत्रक पर टॉपोजोन का उदाहरण , हालांकि यह उदाहरण यह रेंडर करने के लिए d3 का उपयोग करने के लिए होता है।
केल्विन

1
मेरे पास 27mb की जियोसन फाइल थी। Maphaper.org पर गए और सरलीकरण (1.0%) और टॉपोजॉन निर्यात के बाद यह 122kb हो गया। उसके बाद अपने ऐप में github.com/shramov/leaflet-plugins/blob/master/layer/vector/… से topoJson USC कोड जोड़ा और निम्नलिखित कार्य किया: नया L.TOPOJSON ("myExported.topojson") toGeoJson ()।
स्टैकउंडर

3

मैं आपकी ज्यामिति को आसान बनाने के ऊपर @Kelso से सहमत हूं।

यदि आपके पास अपने सर्वर तक पहुँच नहीं है, तो आसानी से gzip के साथ डेटा को डिफ्लेक्ट करने के लिए आप अपने जियोजन्स को बाइनरी डेटा में क्रमबद्ध करने के लिए MessagePack लाइब्रेरी पर एक नज़र डाल सकते हैं (मेरा मानना ​​है कि यह BSON युक्ति का कार्यान्वयन है जो MongoDB के लिए चीजों द्वारा उपयोग की जाती है स्टोर डेटा, लेकिन मैं गलत हो सकता है)पायथन और जावास्क्रिप्ट (दूसरों के बीच) में पुस्तकालय हैं जिनका उपयोग आप डेटा को क्रमबद्ध / डिसेरिज़ल करने के लिए कर सकते हैं।


2
MessagePack BSON से संबंधित नहीं है (यह के अनुसार कई मामलों में वास्तव में बेहतर है stackoverflow.com/questions/6355497/... । Messagepack और विशेष रूप से GeoJSON के बारे में अधिक दिलचस्प जानकारी में पाया जा सकता nelsonslog.wordpress.com/2012/06/22/checking -आउट-मैसपैक
केल्सो

उस @Kelso के लिए धन्यवाद - जवाब अद्यतन। और अच्छा लेख भी!
om_henners

1

मैं सिर्फ अपने खुद के प्रक्रियात्मक सरणी को बहुभुज वस्तुओं का निर्माण करने का सुझाव दूंगा। मैं सहमत हूं कि जियोसन बहुत बड़ा है। ऑब्जेक्ट कुंजी नाम बहुत वर्णनात्मक हैं, लेकिन शायद अनावश्यक रूप से लंबे समय तक भी। मैं इस तरह की बात करता हूं:

objects = [];
objects.push( new L.polygon([[1,1],[1,2],[3,4]],options );
objects.push( new L.polygon([[4,7],[8,27],[35,66]],options );
objects.push( new L.polygon([[3,5],[56,24],[13,49]],options );
objects.push( new L.polygon([[13,7],[7,68],[23,9]],options );
layerGroup = L.layerGroup(objects).addTo(map);

यह सीधा है। यह इस तरह GeoJSON की तुलना में बहुत हल्का है:

{ "type": "FeatureCollection",
  "features": [
    { "type": "Feature",
      "geometry": {"type": "Polygon",
      "coordinates": [1,1],[1,2],[3,4]},
      },

    //etc...

और हर एक बहुभुज के लिए दोहराएं ... उह ... रास्ता बहुत फूला हुआ इमो। अपने JS में बहुत सारे बाइट्स जोड़ता है। जैसा कि मैंने कहा, प्रमुख नाम अच्छे और वर्णनात्मक हैं ... लेकिन वे लंबे हैं और आपके जेएस में बहुत सारे अनावश्यक बेज़ जोड़ते हैं।

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