GISCloud जैसे प्रदर्शन प्रदान करने के साथ वेक्टर बहुभुज बनाना?


59

मैं एक ऐसे ठोस समाधान की तलाश में हूं, जो मुझे एक वेब मैप बनाने की अनुमति दे और वेक्टर पॉलीगॉन को ओवरले के बिना हमेशा के लिए इस तरह के डेटा को लोड करने के लिए ले जाए , जिससे मुझे प्रत्येक बहुभुज को एक हॉवर ईवेंट पर एक अलग रंग प्रदर्शित करने की अनुमति मिले।

जहां तक ​​मुझे पता है कि कैनवास, एसवीजी, फ्लैश के माध्यम से इसे प्राप्त करने के लिए 3 विशिष्ट विकल्प हैं।

फ्लैश ऐसा लगता है कि यह सबसे अच्छा समाधान होगा यदि यह ऐप्पल आईफ़ोन / आईपैड पर काम करेगा क्योंकि यह सबसे तेज़ प्रतिपादन और स्वच्छ प्रदर्शन प्रदान करता है। कैनवस दूसरा सबसे अच्छा विकल्प लगता है, लेकिन बहुत लंबा लगता है अगर आपके पास सैकड़ों पॉलीगोन एक मानचित्र पर प्रदर्शित हो रहे हैं जबकि एसवीजी को प्रस्तुत करने में अधिक समय लगता है।

मैंने इस समस्या का समाधान खोजने में लगभग उम्मीद खो दी थी, लेकिन आज मैं GISCloud http://www.giscloud.com नामक एक कंपनी में आया (वर्तमान में फ्री साइनअप के साथ बीटा में)।

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

इस अद्भुत डेमो को देखकर अपने लिए एक नज़र डालें: http://www.giscloud.com/map/284/africa

सुनिश्चित करें कि आप पृष्ठ पर किसी भी बहुभुज पर मंडराते हैं और यह देखने के लिए जूम नियंत्रण का परीक्षण करते हैं कि ये बहुभुज वास्तव में वैक्टर हैं।

फायरबग के साथ अनुरोधों को देखकर मैंने जो ध्यान दिया है वह यह है कि मानचित्र विशिष्ट जोंस फाइलों का अनुरोध कर रहा है। ऐसा लगता है कि जूम स्तर / क्षेत्र के आधार पर कई जसन फाइलें मांगी जा रही हैं।


मुझे यहाँ यह भी उल्लेख करना चाहिए कि एक बार जब giscloud पेज पर डेटा लोड करता है तो एक वेक्टर पर होवर करता है तुरंत एक नया अनुरोध बनाए बिना रंग बदलता है।

उदाहरण:

मैं मान रहा हूं कि url संरचना मानक टाइलिंग सेवा तर्क का अनुसरण करती है (उदाहरण के लिए 3 से आखिरी फ़ोल्डर जूम स्तर ...)।

किसी भी मामले में मैंने इन जोंस फ़ाइलों के वास्तविक डेटा का विश्लेषण किया है और ऐसा लगता है कि वे जिस तर्क का उपयोग कर रहे हैं, वह कुछ प्रकार के तर्क का अनुसरण करता है जिसके द्वारा वे इन डेटा मानों के आधार पर अपने वैक्टर का निर्माण करते हैं:

  • चौड़ाई / ऊँचाई: वे प्रत्येक json अनुरोध में दिए जा रहे डेटा की चौड़ाई और ऊँचाई को परिभाषित करते हैं
  • पिक्सेल: यहाँ वे पिक्सेल मानों को परिभाषित करते हैं जो मैं किसी तरह मान रहा हूँ कि सामान्यीकृत बिंदु स्तरों के लिए कुछ सामान्य x / y पिक्सेल निर्देशांक से संबंधित हैं? मुझे लगता है कि वे किसी तरह से स्वचालित रूप से ज़ूम स्तर के आधार पर क्षेत्र को सरल बनाने का एक तरीका है। मैं उनके द्वारा पिक्सल के निर्देशांक का उपयोग करके यह मान रहा हूं कि मैं अनुमान लगा रहा हूं कि वे नाटकीय रूप से उस डेटा के आकार को कम कर रहे हैं जिसे अक्षांश / लंबे डेटा की तुलना में लोड करने की आवश्यकता है।
  • शैलियाँ: यहाँ वे दो RGB css मानों को परिभाषित करते हैं। बहुभुज फ़ाइल रंग का प्रतिनिधित्व "एफ" और बहुभुज सीमा रंग का प्रतिनिधित्व "एस"।
  • geom: यहाँ मैं अनुमान लगा रहा हूँ कि वे किसी तरह विशेष रूप से परिभाषित कर रहे हैं टाइल के भीतर प्रत्येक बहुभुज को परिभाषित किया जा रहा है जहाँ इस तरह के डेटा को मैप कंटेनर विंडो के आधार पर परिभाषित किया जा रहा है। Whats यह भी दिलचस्प है कि प्रत्येक प्रविष्टि का एक "S" मान है, जिसे मैं मान रहा हूं कि इसे वैकल्पिक विशेषता या सुविधा लिंक मान के रूप में उपयोग किया जाता है और यहां प्रत्येक प्रविष्टि के अंत में एक क्षेत्र है जो एक विशिष्ट प्रति वेक्टर आईडी के साथ परिभाषित करता है लेयर आईडी, जिसका मैं अनुमान लगा रहा हूं, का उपयोग किसी भी तरह से प्रत्येक जॉन्स टाइल अनुरोध से डेटा में शामिल होने के लिए किया जाता है।

