ऑफ़लाइन फिसलन मानचित्र टाइलों के लिए डेटाबेस


25

वर्तमान में मेरे पास एक ऑफ़लाइन HTML5 मानचित्र अनुप्रयोग है (जो कि कस्टम परिवर्धन के साथ USC & KendoUI पर बनाया गया है) जिसमें एक ऐप मैनिफ़ेस्ट है और कई प्लेटफार्मों पर ठीक काम करता है। हालांकि, मैं इस तरह से वास्तविक मानचित्र टाइलों को संग्रहीत करने के लिए मैनिफ़ेस्ट का उपयोग करने में संकोच कर रहा हूं (पीएनजी फाइलें एक टीएमएस स्टाइल टाइल कैश के रूप में संग्रहीत)।

मुद्दे:

  • लगभग 1,000 पीएनजी फाइलों में बहुत सारी टाइलें (10 एमबी - 50 एमबी) हो सकती हैं
  • प्रारंभिक डाउनलोड वास्तव में धीमा हो सकता है (और उपयोगकर्ता को प्रगति दिखाने के लिए कठिन है)
  • ऐप मैनिफ़ेस्ट काम करते हैं या वे नहीं करते हैं यदि वे पूरी तरह से ऑफ़लाइन कैशिंग विफल नहीं होंगे ([whatwg.org] [1] के अनुसार)
  • ऑफ़लाइन उपयोगकर्ता को कभी-कभी पुन: कनेक्ट करना होगा और टाइलों के रिफ्रेश होने की आवश्यकता होगी, ये छोटे डेल्टा हैं लेकिन ऐप मैनिफ़ेस्ट मेकेनिज़्म सभी जीएस, सीएसएस, और पीएनजी फाइलों को जल्द ही अपडेट अपडेट में पुनः लोड कर देगा।

वैकल्पिक विचार: वेब एप्लिकेशन को स्लिपी मैप टाइल्स के भंडारण से अलग रखें। टाइल्स को वेब एप्लिकेशन फ्रेंडली डेटाबेस में स्टोर करें

अद्यतन करें:

[PouchDB ने हाल ही में बाइनरी ब्लब्स के लिए समर्थन जोड़ा है। मुझे अच्छे प्रारंभिक परिणाम मिल रहे हैं। देखें: /programming/16721312/use-pouchdb-as-an-offline-raster-map-cache ]

प्रश्न: एक जावास्क्रिप्ट अनुकूल DB के लिए निम्नलिखित विकल्पों के बारे में सामूहिक ज्ञान (और अनुभव) क्या कहता है:

  1. SqlLite
    • लगता है जैसे आपको इसके लिए एक देशी ऐप रैपर बनाने की आवश्यकता है ताकि वह जावास्क्रिप्ट पर बात कर सके
    • उदा आपको DLL को विंडोज़ के लिए एक मूल कार्यक्रम में जोड़ें, और Android / IOS के लिए PhoneGap
  2. WebSQL
    • depricated
    • लेकिन यह एक SQL लाइट था जिसे मैं होस्ट वेब सर्वर से आसानी से जनरेट और वितरित कर सकता था
  3. IndexDB

    • ब्लोअर्स स्टोर करने से लगता है कि काम करना है: https://hacks.mozilla.org/2012/02/storing-images-and-files-in-indexeddb/
    • मुझे चिंता है कि यह शुरुआत में DB को आबाद करने का एकमात्र तरीका है
    • क्या यह मूल रूप से SQLLite फ़ाइल है? क्या मैं इसे बल्क डीबी अपलोड के लिए शिप कर सकता हूं?
    • मैं एक समाधान के रूप में इस ओर झुक रहा हूं। क्या मुझे उनके बारे में जानकारी नहीं है?

    आवश्यकताएँ:

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

अद्यतन करें:

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

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

