Iphone 距离位置似乎不起作用
在应用程序中,我需要计算两点之间的距离。我就是这样做的Iphone 距离位置似乎不起作用,iphone,ios,objective-c,location,cllocationmanager,Iphone,Ios,Objective C,Location,Cllocationmanager,在应用程序中,我需要计算两点之间的距离。我就是这样做的 - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{ NSLog(@"updating"); //Getting my concerts arrConcerten
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation{
NSLog(@"updating");
//Getting my concerts
arrConcerten = [matches mutableCopy];
for (Event *concert in arrConcerten) {
CLLocation *restaurnatLoc = [[CLLocation alloc] initWithLatitude:[concert.eve_latitude floatValue] longitude:[concert.eve_longitude floatValue]];
CLLocationDistance meters = [restaurnatLoc distanceFromLocation:newLocation];
NSLog(@"meters are %f",meters);
if(meters > 5000){
[locationManager2 stopUpdatingLocation];
NSString *message2 = [NSString stringWithFormat:@"Long = %f and lat= %f and Concert Lat = %f and long = %f",newLocation.coordinate.longitude,newLocation.coordinate.latitude,[concert.eve_latitude floatValue],[concert.eve_longitude floatValue]];
NSLog(@"%@",message2);
}else{
NSLog(@"too far away");
}
}
}
这是我的日志上写的
2013-10-17 15:57:23.518 Domino[7468:907] meters are 7973.753294
2013-10-17 15:57:23.520 Domino[7468:907] Long = 5.621456 and lat= 51.097340 and Concert Lat = 51.038139 and long = 5.557330
2013-10-17 15:57:23.896 Domino[7468:907] meters are 27850.874245
2013-10-17 15:57:23.899 Domino[7468:907] Long = 5.621456 and lat= 51.097340 and Concert Lat = 50.860332 and long = 5.493722
正如您所看到的,这些位置彼此很近。但它仍然说我们离得太远了。有人能帮我吗?你为什么要用这个: 如果超过5000米:做点什么,离得太远吗?我不懂逻辑。如果距离太远,那就超过5000米。因此,我认为:
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation{
NSLog(@"updating");
//Getting my concerts
arrConcerten = [matches mutableCopy];
for (Event *concert in arrConcerten) {
CLLocation *restaurnatLoc = [[CLLocation alloc] initWithLatitude:[concert.eve_latitude floatValue] longitude:[concert.eve_longitude floatValue]];
CLLocationDistance meters = [restaurnatLoc distanceFromLocation:newLocation];
NSLog(@"meters are %f",meters);
if(meters <= 5000){
[locationManager2 stopUpdatingLocation];
NSString *message2 = [NSString stringWithFormat:@"Long = %f and lat= %f and Concert Lat = %f and long = %f",newLocation.coordinate.longitude,newLocation.coordinate.latitude,[concert.eve_latitude floatValue],[concert.eve_longitude floatValue]];
NSLog(@"%@",message2);
}else{
NSLog(@"too far away");
}
}
}
还有一件非常重要的事:
该方法通过跟踪测量两个位置之间的距离
它们之间沿着地球曲率的一条线。这个
生成的圆弧是平滑曲线,不考虑
两个位置之间的具体高度变化。
从
距离距离位置测量“空中”距离,而不是逐圈测量。以下是解决方案-
-(NSString *)getDistance:(NSDictionary *)dicVal{
CLLocation *pinLocation = [[CLLocation alloc] initWithLatitude:[[dicVal valueForKey:@"latitude"] doubleValue] longitude:[[dicVal valueForKey:@"longitude"] doubleValue]];
CLLocation *userLocation = [[CLLocation alloc] initWithLatitude:appDelegate.userLocation.latitude longitude:appDelegate.userLocation.longitude];
CLLocationDistance distance = [pinLocation distanceFromLocation:userLocation];
NSString *dist=[NSString stringWithFormat:@"%4.0f %@", distance/1000,NSLocalizedString(@"KM", nil)];
return dist;
}
是的,这只是分配的问题,您必须在每次
cllocation
管理器分配,如下所示:
LocationManager = [[[CLLocationManager alloc] init] autorelease];
LocationManager.delegate = self;
LocationManager.desiredAccuracy = kCLLocationAccuracyBest;
LocationManager.distanceFilter = kCLDistanceFilterNone;
[LocationManager startUpdatingLocation];
CLLocation *location = [LocationManager location];
CLLocationCoordinate2D coordinate1 = [location coordinate];
CLLocation *currentLoc = [[CLLocation alloc] initWithLatitude:coordinate1.latitude longitude:coordinate1.longitude];
CLLocation *restaurnatLoc = [[CLLocation alloc] initWithLatitude:l@"Your latitude not current" longitude:@"Your longitude not current'];
CLLocationDistance meters = [restaurnatLoc distanceFromLocation:currentLoc];
if (meters > 1000)
{
Distancelbl.text=[NSString stringWithFormat: @"You are Away %.2f Km",meters];
}
else{
Distancelbl.text=[NSString stringWithFormat: @"You are Away %.2f Mtr",meters];
}
`我看他们好像不在一起,你为什么这么说?也许
if(meters>5000)
应该if(meters>5000)
如果(meters)你试过把音乐会的水平面视为双倍而不是浮点数吗?浮点数会截断数值,这可能会导致你看到的问题。
LocationManager = [[[CLLocationManager alloc] init] autorelease];
LocationManager.delegate = self;
LocationManager.desiredAccuracy = kCLLocationAccuracyBest;
LocationManager.distanceFilter = kCLDistanceFilterNone;
[LocationManager startUpdatingLocation];
CLLocation *location = [LocationManager location];
CLLocationCoordinate2D coordinate1 = [location coordinate];
CLLocation *currentLoc = [[CLLocation alloc] initWithLatitude:coordinate1.latitude longitude:coordinate1.longitude];
CLLocation *restaurnatLoc = [[CLLocation alloc] initWithLatitude:l@"Your latitude not current" longitude:@"Your longitude not current'];
CLLocationDistance meters = [restaurnatLoc distanceFromLocation:currentLoc];
if (meters > 1000)
{
Distancelbl.text=[NSString stringWithFormat: @"You are Away %.2f Km",meters];
}
else{
Distancelbl.text=[NSString stringWithFormat: @"You are Away %.2f Mtr",meters];
}