2015-11-18 4 views
5

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

मेरे drawMapRect दिखता है इस तरह:

- for each polyline segment 
- verify if it's bounding box intersects the currently drawn MKMapRect 
- if id does, draw it 

अगर वहाँ भी कई अंक नहीं हैं कौन सा महान है। लेकिन जब 8-16 मैप्रेक्ट दिखाई देते हैं और 2-3000 अंक होते हैं, तो वे for के माध्यम से अविश्वसनीय रूप से धीमी गति से चल रहे हैं।

यदि वे केवल स्थान होंगे, तो समाधान किसी प्रकार की क्वाड्री/आर-पेड़ संरचना को लागू करना होगा और वर्तमान में MKMapRect में उन स्थानों के लिए फ़िल्टर करना होगा, लेकिन मुझे यकीन नहीं है कि यह अपरिवर्तनीय होगा या नहीं polylines खुद के लिए।

अगर मैं वर्तमान maprect अंदर खंड अंतिम बिंदुओं के लिए केवल फ़िल्टर करते हैं, तो कुछ रेखा खंड तैयार नहीं किया जा सकता है। उदाहरण के लिए, 1-2 अंक के बीच दो लाल maprects उन में कोई खंड अंतिमबिंदुओं है, लेकिन अभी भी आकर्षित करने की आवश्यकता ...

enter image description here

वहाँ quadtrees के समान या के लिए दृष्टिकोण किसी तरह एल्गोरिथ्म के कुछ प्रकार है यह समस्या ?

उत्तर

0

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

संपादित करें:

मैं तुम्हें पॉलीलाइन MKMapRect चौराहे के लिए उपयोग के लिए एक प्रभावी एल्गोरिथ्म जैसे How to find the intersection point between a line and a rectangle? में दिखाया गया है की जाँच मान।

+0

इस एक कोशिश और कुछ भी नहीं मिल सकता है दे देंगे। वर्तमान में प्रत्येक सेगमेंट के लिए मैं अपने बाध्यकारी मानचित्र की गणना करता हूं और वर्तमान में खींचे गए मानचित्र के साथ बस mkmparect चौराहे/रोकथाम की जांच करता हूं। – Templar

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