use*_*517 11 iphone geocoding objective-c ios
我根据经度和纬度值获得了当前位置,然后我还使用Annotation在Google地图上获得了多个位置.现在我想根据地址(即街道,城市和县)获取经度和纬度值.需要一些指导如何实现.
直到现在,这是我尝试过的: -
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
@synthesize streetField = _streetField, cityField = _cityField, countryField = _countryField, fetchCoordinatesButton = _fetchCoordinatesButton, nameLabel = _nameLabel, coordinatesLabel = _coordinatesLabel;
@synthesize geocoder = _geocoder;
- (void)viewDidLoad
{
    [super viewDidLoad];
    _streetField.delegate=self;
    _cityField.delegate=self;
    _countryField.delegate=self;
    // Do any additional setup after loading the view, typically from a nib.
}
- (IBAction)fetchCoordinates:(id)sender {
    NSLog(@"Fetch Coordinates");
    if (!self.geocoder) {
          NSLog(@"Geocdoing");
        self.geocoder = [[CLGeocoder alloc] init];
    }
    NSString *address = [NSString stringWithFormat:@"%@ %@ %@", self.streetField.text, self.cityField.text, self.countryField.text];
    NSLog(@"GET Addres%@",address);
    self.fetchCoordinatesButton.enabled = NO;
    [self.geocoder geocodeAddressString:address completionHandler:^(NSArray *placemarks, NSError *error) {
          NSLog(@"Fetch Gecodingaddress");
        if ([placemarks count] > 0) {
            CLPlacemark *placemark = [placemarks objectAtIndex:0];
             NSLog(@"GET placemark%@",placemark);
            CLLocation *location = placemark.location;
            NSLog(@"GET location%@",location);
            CLLocationCoordinate2D coordinate = location.coordinate;
            self.coordinatesLabel.text = [NSString stringWithFormat:@"%f, %f", coordinate.latitude, coordinate.longitude];
            NSLog(@"CoordinatesLabel%@",self.coordinatesLabel.text);
            if ([placemark.areasOfInterest count] > 0) {
                NSString *areaOfInterest = [placemark.areasOfInterest objectAtIndex:0];
                self.nameLabel.text = areaOfInterest;
                NSLog(@"NameLabe%@",self.nameLabel.text);
            }
        }
        self.fetchCoordinatesButton.enabled = YES;
    }];
}
- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
    [textField resignFirstResponder];
    return YES;
}
@end
上面的代码不能给我经纬度.需要帮助我在这里做错了什么,或者我是否缺少某些东西.
提前致谢.
kar*_*yan 25
编辑:
在使用iOS8更新的此检查之前
NSLocationAlwaysUsageDescription
NSLocationWhenInUseUsageDescription
这是为了获得基于纬度和长度的用户区域,如街道名称,州名,国家.
-(CLLocationCoordinate2D) getLocationFromAddressString: (NSString*) addressStr {
    double latitude = 0, longitude = 0;
    NSString *esc_addr =  [addressStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    NSString *req = [NSString stringWithFormat:@"http://maps.google.com/maps/api/geocode/json?sensor=false&address=%@", esc_addr];
    NSString *result = [NSString stringWithContentsOfURL:[NSURL URLWithString:req] encoding:NSUTF8StringEncoding error:NULL];
    if (result) {
        NSScanner *scanner = [NSScanner scannerWithString:result];
        if ([scanner scanUpToString:@"\"lat\" :" intoString:nil] && [scanner scanString:@"\"lat\" :" intoString:nil]) {
            [scanner scanDouble:&latitude];
            if ([scanner scanUpToString:@"\"lng\" :" intoString:nil] && [scanner scanString:@"\"lng\" :" intoString:nil]) {
                [scanner scanDouble:&longitude];
            }
        }
    }
    CLLocationCoordinate2D center;
    center.latitude=latitude;
    center.longitude = longitude;
    NSLog(@"View Controller get Location Logitute : %f",center.latitude);
    NSLog(@"View Controller get Location Latitute : %f",center.longitude);
    return center;
}
根据你的项目在viewdidload方法或某个地方调用这样的方法
[self getLocationFromAddressString:@"chennai"];
只需在浏览器中传递此内容 http://maps.google.com/maps/api/geocode/json?sensor=false&address=chennai
你将拥有lat和lon的json格式
http://maps.google.com/maps/api/geocode/json?sensor=false&address=@"your city name here"
 NSString *address = [NSString stringWithFormat:@"http://maps.google.com/maps/api/geocode/json?sensor=false&address=%@ %@ %@", self.streetField.text, self.cityField.text, self.countryField.text];
使用这种方法....
CLLocationCoordinate2D center;
        center=[self getLocationFromAddressString:@"uthangarai"];
      double  latFrom=¢er.latitude;
      double  lonFrom=¢er.longitude;
  NSLog(@"View Controller get Location Logitute : %f",latFrom);
        NSLog(@"View Controller get Location Latitute : %f",lonFrom);
有人在寻找Swift 2.0解决方案,可以在下面使用:
let address = "1 Infinite Loop, CA, USA"
        let geocoder = CLGeocoder()
        geocoder.geocodeAddressString(address, completionHandler: {(placemarks, error) -> Void in
            if((error) != nil){
                print("Error", error)
            }
            if let placemark = placemarks?.first {
                let coordinates:CLLocationCoordinate2D = placemark.location!.coordinate
                coordinates.latitude
                coordinates.longitude
                print("lat", coordinates.latitude)
                print("long", coordinates.longitude)
            }
        })
| 归档时间: | 
 | 
| 查看次数: | 30893 次 | 
| 最近记录: |