मैं यह भी मान रहा हूं कि उन्होंने किसी तरह से डेटा को स्वचालित रूप से निर्धारित करने और विभाजित करने का एक तरीका निकाला है, जिसे डेटा के आकार के आधार पर प्रत्येक टाइल के लिए लोड करने की आवश्यकता होती है, जिसे अनुरोधित टाइल के लिए लोड करने की आवश्यकता होती है।

यहाँ इन अनुरोधों में से एक को निकाला गया है:

{"width":256,"height":256,"tile":
{"pixels":
[0,6461,-1,0,5,148,0,509,-1,10715,-1,1,-1,251,-1,1,-1,1,-1,251,-2,3,-1,255,-1,249,-2,5,-2,247,-1,509,-3,251,-1,2,-2,253,-2,252,-2,254,-1,255,-1,254,-1,255,-1,1276,-2,13,-1,233,-1,2,-1,253,-1,1,-1,255,-1,247,-1,1306,-1,1533,-1,1269,-1,1276,-1,2303,-1]},

"styles":
[{"f":"rgb(99,230,101)","s":"rgb(5,148,0)","lw":"0"}],

"geom":
[
{"s":0,"p":[4,143,5,144,3,146,1,146,2,143,4,143],"c":"layer1156_5098"},
{"s":0,"p":[-2,143,0,140,2,141,2,144,1,146,-2,144,-2,143],"c":"layer1156_5067"},
{"s":0,"p":[7,143,5,144,4,143,2,143,2,141,5,138,6,139,5,141,7,143],"c":"layer1156_5051"},
{"s":0,"p":[10,141,11,137,12,137,14,137,12,142,9,143,9,142,10,141],"c":"layer1156_5041"},
{"s":0,"p":[1,136,0,140,-2,143,-2,136,1,136],"c":"layer1156_5038"},
{"s":0,"p":[8,143,5,141,5,137,8,136,10,137,10,141,8,143],"c":"layer1156_5033"},
{"s":0,"p":[5,137,2,141,0,140,1,136,1,136,2,135,3,136,5,137],"c":"layer1156_5028"},
{"s":0,"p":[10,134,12,136,11,138,8,135,10,134],"c":"layer1156_5020"},
{"s":0,"p":[-2,133,0,136,-2,136,-2,133],"c":"layer1156_5005"},
{...}
...
]
}

पोस्टगिस का उपयोग करके हम उसी (या समान) प्रकार की गति को कैसे दोहरा सकते हैं (जो मुझे लगता है कि वे भी उपयोग कर रहे हैं)?


आह! JSON फ़ाइल को न देखें, अन्य प्रतीत होने वाली महत्वहीन छवियां देखें जो चारों ओर से गुजरती हैं :) नीचे मेरा उत्तर देखें।
रागी यासर बुरहुम

"3 विशिष्ट विकल्प हैं" ... तो सिल्वरलाइट, कटा हुआ जिगर क्या है ?
किर्क कुएकेन्डल

सिल्वरलाइट को काम करने के लिए इसके प्लगइन की आवश्यकता होती है और मुझे नहीं लगता कि यह वास्तव में समाधान की तुलना में अधिक तेज़ है जैसे कि गिस्कलाउड उपयोग करता है लेकिन मैंने कोई प्रत्यक्ष तुलना नहीं की है।
NetConstructor.com 10

2
यह प्रश्न बहुत सारी दिलचस्प बातों को सामने लाता है, जो सामान्य प्रश्नोत्तर प्रारूप में फिट नहीं होते हैं। आइए उनके बारे में एक वेब मैप वर्ल्ड में
मैट

@RagiYaserBurhum इस बात का एक अच्छा विवरण है कि यह यात्रा आइसोक्रोन
djq

जवाबों:


56

