2010-08-01 15 views
13

वहाँ MKMapView किसी दिए गए पते के साथ एक पिन रखने के बनाने के लिए एक तरीका है? का उपयोग कर निर्देशांकMKMapView

धन्यवाद

उत्तर

21

यहाँ मैं एक आवेदन

-(CLLocationCoordinate2D) getLocationFromAddressString:(NSString*) addressStr { 
    NSString *urlStr = [NSString stringWithFormat:@"http://maps.google.com/maps/geo?q=%@&output=csv", 
          [addressStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; 
    NSString *locationStr = [NSString stringWithContentsOfURL:[NSURL URLWithString:urlStr]]; 
    NSArray *items = [locationStr componentsSeparatedByString:@","]; 

    double lat = 0.0; 
    double lon = 0.0; 

    if([items count] >= 4 && [[items objectAtIndex:0] isEqualToString:@"200"]) { 
     lat = [[items objectAtIndex:2] doubleValue]; 
     lon = [[items objectAtIndex:3] doubleValue]; 
    } 
    else { 
     NSLog(@"Address, %@ not found: Error %@",addressStr, [items objectAtIndex:0]); 
    } 
    CLLocationCoordinate2D location; 
    location.latitude = lat; 
    location.longitude = lon; 

    return location; 
} 
+1

यह गूगल जियोकोडिंग नियमों और शर्तों (http://code.google.com/apis/maps/documentation/geocoding/) बाहर की जाँच के लायक है, तो आप का निर्माण कर रहे विशेष रूप से यदि: यह एक एप्पल जियोकोडर उपयोग करना बेहतर है एक वाणिज्यिक आवेदन। –

+0

यू के लिए अपने जवाब – SampathKumar

+1

ध्यान दें कि वर्तमान में (iOS7 बाहर है), तो आप CLGeocoder वर्ग का उपयोग कर सकते हैं, और आगे कोड एक पते स्ट्रिंग वापस निर्देशांक पाने के लिए बहुत बहुत शुक्रिया। विधि का प्रयोग करें: "geocodeAddressString: completHandler:"। इस तरह, आपको Google की जियोकोडिंग सेवा के लिए साइन अप करने की आवश्यकता नहीं है। – idStar

0

के बिना आप एक जियोकोडिंग सेवा का उपयोग करने के निर्देशांक के लिए अपना पता बदलना होगा। Google, मुझे लगता है, कुछ अन्य सेवाओं के साथ, एक प्रदान करता है।

5
यहाँ

में इस्तेमाल किया कोड का एक टुकड़ा मैं एक आवेदन में इस्तेमाल किया कोड का एक टुकड़ा है

[NSString stringWithContentsOfURL:] अब के लिए हटा दिया गया है । आप का उपयोग करने के:

NSString *locationStr = [NSString stringWithContentsOfURL:[NSURL URLWithString:urlStr] encoding:NSUTF8StringEncoding error:nil]; 
2

के बाद से गूगल अपने जियोकोडिंग एपीआई (upgrade notes) को एक नया संस्करण पोस्ट, @Aaron सॉन्डर्स द्वारा प्रदान की Google नक्शे URL अब मान्य नहीं है। साथ ही, प्रतिक्रिया अब या तो json या xml तो मैं स्वीकार किए जाते हैं जवाब में यह पता करने के लिए कुछ परिवर्तन किए हैं।

- (CLLocationCoordinate2D)locationFromAddressString:(NSString*)addressString { 

    if (!addressString.length) { 
     ALog(@"provided an empty 'addressStr'"); 
     return CLLocationCoordinate2DMake(0.0, 0.0); 
    } 

    NSString *urlStr = [NSString stringWithFormat:GOOGLE_MAPS_GEOCODING_URL_STR, 
        [addressString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; 

    NSError *dataError; 
    NSError *jsonError; 
    NSData *responseData = [NSData dataWithContentsOfURL:[NSURL URLWithString:urlStr] 
              options:NSDataReadingMappedAlways 
               error:&dataError]; 
    NSDictionary *responseBody = [NSJSONSerialization JSONObjectWithData:responseData 
                  options:NSJSONReadingMutableContainers 
                   error:&jsonError]; 

    if (!dataError && !jsonError && [responseBody[@"status"] isEqualToString:@"OK"]) { 
     NSDictionary *coords = responseBody[@"results"][0][@"geometry"][@"location"]; 
     return CLLocationCoordinate2DMake([coords[@"lat"] doubleValue], 
             [coords[@"lng"] doubleValue]); 
    } 
    else { 
     ALog(@"Address [%@] not found. \nResponse [%@]. \nError [%@]",addressString, responseBody, jsonError); 
     return CLLocationCoordinate2DMake(0.0, 0.0); 
    } 
} 
+0

यदि आप नमूना यूआरएल भी प्रदान कर सकते हैं तो यह बहुत अच्छा होगा। –

+1

यह एक नमूना यह है: http://maps.googleapis.com/maps/api/geocode/json?address=Mall+Road+Lahore+Pakistan&sensor=false –

5

के बाद से इस परिणाम प्रथम पृष्ठ में होता है जब आप एक Google खोज करते हैं, तो मुझे लगता है कि यह गूगल जियोकोडिंग (सीमित) की तुलना में एक नवसिखुआ समाधान देने के लिए अच्छा है।

NSString *location = @"your address"; 

CLGeocoder *geocoder = [CLGeocoder new]; 
[geocoder geocodeAddressString:location 
      completionHandler:^(NSArray* placemarks, NSError* error){ 
       if (error) { 
        NSLog(@"%@", error); 
       } else if ([placemarks count]) { 
        CLPlacemark *topResult = [placemarks firstObject]; 
        MKPlacemark *placemark = [[MKPlacemark alloc] initWithPlacemark:topResult]; 


        MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(placemark.coordinate, 5000, 5000); 

        [self.mapView setRegion:region animated:YES]; 
        [self.mapView addAnnotation:placemark]; 
       } 
      }]; 
+1

यह वास्तव में स्वीकार किए जाते हैं जवाब होना चाहिए। मैं objectAtIndex की बजाय [प्लेसमार्क firstObject] का उपयोग करने का सुझाव दूंगा, और त्रुटि स्थिति जांचें। – Ben

+0

हाँ आप कर रहे हैं ठीक है, मैं कोड को संपादित, बस ध्यान में रखना फर्स्टऑब्जेक्ट iOS7 और इसके बाद के संस्करण पर सार्वजनिक रूप से ही उपलब्ध है – Climbatize