2012-04-18 14 views
6

में बड़ी संख्या में पुशपिन को कैसे संभालें I Ajax के साथ बिंग मैप्स का उपयोग कर रहा हूं और मेरे पास पुशपिन ड्रॉप करने के लिए लगभग 80,000 स्थान हैं। सुविधा का उद्देश्य उपयोगकर्ता को लुइसियाना में रेस्तरां खोजने की अनुमति देना है और स्वास्थ्य निरीक्षण जानकारी देखने के लिए पुशपिन पर क्लिक करना है।बिंग मैप्स

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

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

ऐसा लगता है जैसे मैं इस गलत तरीके से जा रहा हूं। क्या इस बड़ी मात्रा में डेटा को प्रबंधित करने का कोई बेहतर तरीका है? क्या शुरुआत में सभी बिंदुओं को लोड करने का प्रयास करना बेहतर होगा और उसके बाद नक्शा चलने पर हर बार मेरी वेब सेवा को हिट किए बिना हाथ पर डेटा होगा। यदि हां, तो मैं इसके बारे में कैसे जाऊं?

मुझे अपने प्रश्नों के उत्तर नहीं मिल पाए हैं, जिसका आमतौर पर मतलब है कि मैं गलत प्रश्न पूछ रहा हूं। अगर कोई मुझे सही सवाल जानने में मदद कर सकता है तो इसकी सराहना की जाएगी।

+0

यदि आप कई डेटा पॉइंट्स को विज़ुअलाइज़ करने का प्रयास कर रहे हैं, तो संभवतः पुशपिन इसे करने का सबसे अच्छा तरीका नहीं है। क्या आपने इसके बजाय हीटमैप का उपयोग करने के बारे में सोचा है? –

+0

टिप्पणी के लिए धन्यवाद! मैंने इसके बारे में सोचा नहीं था, लेकिन इसे जांचने के बाद, मुझे नहीं लगता कि यह मेरे परिदृश्य के लिए काम करेगा क्योंकि उपयोगकर्ताओं को एक अलग स्थान चुनने में सक्षम होना चाहिए और उस स्थान के लिए एक जानकारी पृष्ठ पर ले जाना चाहिए। मैं इसे और अधिक स्पष्ट करने के लिए अपना प्रश्न संपादित करूंगा। – Justin

उत्तर

9

ठीक है, मैंने इसके लिए थोड़ा अलग दृष्टिकोण लागू किया है। यह सिर्फ एक मजेदार अभ्यास था, लेकिन मैं HTML5 कैनवास का उपयोग कर बिंग मैप्स में अपना सभी डेटा (लगभग 140,000 अंक) प्रदर्शित कर रहा हूं।

मैंने पहले क्लाइंट को सभी डेटा लोड किया था। फिर, मैंने ड्राइंग प्रक्रिया को इतना अनुकूलित किया है कि मैंने इसे "व्यूचेंज" ईवेंट से जोड़ा है (जो दृश्य परिवर्तन प्रक्रिया के दौरान हर समय आग लगती है)।

मैंने इस बारे में ब्लॉग किया है। आप इसे here देख सकते हैं।

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


वैसे भी, एक और विकल्प है, अगर आप बिंग मैप्स पर प्रतिबंधित नहीं किया, Leaflet की पसंद का प्रयोग है। यह आपको कैनवास लेयर बनाने की अनुमति देता है जो टाइल-आधारित परत है लेकिन HTML5 कैनवास का उपयोग करके क्लाइंट-साइड में प्रस्तुत किया जाता है। यह संभावनाओं की एक नई श्रृंखला खुलता है। GisCloud में उदाहरण के लिए this मानचित्र देखें।


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

मेरे पास blogged भी है।

+0

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

+0

दरअसल घटनाएं नक्शे पर सीधे जाती हैं। क्या आपने देखा है कि वीडियो दिखाया है? सभी ज़ूम और पैन सीधे बिंग मैप्स द्वारा संभाले जाते हैं। – psousa

+0

आह मैं देखता हूं कि आप क्या कर रहे हैं। आपने नक्शा div में कैनवास डाला, जबकि मैंने इसे मानचित्र div के शीर्ष पर रखा था। हालांकि आपके दृष्टिकोण के साथ भी कैनवास अभी भी अन्य मानचित्र तत्वों के शीर्ष पर होगा जैसे पुशपिन जो बाद में जोड़ सकते हैं। मुझे लगता है कि कोई नक्शा टाइल्स के शीर्ष पर कैनवास डालने की कोशिश कर रहा है, लेकिन पुशपिन या आकृतियों जैसे अन्य मानचित्र तत्वों के नीचे कुछ चालाक कर सकता है, लेकिन यह सही ढंग से लागू करने के लिए दर्द की तरह लगता है। वैसे भी +1;) –

3

मुझे लगता है कि यदि आप इसका उपयोग करने से दूर हो सकते हैं तो क्लस्टरिंग आपकी सबसे अच्छी शर्त होगी। आप कहते हैं कि आपने क्लस्टरिंग का उपयोग करने की कोशिश की लेकिन यह अभी भी प्रदर्शन समस्याओं का कारण बन गया? मैं V7 Interactive SDK पर 80000 डेटा पॉइंट्स के साथ इसका परीक्षण करने गया और ऐसा लगता है कि यह ठीक प्रदर्शन करता है। यह अपने आप को बाहर का परीक्षण करें लिंक पर जाकर और Load module - clustering टैब में लाइन बदलने के लिए:

TestDataGenerator.GenerateData(100,dataCallback); 

को
TestDataGenerator.GenerateData(80000,dataCallback); 

तो Run बटन हिट। प्रदर्शन मुझे कई डेटा बिंदुओं के साथ स्वीकार्य लगता है।

+0

ईमानदार होने के लिए, मैंने इसका परीक्षण नहीं किया था। मैं न केवल मानचित्र पर इसे चित्रित करने के प्रदर्शन के बारे में चिंतित था, बल्कि वेब सेवा को मारने और डेटाबेस से लोड करने के साथ भी। मैं सोच रहा था कि मैं गलत तरीके से समस्या का सामना कर रहा था, लेकिन यह वास्तव में काम कर सकता है। सहायता के लिए धन्यवाद! (मैं यहां नया हूं और मेरे पास 15 प्रतिष्ठा अंक नहीं हैं, इसलिए मैं आपका जवाब +1 नहीं कर सकता ... क्षमा करें)। – Justin

संबंधित मुद्दे