मैंने इस तकनीक का इस्तेमाल अतीत में देखा है। यह मेरे लिए ज़ैन मेमन (ट्रुलिया से) द्वारा समझाया गया था, जिन्होंने मिशाल मिगुर्सकी टाइलस्टैच का निर्माण करते समय कुछ इनपुट देने में मदद की थी। ज़ैन ने अपने ट्रुलिया डेमो की व्याख्या करते हुए इसे खत्म कर दिया जो कुछ समय पहले हमारे पुराने एसएफ जियोमेटअप बैठकों में इस तकनीक का उपयोग करता है । वास्तव में, यदि आप अगले सप्ताह एसएफ में हैं (यह एक प्लग में मेरा लंगड़ा प्रयास है, तो वह इस पर स्पर्श करेगा , इसलिए बेझिझक दिखें :)

ठीक है, अब स्पष्टीकरण के लिए।

सबसे पहले, आप ऊपर दिए गए json फ़ाइलों को देखते समय गलत जगह पर थोड़ा देख रहे हैं।

मुझे समझाने दो (जितना छोटा हो सकता है), क्यों।

टाइल्स को नियमित रूप से प्रदान की गई टाइलों के रूप में पारित किया जा रहा है, कोई बड़ी बात नहीं है, हम जानते हैं कि यह कैसे करना है और इसलिए मुझे यह समझाने की आवश्यकता नहीं है।

यदि आप फायरबग में इसका निरीक्षण करते हैं, तो आप देखेंगे कि आपको छवियों का एक पूरा गुच्छा भी मिला है, जो इस तरह रिक्त हैं ।

यह खाली क्यों है? यह नहीं। पिक्सेल में डेटा होता है - सिर्फ पारंपरिक दृश्यमान छवि डेटा नहीं। वे स्वयं पिक्सेल में एन्कोड किए गए डेटा को पारित करने के लिए एक बहुत ही चतुर तकनीक का उपयोग कर रहे हैं।

पिछले एक दशक में क्या चल रहा है, यह है कि लोग भंडारण दक्षता की कीमत पर प्रारूपों की पठनीयता और पोर्टेबिलिटी डेटा को बंद कर रहे हैं।

Xml नमूना डेटा का यह उदाहरण लें:

<data>

  <feature>
    <point>
      <x> -32.1231 </x>
      <y> 10.31243 </y>
    </point>
    <type> 
      sold
    </type>
   </feature>

  <feature>
    <point>
      <x> -33.1231 </x>
      <y> 11.31243 </y>
    </point>
    <type> 
      available
    </type>
   </feature>

</data>

ठीक है, इसे स्थानांतरित करने के लिए कितने काटने? बशर्ते कि हम utf8 हैं (इस सामग्री के साथ काम करते समय प्रति चरित्र 1 बाइट)। खैर, हमारे पास लगभग 176 वर्ण (टैब या रिक्त स्थान की गिनती के बिना) है जो इस 176 बाइट्स को बनाता है (यह विभिन्न कारणों से आशावादी है कि मैं सादगी के लिए छोड़ दूँगा)। माइंड यू, यह 2 बिंदुओं के लिए है!

फिर भी, कुछ स्मार्ट गधा जो यह नहीं समझ पाता कि वह किस बारे में बात कर रहा है, कहीं न कहीं यह दावा करेगा कि "json आपको उच्च संपीड़न देता है"।

ठीक है, चलो एक ही xml बकवास के रूप में json डाल:

{ "data": [
            "feature" : { "x" : -32.1231, "y" : 10.31243 , "type": "sold" },
            "feature" : { "x" : -33.1231, "y" :11.31243, "type": "avail" },
          ]
}

यहाँ कितने बाइट्स? कहो ~ 115 वर्ण। मैंने भी थोड़ा धोखा दिया और इसे छोटा कर दिया।

यह कहें कि मेरा क्षेत्र 256x256 पिक्सेल को कवर करता है और मैं ज़ूम स्तर पर इतना ऊँचा है कि प्रत्येक फ़ीचर एक पिक्सेल के रूप में प्रस्तुत होता है और मेरे पास इतनी सुविधाएँ हैं, कि यह पूर्ण है। मुझे 65,536 सुविधाओं को दिखाने के लिए कितने डेटा की आवश्यकता है?

54 अक्षर (या utf बाइट्स - और मैं कुछ अन्य चीजों को भी अनदेखा कर रहा हूँ) प्रति "सुविधा" प्रविष्टि गुणा 65,536 = 3,538,944 या लगभग 3.3MB

मुझे लगता है कि आपको तस्वीर मिल गई होगी।

लेकिन यह है कि हम डेटा को एक सेवा उन्मुख वास्तुकला में कैसे परिवहन करते हैं। पठनीय फूला हुआ बकवास।

