एक विशाल रेखापुंज समय श्रृंखला के लिए वेब मैपिंग सॉफ्टवेयर?


11

मैं एक आर्कगिस डेस्कटॉप उपयोगकर्ता हूं जो पहली बार वेब मैपिंग की दुनिया में कदम रख रहा है। GIS.SE पर मुझे यहाँ मिली सलाह के बाद, मैंने OpenGeo के मुफ्त ट्यूटोरियल्स के साथ शुरुआत की ।

हालांकि, मुझे एहसास होने लगा कि अधिकांश डेमो और उदाहरण वेक्टर डेटा की ओर तैयार किए गए थे। मेरी मुख्य परियोजना में 5000 x 5000 पिक्सेल के आपदाओं की 300 फ्रेम समय श्रृंखला का प्रदर्शन शामिल है। मेरे डेस्कटॉप कंप्यूटर पर ये एक 5000x5000x300 16-बिट पूर्णांक बीआईपी बाइनरी में संग्रहीत हैं, जो लगभग 8 जीबी का योग करता है। मेरा लक्ष्य एक सेल पर क्लिक करने में सक्षम होना चाहिए (समय श्रृंखला में एक एकल रेखापुंज) और 300-तत्व समय श्रृंखला में उस पिक्सेल के मूल्यों को दिखाने वाला एक ग्राफ पॉप अप है। प्रत्येक बार श्रृंखला ग्राफ़ के लिए उपयोग किए जाने वाले रेखापुंज डेटा को दोषरहित रूप से संग्रहीत किया जाना चाहिए, हालांकि जिन ओवरले मानचित्रों पर क्लिक किया गया है वे हानिरहित कैश हो सकते हैं।

क्या ऐसी कोई भी चीज़ है जो OpenGeo की तुलना में इस परियोजना के लिए (एक नौसिखिया वेब GIS डेवलपर के लिए) बेहतर हो सकती है? या मैं बस इस सेटअप के साथ जा रहा रखना चाहिए?

संदर्भ के लिए, मेरे पास पायथन, जावा और पीएचपी में प्रोग्रामिंग का अनुभव है। मुझे SQL के साथ बहुत अनुभव नहीं है। यह एक ओपन-एंडेड प्रोजेक्ट है इसलिए मेरे पास ज़रूरत पड़ने पर नई भाषाएँ सीखने के लिए बहुत समय है। मेरे पास पहले से ही एक वेब सर्वर है, हालांकि मुझे शायद मेजबानों को स्विच करना होगा क्योंकि GoDaddy VPS प्राप्त किए बिना PostgreSQL का समर्थन नहीं करता है।

आपकी सहायताके लिए धन्यवाद!

संपादित करें: (13 जनवरी) मैं अभी भी एक 3 आयामी 16-बिट पूर्णांक बीआईपी रेखापुंज को स्टोर करने के लिए सबसे अच्छी तरह से जानकारी की मांग कर रहा हूं और कुशलता से डेटा के एक एकल जेड-अक्ष "कॉलम" को क्वेरी करने में सक्षम हूं। मैं इसे 32-बिट प्रारूप में परिवर्तित नहीं करना चाहता (क्योंकि यह अपने वर्तमान 16-बिट फॉर्म से इसकी फ़ाइल का आकार दोगुना कर देगा)।


2
क्या आप अपने वेबसर्वर पर PostgreSQL / PostGIS डाल सकते हैं? - जब तक आपके लिए स्केलेबल विकल्पों की तलाश नहीं की जाती है, तब तक आपके लिए अपने स्वयं के सर्वर रखने की जोरदार सिफारिश की जाएगी, तब Amazon AWS (EC2 Relational डेटाबेस AMI) aws.amazon.com/running_dat डेटाबेस एक विकल्प हो सकता है।
Mapperz

1
मेरा मेजबान (GoDaddy) इस धागे के अनुसार PostgreSQL का समर्थन नहीं करता है । मुझे वास्तव में स्केलेबिलिटी की आवश्यकता नहीं है - यह परियोजना ज्यादातर कुछ सहकर्मी शोधकर्ताओं को 8GB फ़ाइल भेजने और ENVI में लोड करने की तुलना में मेरे डेटा तक आसान पहुंच के लिए सक्षम करने के लिए है।
dmahr