HTML5 फ़ाइल API: मैंने इस पर बहुत विस्तार से ध्यान नहीं दिया है। लेकिन ऐसा लगता है कि टीएमएस प्रारूप में एक स्थानीय फ़ाइल ट्री बनाने के लिए अधिकांश ऑपरेशन हैं: http://www.html5rocks.com/en/tutorials/file/filesystem/ जो परीक्षण के लिए दिलचस्प होगा वह प्रदर्शन है (जैसे मैं वेब कार्यों का उपयोग कर सकता हूं बैंडविड्थ को डिस्क और नेट पर अधिकतम करने के लिए)। IndexDB व्यापक रूप से वेब वर्कर फ्रेंडली होने के लिए लागू नहीं है (सिंक इंटरफ़ेस: /programming/10698728/indexeddb-in-web-worker-on-firefox

मुझे IndexDB के साथ IndexDB का उपयोग करने के बारे में कुछ अतिरिक्त जानकारी मिली है:

https://github.com/calvinmetcalf/leaflet.pouch (ऑफ़लाइन के लिए इंडेक्सब के साथ सिंक काउच) भी यहां इंडेक्सड, वेबसकल और स्थानीय स्टोर के लिए पढ़ने / लिखने की गति के लिए कुछ परीक्षण हैं: http://jsperf.com/indexeddb -vs-LocalStorage / 15

और यहाँ जावास्क्रिप्ट से रीड / राइट फ़ाइल एपीआई का उपयोग कैसे किया जाता है: (और भंडारण सीमा बढ़ाने के लिए भी पूछना है) http://www.html5rocks.com/en/tutorials/file/filesystem/


कुछ अच्छी प्रतिक्रिया के लिए, टॉम मैकवर्थ (उर्फ tmcw), धन्यवाद। आपका उदाहरण वास्तव में तब मदद करने वाला है जब मैं बाइनरी ब्लॉब्स को निगलना करने के लिए कस्टम लेयर बनाने के लिए मिलता हूं।

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


BTW: यदि आप क्लाइंट साइड डेटाबेस पर मेरे अध्ययन के मेरे परिणाम देखना चाहते हैं:

/programming/14113278/storing-image-data-for-offline-web-application-client-side-storage-database



नकल का कोई खास कारण? stackoverflow.com/questions/14058489/…
radek 18

अंडरडार्क नहीं अंडरडार्क? ;]
radek

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

जवाबों:


7

PhoneGap और MBTiles

WebSQL और IndexDB पर्याप्त नहीं होगा। 'विंडोज लैपटॉप' मोबाइल उपकरणों के समान कोड नहीं होगा।


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

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

1
जो आप करना चाहते हैं वह मूल घटक के बिना संभव नहीं है। यह शायद पुनर्जागरण का समय है।
tmcw

मेरी जिज्ञासा के लिए, IndexDB या FileAPI में क्या समस्या है?

1
निकट-शून्य और धब्बेदार ब्राउज़र समर्थन प्लस कम आकार की सीमाएँ। अपने लिए प्रयास करें।
tmcw

3

पीएनजी फिसलन नक्शे के लिए ऑफ़लाइन ऑफ़लाइन कैश कैश

परिक्षण

  • 171 पीएनजी फाइलें (कुल 3.2MB)
  • प्लेटफ़ॉर्म का परीक्षण किया गया: क्रोम v24, फ़ायरफ़ॉक्स 18, IE 10
  • Android के लिए Chrome और FF के साथ भी काम करना चाहिए

वेब सर्वर से प्राप्त करें

  • वेब सर्वर से बूँद डाउनलोड के लिए XHR2 (लगभग सभी ब्राउज़रों पर समर्थित) का उपयोग करना
  • मैं फिल पार्सन्स द्वारा XHR2-Lib के साथ गया, जो कि JQUERY .ajax () की तरह है।