क्या होगा यदि मैं एक द्विआधारी योजना में सब कुछ परिवहन करना चाहता था जो मैंने खुद का आविष्कार किया था? यह कहें कि इसके बजाय, मैंने उस जानकारी को सिंगल बैंड इमेज (यानी ब्लैक एंड व्हाइट) में एनकोड किया। और मैंने फैसला किया कि 0 का मतलब बेचा जाता है, और 1 का मतलब उपलब्ध है, और 2 का मतलब है मुझे नहीं पता। हेक, 1 बाइट में, मेरे पास 256 विकल्प हैं जिनका मैं उपयोग कर सकता हूं - और मैं केवल इस उदाहरण के लिए उनमें से 2 या तीन का उपयोग कर रहा हूं।

भंडारण लागत क्या है? 256x256x 1 (केवल एक बैंड)। 65,536 बाइट्स या 0.06MB। और यह अन्य संपीड़न तकनीकों पर भी ध्यान नहीं देता है जो मुझे छवि संपीड़न में कई दशकों के शोध से मुफ्त में मिलता है।

इस बिंदु पर, आप अपने आप से पूछ रहे होंगे कि लोग सिर्फ़ बाइनरी प्रारूप में एन्कोड किए गए डेटा को जस की तस करने के बजाय क्यों नहीं भेजते हैं? अच्छी तरह से पहले, पता चला है, जावास्क्रिप्ट बाइनरी डेटा के परिवहन के लिए बड़ा समय बेकार करता है, यही कारण है कि लोगों ने ऐतिहासिक रूप से ऐसा नहीं किया है।

जब HTML5 की नई सुविधाएँ सामने आईं, तो कुछ लोगों द्वारा इसके आस-पास एक भयानक कार्य का उपयोग किया गया , विशेष रूप से कैनवास । तो इस भयानक काम के आसपास क्या है? पता चलता है, आप एक छवि के रूप में दिखाई देने वाले एन्कोडेड तार पर डेटा भेज सकते हैं, फिर आप उस छवि को एचटीएमएल 5 कैनवस में बदल सकते हैं, जो आपको सीधे पिक्सल में हेरफेर करने की अनुमति देता है ! अब आपके पास उस डेटा को हथियाने का एक तरीका है, इसे क्लाइंट की तरफ से डीकोड करें और क्लाइंट में json ऑब्जेक्ट्स जेनरेट करें।

एक पल रुक कर इस बारे में सोचें।

आपके पास अत्यधिक संकुचित प्रारूप में अर्थपूर्ण भू-संदर्भित डेटा की एक बड़ी मात्रा को एन्कोडिंग करने का एक तरीका है, जो वेब अनुप्रयोगों में पारंपरिक रूप से किए गए किसी भी चीज़ से छोटे परिमाण के आदेश हैं, और उन्हें जावास्क्रिप्ट में हेरफेर करते हैं।

HTML कैनवास को आकर्षित करने के लिए उपयोग करने की आवश्यकता नहीं है, यह केवल एक द्विआधारी डिकोडिंग तंत्र के रूप में उपयोग किया जाता है!

यही उन सभी छवियों के बारे में है जो आप फायरबग में देखते हैं। डेटा के साथ एक छवि, जो डाउनलोड की गई हर एक टाइल के लिए एन्कोडेड है। वे सुपर छोटे हैं, लेकिन उनके पास सार्थक डेटा है।

तो आप इनको सर्वर साइड में कैसे एनकोड करेंगे? वैसे आपको सर्वर साइड में डेटा को सामान्य करने की आवश्यकता है, और प्रत्येक ज़ूम स्तर के लिए एक सार्थक टाइल बनाएं जिसमें डेटा एन्कोडेड है। वर्तमान में, ऐसा करने के लिए, आपको अपना स्वयं का रोल करना होगा - आउट ऑफ द बॉक्स ओपन सोर्स सॉल्यूशन मौजूद नहीं है, लेकिन आपके पास यह उपलब्ध करने के लिए सभी उपकरण हैं। PostGIS GEOS के माध्यम से सामान्यीकरण करेगा, टाइल कैश का उपयोग कैश करने के लिए किया जा सकता है और आपको टाइल्स की पीढ़ी को ट्रिगर करने में मदद कर सकता है। क्लाइंट साइड पर, आपको विशेष "नकली टाइल" पर पास करने के लिए एचटीएमएल 5 कैनवस का उपयोग करना होगा और फिर आप ओपन क्लाइंट का उपयोग माउस-ओवर इफेक्ट के साथ वैक्टर का प्रतिनिधित्व करने वाले वास्तविक क्लाइंट-साइड जावास्क्रिप्ट ऑब्जेक्ट बनाने के लिए कर सकते हैं।