1
यदि आप एक नए होस्ट पर विचार कर रहे हैं, तो मैं बहुत अधिक वेबफिकेशन की सिफारिश नहीं कर सकता; वे postgresql / postgis1.5 की पेशकश करते हैं, लेकिन रेखापुंज कार्यक्षमता के लिए आप शायद postgis2.0 चाहते हैं। यह साझा होस्टिंग पर भी है।
djq

जवाबों:


6

संपादित करें: (13 जनवरी) मैं अभी भी एक 3 आयामी 16-बिट पूर्णांक बीआईपी रेखापुंज को स्टोर करने के लिए सबसे अच्छी तरह से जानकारी मांग रहा हूं और कुशलता से डेटा के एक एकल जेड-एक्सिस "कॉलम" को क्वेरी करने में सक्षम हूं। मैं इसे 32-बिट प्रारूप में बदलना नहीं चाहता (क्योंकि यह अपने वर्तमान 16-बिट फॉर्म से फ़ाइल का आकार दोगुना कर देगा)।

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

जैसे php में, यह मानते हुए कि फ़ाइल पंक्ति प्रमुख क्रम है (अन्यथा स्विच x और y), $ x और $ y के साथ आपकी ग्रिड में स्थिति (0 से गिनती), $ nx, $ ny और $ nz पिक्सेल की संख्या प्रत्येक आयाम और $ nb प्रति ग्रिडल बाइट्स की संख्या:

$fp = fopen('yourfile.bil', 'r');

fseek ($fp, $nz*$nb*($y*$nx +$x))//this is a very fast operation
// read some data
$data = fread($fp, $nz*nb);//this is also very fast

बस सुनिश्चित करें कि आप सही पिक्सेल तक पहुँचते हैं: क्या गिनती शीर्ष बाएँ से शुरू होती है या नहीं, ...

कुछ अतिरिक्त जानकारी: डेटा पढ़ने के बाद, आपको इसे फ़्लोट में बदलना चाहिए। उदाहरण के लिए:

$dataf=unpack("f*", $data);
print_r($dataf);

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

मैं वेबसाइट के बाकी हिस्सों पर कैसे काम करूंगा, इस बारे में कुछ और जानकारी: चूंकि आपका डेटा स्थिर है, आप gdal2tiles और openlayers का उपयोग करके एक छोटा मैपव्यूअर बना सकते हैं। http://www.gdal.org/gdal2tiles.html वास्तव में, चूंकि आप कहते हैं कि "मुझे वास्तव में स्केलेबिलिटी की आवश्यकता नहीं है - यह प्रोजेक्ट ज्यादातर कुछ सहकर्मी शोधकर्ताओं को सक्षम करने के बजाय मेरे डेटा तक आसान पहुंच बनाने में सक्षम है 8GB फ़ाइल और इसे ENVI में लोड करना। "आप शायद वेबगिस टूलबॉक्स का उपयोग किए बिना भी कर सकते हैं: बस अपने उपयोगकर्ताओं को छवि पर क्लिक करने और निर्देशांक को पकड़ने दें: http://www.emanueleferonato.com/2006/09/02/click -image और get-निर्देशांक-साथ-जावास्क्रिप्ट /

(हालांकि आपको अपनी 5000x5000 छवि को अच्छी तरह से प्रस्तुत करने का तरीका खोजना चाहिए)


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

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

7

यह तीन अलग-अलग मुद्दों की तरह दिखता है: बुनियादी ढांचे में से एक, वास्तुकला का एक और इवेंट हैंडलिंग का एक। मैं एक संभव दृष्टिकोण रखूँगा, लेकिन मेरा उत्तर आवश्यक रूप से सामान्य है।

भूमिकारूप व्यवस्था