भंडारण

  • IE और FireFox के लिए IndexedDB
  • क्रोम: पॉलीफिल (फाइलसिस्टम एपीआई का उपयोग करते हुए ब्लॉब संग्रहीत, इंडेक्सडीडीबी में रखा गया संदर्भ) पॉलीफिल
  • "कैसे ब्राउजर्स इंडेक्सडीडीबी डेटा स्टोर करें" पर एक लेख अवश्य पढ़ें
  • नोट: फ़ायरफ़ॉक्स NOSQL IndexedDB के लिए SQLlite का उपयोग करता है। यह धीमे प्रदर्शन का कारण हो सकता है। (अलग से रखा गया ब्लब)
  • नोट: Microsoft IE एक्स्टेंसिबल स्टोरेज इंजन का उपयोग करता है:
  • नोट: Chrome LevelDB http://code.google.com/p/leveldb/ का उपयोग करता है

प्रदर्शन

  • मैं मानचित्र टाइल दिखाने के लिए USC http://leafletjs.com/ का उपयोग कर रहा हूं
  • मैंने DB से टाइल की परत लाने के लिए Ishmel Smyrnow द्वारा कार्यात्मक टाइल परत प्लगइन का उपयोग किया
  • मैंने विशुद्ध रूप से स्थानीय (लोकलहोस्ट: //) स्टोरेज के साथ डीबी-आधारित टाइल्स की परत की तुलना की
  • प्रदर्शन में कोई उल्लेखनीय अंतर नहीं है! IndexedDB और स्थानीय फ़ाइलों का उपयोग करने के बीच!

परिणाम

  • Chrome: Fetch (6.551s), स्टोर (8.247)
  • फ़ायर्फ़ॉक्स: फेट (0.422s), स्टोर (34.519s)
  • आईई 10: Fetch (0.668s), स्टोर: (0.896s)

2

तो आप लगभग निश्चित रूप से पत्ती का उपयोग नहीं करना चाहते हैं। पाउच, मैंने बनाया है कि वेक्टर डेटा को ध्यान में रखते हुए टाइल नहीं है, आप अपनी टाइलों को स्टोर करने के लिए पाउचबेड का उपयोग करने से बेहतर होंगे , क्योंकि आप काउचबीडी से प्रतिकृति भी कर सकते हैं। तेजी से प्रारंभिक लोड, ऊपर @tmcw का उत्तर भी काम करेगा यदि आपके पास मोबाइल वेब पेज के विपरीत एक फोन ऐप का अधिक है।


0

पीएनजी या JPG या WebP या GZipped PBF के साथ टाइल टेबल के साथ मानक SQLite3 कंटेनर MBTILES प्रारूप का उपयोग करें। इसे MBTILES.JS https://github.com/tilembjp/mbtiles.js/tree/master https: // के साथ एकीकृत किया गया है। www.npmjs.com/package/Leaflet.TileLayer.MBTiles

आप मैपबॉक्स द्वारा एमबीएमएसआईएल के साथ टीएमएस या एक्सवाईजेड टाइल्स को एमबीटीआईएल में बदल सकते हैं। यदि आपको पहले टाइल के फ़ोल्डर उत्पन्न करने की आवश्यकता है, तो पहले GDAL2TILES_Parallel.py या gdal2tilesp.py का उपयोग करते हुए मूल के समानांतर मल्टीप्रोसेसिंग अजगर कार्यान्वयनों का उपयोग करें। इन दोनों को GDAL की आवश्यकता होती है।


मैंने पूरी तरह से ऑफ़लाइन देखने के लिए पत्रक में mbtiles (रेखापुंज, वेक्टर और इलाके / ऊंचाई) के प्रत्यक्ष पढ़ने को लागू किया है।
जियोस्पैटियल

मेरे कार्यान्वयन ने ओजीसी जियोपैकेज समर्थन को जोड़ा। रेखापुंज, वेक्टर, ऊंचाई और वेक्टर टाइलें। जियोपैकेज-जेएस का उपयोग करते हुए
जियोस्पैटियल

0

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

यह स्थानीय और दूरस्थ mbtiles पढ़ेगा। Ionic या प्रतिक्रिया मूल के साथ मोबाइल एप्लिकेशन के रूप में पैकेज। या इलेक्ट्रॉन एटम के साथ डेस्कटॉप। MBTILES जाने का रास्ता है

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