यदि आपको अधिक डेटा एनकोड करने की आवश्यकता है, तो याद रखें कि आप हमेशा पिक्सेल प्रति RGBA चित्र उत्पन्न कर सकते हैं (जो आपको प्रति पिक्सेल 4 बाइट्स या 4,294,967,296 संख्याएँ आप प्रति पिक्सेल का प्रतिनिधित्व कर सकते हैं )। मैं उपयोग करने के कई तरीकों के बारे में सोच सकता हूँ :)

अद्यतन : नीचे QGIS प्रश्न का उत्तर दे रहा है।

क्यूजीआईएस अन्य डेस्कटॉप जीआईएस की तरह , ज़ूम स्तर का एक निश्चित सेट नहीं है। उनके पास किसी भी पैमाने पर ज़ूम करने का लचीलापन है और बस प्रस्तुत करना है। क्या वे WMS या टाइल्स आधारित स्रोतों से डेटा दिखा सकते हैं? सुनिश्चित करें कि वे कर सकते हैं, लेकिन अधिकांश समय वे वास्तव में इसके बारे में गूंगे हैं: एक अलग सीमा तक ज़ूम करें, बाउंडिंग बॉक्स की गणना करें, आवश्यक टाइलों की गणना करें, उन्हें पकड़ो, उन्हें दिखाएं। ज्यादातर समय वे अन्य चीजों को नजरअंदाज करते हैं, जैसे कि http हैडर कैश जो इसे बना देगा ताकि उन्हें फिर से भरना न पड़े। कभी-कभी वे एक सरल कैश तंत्र को लागू करते हैं (टाइल स्टोर करें, यदि आप इसके लिए पूछते हैं, तो टाइल की जांच करें, इसके लिए पूछें नहीं)। लेकिन इतना पर्याप्त नहीं है।

इस तकनीक के साथ टाइल और वैक्टर को हर ज़ूम स्तर पर फिर से भरने की आवश्यकता होती है । क्यों? क्योंकि ज़ूम स्तर को समायोजित करने के लिए वैक्टर को सामान्यीकृत किया गया है।

जहाँ तक एक HTML5 कैनवास पर टाइल्स लगाने की पूरी ट्रिक है तो आप बफ़र्स तक पहुँच सकते हैं, यह पूरी बात ज़रूरी नहीं है। क्यूजीआईएस आपको पायथन और सी ++ में कोड लिखने की अनुमति देता है, दोनों भाषाओं में बाइनरी बफ़र्स को संभालने के लिए उत्कृष्ट समर्थन है, इसलिए इस मंच के चारों ओर यह काम वास्तव में अप्रासंगिक है।

* अद्यतन 2 **:

पहली जगह में सामान्यीकृत वेक्टर टाइल बनाने के बारे में एक सवाल था (छवियों में परिणामों को क्रमबद्ध करने से पहले बच्चे का चरण 1)। शायद मैंने पर्याप्त स्पष्ट नहीं किया। टीलस्टैच आपको हर ज़ूम स्तर पर आपके डेटा की प्रभावी "वेक्टर टाइलें" बनाने की अनुमति देगा (इसमें एक विकल्प भी है जो आपको टाइल सीमा पार करने पर डेटा को क्लिप करने या न करने की अनुमति देता है)। यह विभिन्न ज़ूम स्तरों पर वैक्टर को टाइलों में अलग करने का ध्यान रखता है। मैं "नॉट क्लिप" विकल्प चुनूंगा (लेकिन यह एक मनमाना टाइल उठाएगा जहां यह अधिक क्षेत्र को कवर करता है)। फिर आप बड़ी संख्या के साथ GEOS के सामान्य विकल्प के माध्यम से हर वेक्टर को खिला सकते हैं, वास्तव में, आप इसे इतना बड़ा चाहते हैं कि पॉलीलाइन और पॉलीगॉन स्वयं पर ढह जाएं, क्योंकि यदि वे ऐसा करते हैं, तो आप उन्हें उस स्तर के लिए ज़ूम स्तर से हटा सकते हैं। अप्रासंगिक। तिलेस्टचे आपको आसान पाइथोनिक डेटा प्रदाताओं को भी लिखने की अनुमति देता है जहां आप इस तर्क को रख सकते हैं। उस स्तर पर, आप उन्हें जोंस फाइलों के रूप में परोसना पसंद कर सकते हैं (जैसे वे कुछ अफ्रीकी नक्शे के नमूनों के साथ करते हैं) या pngs में अनुक्रमित ज्यामितीय के रूप में, जैसे वे अन्य नमूनों (या ट्रुलिया एक) में करते हैं, मैंने ऊपर उठाया है।


