如何在 iPhone 中找到最近的位置,如银行、餐厅
Posted
技术标签:
【中文标题】如何在 iPhone 中找到最近的位置,如银行、餐厅【英文标题】:How to find nearest locations like banks, restaurant in iPhone 【发布时间】:2011-07-29 11:19:53 【问题描述】:我正在制作一个应用程序,我在其中获取当前位置、姓名和地址、纬度和经度,但是如何在 iPhone 中找到我当前位置附近的银行、餐厅、公交车站等最近的地方。
【问题讨论】:
【参考方案1】:您可以像这样使用谷歌的服务,并在每次更改pointOfInterest字符串的循环中调用它:
CLLocationCoordinate2D coordinate = location.coordinate;
NSString *pointOfInterest = @"banks";
NSString *URLString = [NSString stringWithFormat:@"http://ajax.googleapis.com/ajax/services/search/local?v=1.0&rsz=small&sll=%f,%f&q=%@",coordinate.latitude,coordinate.longitude, pointOfInterest];
URLString = [URLString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:URLString]];
// Perform request and get JSON back as a NSData object
NSError *error = nil;
NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:&error];
if(error != nil)
UIAlertView *alert = [[[UIAlertView alloc] initWithTitle:@"Error"
message:[error localizedDescription]
delegate:self
cancelButtonTitle:@"Done"
otherButtonTitles:nil] autorelease];
[alert show];
else
// Get JSON as a NSString from NSData response
NSString *jsonString = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
//Return the values in NSDictionary format
SBJsonParser *parser = [[SBJsonParser alloc] init];
NSDictionary *jsonResponse = [parser objectWithString:jsonString error:nil];
NSDictionary *responseData = [jsonResponse objectForKey:@"responseData"];
NSArray *results = [responseData objectForKey:@"results"];
您可以在这里获取 JSON API:
https://github.com/stig/json-framework/
【讨论】:
【参考方案2】:您将需要一个能够为您提供这些东西的 API,而标准 SDK 中没有。
【讨论】:
【参考方案3】:您应该有一个代表银行、餐厅或公共汽车(示例中的车站)的对象。您可能希望它实现 MKAnnotation 协议,因为您可能希望将它们添加到 MKMapView。这些对象中的每一个都需要一个坐标属性(CLLocationCoordinate2D)。当我做这样的事情时,我还添加了一个距离属性(CLLocationDistance)。在视图控制器中实例化这些对象时,您需要将它们添加到数组中。
现在,当用户的应用程序更新时,您让每个对象计算从该位置到自身的距离。
例如:
- (void)calculateDistance:(CLLocation *)location
CLLocation *stationLocation = [[CLLocation alloc] initWithLatitude:coordinate.latitude longitude:coordinate.longitude];
distance = [location distanceFromLocation:stationLocation];
[stationLocation release];
一旦你让每个对象计算它的距离,你现在可以按距离对你的数组进行排序。
[stations sortUsingSelector:@selector(compareDistance:)]
这要求您的对象实现此方法:
- (NSComparisonResult)compareDistance:(Station *)aStation
if (distance < aStation.distance) return NSOrderedAscending;
if (distance > aStation.distance) return NSOrderedDescending;
return NSOrderedSame;
现在您的数组中应该包含按距离排序的代表银行等的对象。
[stations objectAtIndex:0]
将是您所在位置的附近。
【讨论】:
以上是关于如何在 iPhone 中找到最近的位置,如银行、餐厅的主要内容,如果未能解决你的问题,请参考以下文章
我正在尝试制作一个类似于查找我的朋友的 iphone 应用程序我如何在地图上找到我朋友的位置?