Tôi muốn có tên Thành phố hiện tại trong Ứng dụng iPhone của mình.iPhone - Nhận tên thành phố từ Latitude và Longtiude
Tôi hiện đang nhận được vĩ độ và kinh độ bằng cách sử dụng CLLocationManager và hơn tôi đang chuyển tọa độ của tôi vào CLGeocoder.
CLGeocoder * geoCoder = [[CLGeocoder alloc] init];
[geoCoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) {
for (CLPlacemark * placemark in placemarks) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Current City" message:[NSString stringWithFormat:@"Your Current City:%@",[placemark locality]] delegate:self cancelButtonTitle:@"OK" otherButtonTitles:@"Cancel", nil];
[alert show];
}
}];
Tính năng này hoạt động tốt trong iOS 5.0 nhưng không hoạt động trong iOS 4.3.
Là một thay thế, tôi bắt đầu sử dụng dịch vụ Web Google
-(void)findLocationFor:(NSString *)latitudeStr
andLontitude:(NSString *)longtitudeStr{
if ([self connectedToWiFi]){
float latitude = [latitudeStr floatValue];
float longitude = [longtitudeStr floatValue];
NSMutableDictionary *parameters = [NSMutableDictionary dictionaryWithObjectsAndKeys:
[NSString stringWithFormat:@"%f,%f", latitude, longitude], @"latlng", nil];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://maps.googleapis.com/maps/api/geocode/json"]];
[parameters setValue:@"true" forKey:@"sensor"];
[parameters setValue:[[NSLocale currentLocale] objectForKey:NSLocaleLanguageCode] forKey:@"language"];
NSMutableArray *paramStringsArray = [NSMutableArray arrayWithCapacity:[[parameters allKeys] count]];
for(NSString *key in [parameters allKeys]) {
NSObject *paramValue = [parameters valueForKey:key];
[paramStringsArray addObject:[NSString stringWithFormat:@"%@=%@", key, paramValue]];
}
NSString *paramsString = [paramStringsArray componentsJoinedByString:@"&"];
NSString *baseAddress = request.URL.absoluteString;
baseAddress = [baseAddress stringByAppendingFormat:@"?%@", paramsString];
[request setURL:[NSURL URLWithString:baseAddress]];
NSError *error = nil;
NSURLResponse *response = nil;
NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
if (response == nil) {
if (error != nil) {
}
}
else {
NSDictionary *responseDict = [returnData objectFromJSONData];
NSArray *resultsArray = [responseDict valueForKey:@"results"];
NSMutableArray *placemarksArray = [NSMutableArray arrayWithCapacity:[resultsArray count]];
for(NSDictionary *placemarkDict in resultsArray){
NSDictionary *coordinateDict = [[placemarkDict valueForKey:@"geometry"] valueForKey:@"location"];
float lat = [[coordinateDict valueForKey:@"lat"] floatValue];
float lng = [[coordinateDict valueForKey:@"lng"] floatValue];
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
[dict setObject:[NSString stringWithFormat:@"%.f",lat] forKey:@"latitude"];
[dict setObject:[NSString stringWithFormat:@"%.f",lng] forKey:@"longitude"];
[dict setObject:[placemarkDict objectForKey:@"formatted_address"] forKey:@"address"];
[placemarksArray addObject:dict];
[dict release];
}
NSDictionary *placemark = [placemarksArray objectAtIndex:0];
}
}
}
Nhưng câu trả lời mà tôi nhận được là quá dài, có nghĩa là tôi vẫn không thể có được tên thành phố bởi vì trong một số trường hợp dịch vụ web này cung cấp tất cả các thông tin khác liên quan đến tọa độ mong đợi tên thành phố.
Có thể bất kỳ ai giúp tôi không?
một thời gian mã này không làm việc hãy cố gắng tìm thấy một số giải pháp thay thế – btmanikandan
Không làm việc cho tôi Tôi đang sử dụng http://maps.google.com/maps/geo?q=37.785834,-122.406417&output=csv Đầu ra là "610,0,0,0" –
@HardikShah Bạn nhận được kết quả này vì bạn đang sử dụng ** csv **. Thay đổi nó thành ** xml ** hoặc ** json ** như 'output = xml', nó sẽ cho bạn biết rằng đây là mã hóa địa lý cũ và mới là khác nhau. Bạn cũng sẽ nhận được liên kết mã hóa địa lý mới trong phản hồi xml hoặc json. – TheTiger