2
अब तक, इस तकनीक का उपयोग करते हुए मैंने देखा है कि हर एक व्यक्ति ने कोड को पोस्ट नहीं किया है। IMHO, क्योंकि महत्वपूर्ण हिस्सा वास्तव में सर्वर पर हो रहा है और इसके लिए कोई "मानक" नहीं है और क्योंकि प्रत्येक पिक्सेल का मतलब क्या है (1 = बेचा, 2 = लाभ, आदि) चुनना आपके वर्तमान मानचित्र के लिए इतना विशिष्ट है कि यह कोड सबसे अधिक संभावना नहीं "सामान्य"।
बजे रागी यासर बुरहम

1
जहां तक ​​QGIS का जवाब है, जवाब थोड़ा और शामिल है, मैं काम करने के तरीके पर अपने जवाब को अपडेट करूंगा। बाहर बेकार नहीं है, मैं एक ट्रेन लेता हूं, इसलिए मेरे लिए GIS.SE का जवाब देते समय कोई ड्राइविंग नहीं करता है :)
रागी यासर बुरहुम

12
+1 इस बहुत पठनीय प्रतिक्रिया को संपीड़ित न करने के लिए धन्यवाद :)
किर्क कुएकेन्डल

1
आप यह सुनिश्चित करने के लिए सिल्वरलाइट या फ्लैश के साथ कर सकते हैं। फिर भी, याद रखें कि महत्वपूर्ण हिस्सा सर्वर पर हो रहा है तो Flash या Silverlight के नहीं होगा कि एक मदद की ज्यादा।
रागी यासर बुरहुम

2
चार साल बाद कई चीजें हैं जो विकसित हुई हैं और इस टेक्स्टबॉक्स में इसे समझाने के लिए केवल ~ 500 वर्ण हैं। सारांश यह है कि वेबजीएल परिपक्व है और क्रमबद्ध तकनीकों से परे, लोग निश्चित-सटीक डेल्टा-एन्कोडिंग (जैसे हम 60 के दशक में इस्तेमाल करते थे) को टोपोज़न जैसे प्रारूपों में लागू कर रहे हैं। यह अच्छी बात है। मैं OGC के मानकों में इनमें से कुछ चीजों को देखना पसंद करूंगा ... हालांकि, हाल ही में OGC के आसपास की राजनीति बहुत जटिल रही है। यहाँ दो साल पहले से मेरी भावनाएँ हैं: blog.burhum.com/post/50036141569/the-ogc-is-stuck-in-1999
Ragi Yaser Burhum

23

हाल ही की मेलिंग सूची पोस्ट पर डेवलपर डिनो रविकेन से प्रत्यक्ष :

यह एक बड़ा रहस्य नहीं है कि हमने यह कैसे किया इसलिए मुझे आपके साथ साझा करने में खुशी होगी..किसी दो चीजों में है:

  1. एक टाइल से सभी वैक्टर जो छोटे से दिखने वाले हैं अर्थात उनका क्षेत्र जब पिक्सेल में गणना की जाती है तो 1px से कम होती है। इसलिए हम इस तरह के एक वेक्टर को छोड़ देते हैं और इसके बजाय एक पिक्सेल रखते हैं इसलिए हमारे जसन टाइल में "पिक्सल" संपत्ति है

  2. वैक्टर जो वास्तव में दिखाई देंगे, सामान्यीकृत किए जा रहे हैं और फिर पिक्सेल में उनके निर्देशांक के साथ एक टाइल में लिखे गए हैं

क्लाइंट भाग पर हम कैनवास पर उन स्थिर पिक्सेल और दृश्यमान वैक्टर को प्रस्तुत करते हैं। वैक्टर के ऊपर हमने हॉवरिंग यानी अन्तरक्रियाशीलता को प्राप्त करने के लिए माउस इवेंट हैंडलिंग को लागू किया। और बस।

हमारा बैकएंड मैप इंजन सभी हैवी-लिफ्टिंग करता है क्योंकि हम किसी भी कोचिंग का उपयोग नहीं करते हैं और सभी टाइल्स फ्लाई पर उत्पन्न हो रहे हैं। यह हमारे लिए बहुत महत्वपूर्ण है कि हमारा नक्शा जल्दी से ताज़ा हो सके।

तो ऐसा लगता है कि ग्राहक पक्ष आसान हिस्सा है। यह प्रभावशाली है कि डेटा बिना किसी कैशिंग के प्रदान किया गया है।

वह एक होस्टिंग सेवा का भी उल्लेख करता है जो आपकी रुचि हो सकती है। आप एक तैयार की गई सेवा का उपयोग करने की लागत के साथ इसे फिर से बनाने की कोशिश करने की लागत का वजन करना चाह सकते हैं।