मैं आपके सर्वर के लिए लाइनोड (www.linode.com) जैसी VPS होस्टिंग सेवा का उपयोग करने की सलाह देता हूं। यह आपको पेशेवर रूप से बनाए गए सर्वर तक पूर्ण (यानी, रूट) पहुंच प्रदान करता है - बिजली की कोई चिंता नहीं है या इंटरनेट से अपना कनेक्शन खो रहा है।

आर्किटेक्चर

यहां बहुत सारे विकल्प हैं कि यह वास्तव में भारी हो सकता है। एक उदाहरण के रूप में, मैं जियोसेवर और ओपन लायर के साथ कुछ सिस्टम चलाता हूं। GeoServer को Tomcat 7. द्वारा परोसा जाता है। OpenLayers / jQuery के फ्रंट एंड को Apache2 द्वारा परोसा जाता है। वेक्टर डेटा संग्रहीत करने के लिए आप Postgres / PostGIS शामिल कर सकते हैं, लेकिन रेखापुंज डेटा के लिए यह एक अच्छा विकल्प नहीं है। तुम भी एक सरल नियंत्रक के लिए Django या यहां तक ​​कि web.py (http://webpy.org/) का उपयोग करके एक पायथन प्रणाली स्थापित कर सकते हैं। GeoServer आपको निम्नलिखित स्वरूपों में रेखापुंज डेटा को संग्रहीत करने देता है:

  • आर्कग्रिड - आर्क ग्रिड कवरेज प्रारूप
  • GeoTIFF - भौगोलिक जानकारी के साथ टैग की गई छवि फ़ाइल स्वरूप
  • Gtopo30 - Gtopo30 कवरेज प्रारूप
  • ImageMosaic - छवि मोज़ेकिंग प्लगइन
  • WorldImage - एक स्थानिक डेटा फ़ाइल के साथ एक रेखापुंज फ़ाइल

घटना से निपटना

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

अगला, मानचित्र पर XY डेटा प्राप्त करने के लिए आप इस तरह के एक फ़ंक्शन का उपयोग कर सकते हैं (देखें http://dev.openlayers.org/releases/OpenLayers-2.11/examples/click-handler.html ):

onClick: function(evt) {
    var clickSpot = evt.xy;
    // pass clickSpot to the controller ...
}

मुझे आशा है कि वह मदद करेंगे।


अद्यतित करने के लिए धन्यवाद! क्या आपने कभी भी उन तीन फ़ाइल स्वरूपों का उपयोग किया है जो 8 आयामी से अधिक आकार के हैं? मुझे पता है कि GeoTIFF उदाहरण के लिए 4GB से अधिक नहीं हो सकता है। और क्या सर्वर सॉफ़्टवेयर कुशलता से डेटा की एकल z- अक्ष समय श्रृंखला को क्वेरी करने में सक्षम होगा?
dmahr

छवि पिरामिड पर एक नज़र डालें । वह फ़ाइल आकार समस्याओं के साथ मदद कर सकता है। क्लिक इवेंट को हैंडल करते समय आपका कोड (कंट्रोलर) XY डेटा प्राप्त करेगा और फिर 300 टाइमस्टैम्पड छवियों में से प्रत्येक से जेड-वैल्यू को खोजेगा और निकालेगा। यह बहुत अधिक प्रसंस्करण और डिस्क IO है, इसलिए इसमें लंबा समय लग सकता है। यदि वह "जानवर बल" विधि बहुत लंबा है तो आप वैकल्पिक एल्गोरिदम और / या समय-श्रृंखला भंडारण योजनाओं में देख सकते हैं।
कटहिद्दीन

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

1

यदि मैं आपके प्रश्न को सही ढंग से समझता हूं, तो मैं एक समय WMS सेवा बनाऊंगा , उदाहरण के लिए MapServer

इस तरह से प्रत्येक डेटाटाइम के लिए सही रेखापुंज (गेटअप अनुरोध के साथ) प्रदर्शित करना आसान होगा, और किसी दिए गए डेटाटाइम रेंज (गेटफ़िएटरइन्फो अनुरोध के साथ) में सेल के लिए मानों का अनुरोध करें।

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