पर एनोटेशन को समेकित करें जो मैं करना चाहता हूं उसके बारे में जाने के कई बुरे तरीके हैं, लेकिन ऐसा लगता है कि "एक बेहतर तरीका होना चाहिए"।ज़ूम किए गए MKMapView
मैं एक आईफोन ऐप में एक एमकेमैप व्यू का उपयोग कर रहा हूं जो कई एनोटेशन प्रदर्शित करता है। वैचारिक चर्चा के लिए नाटक करें कि अमेरिकी राज्य के प्रत्येक शहर में एनोटेशन है, इसलिए स्क्रीन पर एनोटेशन की काफी घनी ढेर है। चूंकि उपयोगकर्ता मानचित्र को ज़ूम आउट करता है, वे एनोटेशन एक-दूसरे पर क्रंच करना शुरू करते हैं, जब तक कि वे ओवरलैप नहीं हो जाते हैं और अलग-अलग चुनने में कठोर हो जाते हैं।
मैं क्या करना चाहता हूं, एनोटेशन के किसी विशेष घनत्व पर (कहें कि जब कोई एनोटेशन ओवरलैप होता है), उन एनोटेशन को एक एनोटेशन में समेकित करें जो इंगित करता है कि इसमें कई उप-एनोटेशन (कुछ दृश्य संकेतक कहने के लिए संलग्न हैं) , "ज़ूम इन करें और आपको और एनोटेशन दिखाई देंगे")।
मैं एनोटेशन विचारों पर CGRectIntersectsRect कह सकते हैं, लेकिन उस का उपयोग कर एक एन^2 समस्या प्रतीत होता है - मैं प्रत्येक एनोटेशन के लिए प्रत्येक एनोटेशन से अधिक पुनरावृति करना होगा। इस स्यूडोकोड पर विचार करें:
FOR firstAnnotationView IN allAnnotationViews FOR secondAnnotationView in allAnnotationViews IF CGRectIntersectsRect(firstAnnotationView.frame, secondAnnotationView.frame) // found two overlapping annotations, consolidate them ENDIF ENDFOR ENDFOR
आप देख सकते हैं क्यों कि धीमी गति से होगा, और यह हर बार नक्शा या बाहर में ज़ूम इन किया गया था चलाना होगा!
तो आप मानचित्र में ओवरलैपिंग एनोटेशन का पता कैसे लगाएंगे, और प्रदर्शन-समझदार फैशन में, उन्हें समझदारी से समेकित करेंगे?
अपनी खोज को अंतरिक्ष पर विचार करें। क्या आपके बाहरी लूप में सभी एनोटेशन पर विचार करना आवश्यक है? वर्तमान में देखने वाले एनोटेशन का मूल्यांकन करने के बारे में क्या? –