जो हिस्सा मुझे यहां भ्रमित करता है वह यह है कि ऐसा लगता है जैसे अनुरोध पोस्टगिस को भेजे जा रहे हैं और इसके बजाय मानक जियोजोन प्राप्त करने के बजाय लैट / लॉन्ग वैल्यू के साथ वे लग रहे हैं (वास्तविक समय में) लेट / लॉन्ग वैल्यू को xyz निर्देशांक में परिवर्तित करना और उन्हें थूकना। ज़ूम स्तर और मानचित्र टाइल की आवश्यकता के आधार पर। आप लोगों को क्या लगता है इन गति प्राप्त करने के लिए इस्तेमाल किया जा रहा है?
NetConstructor.com

@netconstructor शायद ज्यामिति पहले से ही xyz ज्यामिति में संग्रहीत है, इसलिए इसे बदलने की कोई आवश्यकता नहीं है?
geographika

रिश्तेदार xyz निर्देशांक अपेक्षाकृत कम बैंडविड्थ की आवश्यकता के सापेक्ष / लंबे समय से कम होने की संभावना है।
मैथ्यू स्नेप

सही है, लेकिन वे उस डेटा को मक्खी पर परिवर्तित कर रहे हैं
NetConstructor.com

17

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

बैकएंड की तरफ सही हेवी-लिफ्टिंग है। हम टाइलस्टैच या किसी अन्य मानचित्र इंजन का उपयोग नहीं कर रहे हैं क्योंकि हमने अपना स्वयं का लिखा है, जो कई अनुकूलन के साथ वास्तविक समय में ऐसे वेक्टर ग्राफिक्स का उत्पादन कर सकता है।

पहले हमने SWFs के रूप में मैप टाइल देने के साथ शुरुआत की और हाल ही में हमने JSON को आउटपुट को सक्षम किया ताकि हम ग्राफिक्स को रेंडर करने के लिए HTML5 कैनवास का उपयोग कर सकें। आप इस तरह की वेक्टर तकनीक की तुलना रैस्टर टेक्नोलॉजी (मेपनिक) से कर सकते हैं। निष्पक्ष तुलना के लिए केवल CGI मोड में परिणाम देखें।

http://www.giscloud.com/blog/realtime-map-tile-rendering-benchmark-rasters-vs-vectors/

हम इस तकनीक को मैप टाइल होस्टिंग सेवा के रूप में प्रदान करने की योजना बना रहे हैं। यह विचार है कि क्लाउड पर अपने जियो डेटा को होस्ट करें और एचटीएमएल 5 के माध्यम से इसे किसी भी मानचित्र क्लाइंट को उच्च गति पर वितरित करें, बिना किसी टाइल को प्रीचेज किए। यदि आप इस बीटा में शामिल होने के लिए इच्छुक हैं तो हमसे बेझिझक संपर्क करें: http://www.giscloud.com/contact/


1
वेक्टर डेटा के लिए टाइल का उपयोग करने का विचार बहुत दिलचस्प है (यह "स्थानिक अनुक्रमण" के लिए एक और शब्द जैसा दिखता है)। आप कई टाइलों को पार करने वाली सुविधाओं से कैसे निपटते हैं? क्या वे कटे हुए हैं?
जुलिएन

3
हां, टाइल के खिलाफ वैक्टर को क्लिप किया गया है
डिनो रविन

14

ऐसा ही लगता है कि हाल ही में OSGeo ओपन लेयर्स फोरम पर एक बहुत ही समान प्रश्न पूछा गया था , जिसमें GIS क्लाउड डेवलपर्स ने अपने दृष्टिकोण का वर्णन किया है, जो कि GeoJSON ज्यामितीय और स्थिर पिक्सल का एक दिलचस्प मिश्रण है। वे वास्तव में जियोजन्स फ़ाइलों के पूर्व-निर्मित कैश का उपयोग करने के बजाय फ्लाई पर सभी वेक्टर टाइल उत्पन्न करते हैं।

Esri ने ArcGIS सर्वर और फ़ीचर लेयर्स का उपयोग करते हुए एक समान दृष्टिकोण लागू किया है , जो कि मक्खी पर ज्यामिति को सामान्य कर सकता है और उन्हें JSON के रूप में तार पर भेज सकता है।

