मैं कैसे तय करते हैं कि एक समन्वय वर्तमान में दृश्यमान नक्शा क्षेत्र में है?

वोट
2

मैं कई सौ स्थानों की एक सूची है और केवल स्क्रीन पर वर्तमान में उन स्थानों के लिए एक MKPinAnnotation प्रदर्शित करना चाहते हैं। स्क्रीन 2 मील की त्रिज्या के साथ उपयोगकर्ता के वर्तमान स्थान के साथ शुरू होता है। बेशक, उपयोगकर्ता स्क्रॉल करें, और स्क्रीन पर ज़ूम कर सकते हैं। अभी, मैं एक नक्शा अद्यतन घटना के लिए मेरे स्थान सूची के माध्यम से पाश प्रतीक्षा करें, और फिर, और इस तरह निर्देशांक की जाँच करें:

-(void)mapViewDidFinishLoadingMap:(MKMapView *)mapView {
  CGPoint point;
  CLLocationCoordinate2D coordinate;

  . . .
  /* in location loop */
  coordinate.latitude = [nextLocation getLatitude];
  coordinate.longitude = [nextLocation getLongitude];

  /* Determine if point is in view. Is there a better way then this? */
  point = [mapView convertCoordinate:coordinate toPointToView:nil];
  if( (point.x > 0) && (point.y>0) ) {
    /* Add coordinate to array that is later added to mapView */
  }

इसलिए मैं convertCoordinate पूछ रहा हूँ जहां बिंदु स्क्रीन पर होगा (जब तक मैं इस विधि जो बहुत संभव है गलत)। यदि समन्वय स्क्रीन पर नहीं है, तो मैं इसे MapView में जोड़ने के लिए कभी नहीं।

तो मेरे सवाल का, इससे यह निर्धारित करने के लिए यदि किसी स्थान का अक्षांश / देशांतर वर्तमान दृश्य में प्रदर्शित होगा और उसे MapView में जोड़ा जाना चाहिए सही तरीका क्या है? या मैं एक अलग तरीके से यह कर किया जाना चाहिए?

29/07/2009 को 00:59
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


3 जवाब

वोट
7

अपने कोड में, आप के लिए एक दृश्य के पास करना चाहिए toPointToView:विकल्प। मैं इसे अपने दे दी है mapView। तुम भी x और y के लिए एक ऊपरी बाध्य निर्दिष्ट करना होगा।

यहाँ कुछ कोड है जो मेरे लिए काम किया (, मुझे मेरे मानचित्र पर वर्तमान में दृश्यमान एनोटेशन बताया जबकि एनोटेशन के माध्यम से पाशन) बताया गया है:

for (Shop *shop in self.shops) {
    ShopAnnotation *ann = [ShopAnnotation annotationWithShop:shop];
    [self.mapView addAnnotation:ann];

    CGPoint annPoint = [self.mapView convertCoordinate:ann.coordinate 
            toPointToView:self.mapView];

    if (annPoint.x > 0.0 && annPoint.y > 0.0 && 
            annPoint.x < self.mapView.frame.size.width && 
            annPoint.y < self.mapView.frame.size.height) {
        NSLog(@"%@ Coordinate: %f %f", ann.title, annPoint.x, annPoint.y);
    }
}
04/02/2010 को 05:47
का स्रोत उपयोगकर्ता

वोट
3

मैं जानता हूँ कि यह एक पुरानी धागा, नहीं यकीन है कि क्या उपलब्ध वापस तो था है ... लेकिन आप बल्कि करना चाहिए:

// -- Your previous code and CLLocationCoordinate2D init --
MKMapRect visibleRect = [mapView visibleMapRect];
if(MKMapRectContainsPoint(visibleRect, MKMapPointForCoordinate(coordinate))) {

    // Do your stuff

}

स्क्रीन स्थान को वापस परिवर्तित करने के लिए कोई ज़रूरत नहीं। इसके अलावा मुझे यकीन है कि नहीं कर रहा हूँ कारण है कि आप ऐसा करने की कोशिश कर रहे हैं, मुझे लगता है कि इस एनोटेशन नहीं जोड़ने के लिए जब वे स्क्रीन पर नहीं हैं अजीब है ... MapKit पहले से ही इस का अनुकूलन और केवल बनाता है (और recycles) एनोटेशन बार देखा गया है कि दिखाई दे रहे हैं ।

22/10/2015 को 19:12
का स्रोत उपयोगकर्ता

वोट
2

पढ़ने का एक छोटा सा के बाद मुझे कुछ भी है कि कहना है कि यह एक बुरा विचार है नहीं मिल रहा। मैं अपने अनुप्रयोग में परीक्षण का एक सा किया है और मैं हमेशा सही परिणाम प्राप्त। एप्लिकेशन के लोड बहुत जल्दी है जब मैं केवल निर्देशांक कि 300+ एक ही बार में निर्देशांक सभी के बजाय वर्तमान में दृश्यमान नक्शा क्षेत्र में दिखाई देगा जोड़ें।

क्या मैं खोज रहा था [MapView isCoordinateInVisibleRegion: myCoordinate] की तरह एक विधि था, लेकिन अब तक इस विधि तेज है और सही लगता है।

मैं भी शीर्षक क्योंकि मुझे लगता है कि गलत शीर्षक मेरी अर्थ भ्रमित हो सकता है पिछले के बजाय "दृश्यमान नक्शे क्षेत्र में" पढ़ने के लिए बदल दिया है।

10/08/2009 को 14:09
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more