【问题标题】:How to implement code for getting latitude and longitude?如何实现获取纬度和经度的代码?
【发布时间】:2012-03-30 05:51:09
【问题描述】:

大家好,如何获取位置的纬度和经度值?我正在尝试使用下面的代码,但我得到了错误的响应,我需要你的帮助来解决问题。

- (CLLocationCoordinate2D) geoCodeUsingAddress:(NSString *)address
{
NSString *city,*state,*zip;

city=@"Hyderabad";

state=@"Andrapradesh";

zip=@"22345";

address=city,state,zip;

NSLog(@"##########%@",address);

double latitude = 0, longitude = 0;

NSString *esc_addr = [address 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];

NSLog(@"333333%@",result);

if (result) {
NSScanner *scanner = [NSScanner scannerWithString:result];

NSLog(@"##########%@",scanner);

if ([scanner scanUpToString:@"\"lat\":" intoString:nil] && [scanner scanString:@"\"lat\":" intoString:nil]) {
[scanner scanDouble:&latitude];

NSLog(@"4444444%@",scanner);

NSLog(@"5555%@",latitude);

if ([scanner scanUpToString:@"\"lng\":" intoString:nil] && [scanner scanString:@"\"lng\":" intoString:nil]) {
[scanner scanDouble:&longitude];

NSLog(@"6666%@",scanner);

NSLog(@"7777%@",longitude);

}

}

}

CLLocationCoordinate2D center;

center.latitude = latitude;

NSLog(@"##########%@",latitude);

center.longitude = longitude;

return center;

}




333333 {

"results" : [

{

"address_components" : [

{

"long_name" : "Hyderabad",

"short_name" : "Hyderabad",

"types" : [ "locality", "political" ]

},

{

"long_name" : "Ranga Reddy",

"short_name" : "R.R. District",

"types" : [ "administrative_area_level_2", "political" ]

},

{

"long_name" : "Andhra Pradesh",

"short_name" : "Andhra Pradesh",

"types" : [ "administrative_area_level_1", "political" ]

},

{

"long_name" : "India",

"short_name" : "IN",

"types" : [ "country", "political" ]

}

],

"formatted_address" : "Hyderabad, Andhra Pradesh, India",

"geometry" : {

"bounds" : {

"northeast" : {

"lat" : 17.57944810,

"lng" : 78.69135810

},

"southwest" : {

"lat" : 17.23837080,

"lng" : 78.24014110

}

},

"location" : {

"lat" : 17.3850440,

"lng" : 78.4866710

},

"location_type" : "APPROXIMATE",

"viewport" : {

"northeast" : {

"lat" : 17.55533690,

"lng" : 78.74278980

},

"southwest" : {

"lat" : 17.21459250,

"lng" : 78.23055219999999

}

}

},

"types" : [ "locality", "political" ]

}

],

"status" : "OK"

}

2012-03-29 23:56:58.577 SVGeocoder[670:11603]

####

2012-03-29 23:56:58.578 SVGeocoder[670:11603] ##########(null)

【问题讨论】:

  • 这条线应该做什么:address=city,state,zip;?它甚至不是有效的objective-c。这可以编译吗?
  • 你到底在问什么,这根本不清楚。您正在列出响应,这是您得到的吗?你有什么问题?
  • 我得到了响应,但我想提取数值(纬度和经度)
  • 出现如下异常,如何解决?
  • [__NSCFString JSONValue]:无法识别的选择器发送到实例 0x83a1000 2012-03-30 01:21:19.812 SVGeocoder[940:11603] *** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因: '-[__NSCFString JSONValue]: unrecognized selector sent to instance 0x83a1000' *** First throw call stack: (0x16ee052 0x13d9d0a 0x16efced 0x0x16efec9 0x3945c2 0x39455a 0x439b76 0x43a03f 0x4392fe 0x3b9a30 0x3b9c56 0x3a0384 0x393aa9 0x1de4fa9 0x16c21c5 0x1627022 0x162590a 0x1624db​​4 0x1624ccb 0x1de3879 0x1de393e 0x391a9b 0x1dcd 0x1d45) terminate called抛出异常(lldb)

标签: iphone ios5 geocoding


【解决方案1】:

试试这个:

- (CLLocationCoordinate2D) geoCodeUsingAddress: (NSString *) address
{
    CLLocationCoordinate2D myLocation; 

    NSString *esc_addr = [address stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];

    NSString *req = [NSString stringWithFormat: @"http://maps.google.com/maps/api/geocode/json?sensor=false&address=%@", esc_addr];

    NSDictionary *googleResponse = [[NSString stringWithContentsOfURL: [NSURL URLWithString: req] encoding: NSUTF8StringEncoding error: NULL] JSONValue];

    NSDictionary *resultsDict = [googleResponse valueForKey:  @"results"];
    NSDictionary *geometryDict = [resultsDict valueForKey: @"geometry"];     
    NSDictionary *locationDict = [geometryDict valueForKey: @"location"];       
    NSArray *latArray = [locationDict valueForKey: @"lat"]; NSString *latString = [latArray lastObject];   
    NSArray *lngArray = [locationDict valueForKey: @"lng"]; NSString *lngString = [lngArray lastObject];    

    myLocation.latitude = [latString doubleValue];     
    myLocation.longitude = [lngString doubleValue];

    LogInfo(@"lat: %f\tlon:%f", myLocation.latitude, myLocation.longitude);
    return myLocation;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-25
    • 2016-09-29
    • 1970-01-01
    • 2013-01-16
    • 1970-01-01
    相关资源
    最近更新 更多