एक सीधे आगे की विधि के लिए जिसे आप वास्तव में अब लागू कर सकते हैं, आप तिलस्टैच (जिसमें पोस्टजीआईएस समर्थन है ) के साथ वेक्टर टाइलें बना सकते हैं और पॉलीमैप्स में उनका उपभोग कर सकते हैं । पॉलिमैप्स एसवीजी का उपयोग करते हैं, लेकिन प्रदर्शन काफी अच्छा है , और यह CSS को मैप तत्वों को स्टाइल करने का नियम है, इसलिए फीचर रेंडरिंग पूरी तरह से आपके ऊपर है। यहाँ एक ब्लॉग पोस्ट है जो आप पूछ रहे हैं के समान काम कर रहा है।


1
@wwnick - आपके उत्तर के लिए धन्यवाद, लेकिन ऐसा लगता है कि GisCloud.com कुछ अतिरिक्त विधियों का उपयोग कर रहा है जो उन्हें कैश तत्वों के बिना ऐसी अद्भुत प्रसंस्करण शक्ति की अनुमति देते हैं जिसका अर्थ है कि सब कुछ वास्तविक है। मैंने सवाल का जवाब जोड़ा और उम्मीद कर रहा था कि आप एक गहन समाधान प्रदान करने में भाग लेने के लिए तैयार हो सकते हैं। इस प्रकार आपकी प्रतिक्रिया के लिए धन्यवाद!
NetConstructor.com

6

मैंने कैनवस का उपयोग करके ओपन लॉयर्स के साथ एक नाटक किया और उचित परिणाम प्राप्त किया।

जैसा कि अन्य उत्तरों में उल्लेख किया गया है: मक्खी में वैक्टर वितरित करने और दिखाने के लिए - उन्हें प्रत्येक ज़ूम स्तर और प्रत्येक डेटासेट के लिए सामान्यीकृत करने की आवश्यकता है। इसके अलावा, आप आकार को बहुत कम करने के लिए Google पॉलीलाइन एन्कोडिंग का उपयोग कर सकते हैं।

मैंने एक सरल वितरण तंत्र का उपयोग किया। प्रत्येक ज्यामिति एक जावास्क्रिप्ट HTTP जावास्क्रिप्ट प्रतिक्रिया के भीतर एक जावास्क्रिप्ट समारोह था। टाइल आधारित वेक्टर डिलीवरी के रूप में उन्नत नहीं है, लेकिन सरल और ओपन सोर्स!

मुझे कैनवस के साथ Google मैप्स v3 को आज़माने के लिए नहीं मिला, लेकिन मैंने न्यूयॉर्क टाइम्स के एक जोड़े को देखा है जो प्रभावित हुआ है।


इस दृष्टिकोण के साथ समस्या यह है कि यह ५००,०००
पॉलीगोन

कृपया जोड़ा इनाम पर ध्यान दें और यदि आप एक विस्तृत समाधान प्रदान कर सकते हैं। BTW न्यूयॉर्क टाइम्स, जबकि समाधान giscloud.com उपयोग कर रहा है के विपरीत बहुत अच्छा उपयोग फ़्लैश।
NetConstructor.com 4

आपका लिंक ऑफलाइन है
NetConstructor.com

हां, इस बारे में खेद है - मेरे "शौक" पॉलीगॉन के साथ छेड़छाड़ के 4 साल बाद समाप्त हो गया है! GISCloud आपको दिखाता है कि कुछ साल पहले मेरी जनगणना डेमो के बाद से तकनीक कितनी दूर आ गई है ... मैंने उपरोक्त टिप्पणी में इसके संदर्भ हटा दिए हैं।
माइनस 34

1
खैर, देर आए दुरुस्त आए! मैंने चीजों को "बॉक्स से बाहर" के रूप में संभव होने के लिए अद्यतन किया है और GitHub पर क्लाइंट साइड कोड पोस्ट किया है । नए कोड के लिए सेटअप को ब्लॉग किया गया है । यह अब PostGIS से सीधे पॉलीगॉन को पढ़ता है और एक जावास्क्रिप्ट जावास्क्रिप्ट क्लाइंट के लिए PostGIS Restful Web Service Framework ( PRWSF ) के माध्यम से मक्खी पर थिनिंग लागू करता है । लगभग कोई बैकएंड कोडिंग की आवश्यकता नहीं है!
माइनस 34

6

मुझे ठीक से पता नहीं है कि इस कंपनी द्वारा किस समाधान का उपयोग किया जाता है (आप शायद उनसे सीधे पूछ सकते हैं) लेकिन मेरे पास एक विचार है।

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


0

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

http://vis.stanford.edu/papers/immens

उनके CartoDB प्लेटफ़ॉर्म और टॉर्क नामक लाइब्रेरी के साथ Vizzuality भी किसी तरह प्रयोग कर रहे हैं कि डेटा की उच्च मात्रा कैसे आकर्षित करें।

http://cartodb.github.io/torque/
https://github.com/CartoDB/torque/tree/new_torque

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