Ios 两个车床之间的距离不正确

Ios 两个车床之间的距离不正确,ios,objective-c,cllocation,cllocationdistance,Ios,Objective C,Cllocation,Cllocationdistance,我想知道两个地点之间的距离。我得到的纬度和经度的两个位置使用下面的代码 -(void)getLatLongOfLoac:(NSString *)locStr{ locStr = [locStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSString *geocodeUrl = [NSString stringWithFormat:@"%@://maps.google.com/maps/ap

我想知道两个地点之间的距离。我得到的纬度和经度的两个位置使用下面的代码

-(void)getLatLongOfLoac:(NSString *)locStr{
    locStr = [locStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    NSString *geocodeUrl = [NSString stringWithFormat:@"%@://maps.google.com/maps/api/geocode/json?address=%@&sensor=false", 1 ? @"http" : @"https", locStr];

    ASIFormDataRequest *request   =  [ASIFormDataRequest requestWithURL:[NSURL URLWithString:geocodeUrl]];
    [request setRequestMethod:@"GET"];
    [request setDidFinishSelector:@selector(requestDone:)];
    [request setDidFailSelector:@selector(requestWentWrong:)];
    [request setDelegate:self];
    [request startAsynchronous];
CLLocation *locA = [[CLLocation alloc] initWithLatitude:[[self.latlongForDropOff valueForKey:@"lat"] floatValue]longitude:[[self.latlongForDropOff valueForKey:@"lng"] floatValue]];

CLLocation *locB = [[CLLocation alloc] initWithLatitude:[[self.latlongForPicUp valueForKey:@"lat"] floatValue] longitude:[[self.latlongForPicUp valueForKey:@"lng"]floatValue ]];

   // CLLocationDistance distance = [locA distanceFromLocation:locB];
//float distInMile = 0.000621371192 * [locA distanceFromLocation:locB];
NSString *distance = [ NSString stringWithFormat:@"%f",[locA distanceFromLocation:locB]];
}

}

为了得到两个位置之间的距离,我使用下面的代码

-(void)getLatLongOfLoac:(NSString *)locStr{
    locStr = [locStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    NSString *geocodeUrl = [NSString stringWithFormat:@"%@://maps.google.com/maps/api/geocode/json?address=%@&sensor=false", 1 ? @"http" : @"https", locStr];

    ASIFormDataRequest *request   =  [ASIFormDataRequest requestWithURL:[NSURL URLWithString:geocodeUrl]];
    [request setRequestMethod:@"GET"];
    [request setDidFinishSelector:@selector(requestDone:)];
    [request setDidFailSelector:@selector(requestWentWrong:)];
    [request setDelegate:self];
    [request startAsynchronous];
CLLocation *locA = [[CLLocation alloc] initWithLatitude:[[self.latlongForDropOff valueForKey:@"lat"] floatValue]longitude:[[self.latlongForDropOff valueForKey:@"lng"] floatValue]];

CLLocation *locB = [[CLLocation alloc] initWithLatitude:[[self.latlongForPicUp valueForKey:@"lat"] floatValue] longitude:[[self.latlongForPicUp valueForKey:@"lng"]floatValue ]];

   // CLLocationDistance distance = [locA distanceFromLocation:locB];
//float distInMile = 0.000621371192 * [locA distanceFromLocation:locB];
NSString *distance = [ NSString stringWithFormat:@"%f",[locA distanceFromLocation:locB]];
它给了我一个非常大的值,比如8749107.212873,在换算成英里数后,它甚至有几千英里,但这两个位置只有20公里远


代码中有问题吗?

创建第二个位置时,纬度和经度设置错误:

你正在做:

CLLocation *locB = [[CLLocation alloc] initWithLatitude:[[self.latlongForPicUp valueForKey:@"lng"] floatValue] longitude:[[self.latlongForPicUp valueForKey:@"lat"]floatValue ]];
你应该做:

CLLocation *locB = [[CLLocation alloc] initWithLatitude:[[self.latlongForPicUp valueForKey:@"lat"] floatValue] longitude:[[self.latlongForPicUp valueForKey:@"lng"]floatValue ]];

您正在交换值。

创建第二个位置时,纬度和经度设置错误:

你正在做:

CLLocation *locB = [[CLLocation alloc] initWithLatitude:[[self.latlongForPicUp valueForKey:@"lng"] floatValue] longitude:[[self.latlongForPicUp valueForKey:@"lat"]floatValue ]];
你应该做:

CLLocation *locB = [[CLLocation alloc] initWithLatitude:[[self.latlongForPicUp valueForKey:@"lat"] floatValue] longitude:[[self.latlongForPicUp valueForKey:@"lng"]floatValue ]];

您正在交换值。

您是否注意到正在设置

[[self.latlongForPicUp valueForKey:@"lng"] floatValue] for latitude and [[self.latlongForPicUp valueForKey:@"lat"]floatValue ]];? 
不会

[[self.latlongForPicUp valueForKey:@"lat"] floatValue] for latitude and [[self.latlongForPicUp valueForKey:@"lng"] floatValue] for longitude?

对于纬度和经度,我建议使用double而不是float,因为它更精确。在我看来,你应该试试看会发生什么。

你注意到你正在设置

[[self.latlongForPicUp valueForKey:@"lng"] floatValue] for latitude and [[self.latlongForPicUp valueForKey:@"lat"]floatValue ]];? 
不会

[[self.latlongForPicUp valueForKey:@"lat"] floatValue] for latitude and [[self.latlongForPicUp valueForKey:@"lng"] floatValue] for longitude?

对于纬度和经度,我建议使用double而不是float,因为它更精确。在我看来,您应该尝试一下,看看会发生什么。

您是否注意到您正在将[[self.latlongForPicUp valueForKey:@“lng”]floatValue]设置为纬度和[[self.latlongForPicUp valueForKey:@“lat”]floatValue];?纬度不是[[self.latlongForPicUp valueForKey:@“lat”]floatValue],经度不是[[self.latlongForPicUp valueForKey:@“lng”]floatValue]?即使它给出了错误的纬度和经度结果,我总是使用double而不是float,因为它更精确。在我看来,你应该试试看会发生什么。记录失水事故和失水事故的坐标,确保它们是你认为的那样。@scollaco你完全正确。谢谢请把你的答案贴出来,我想把它标为正确答案。。但是有一些问题,第一次它给出了正确的结果,但是当我再次使用相同的位置时,然后使用“Double”它再次给出了错误的值您是否注意到您正在为纬度设置[[self.latlongForPicUp valueForKey:@“lng”]floatValue]和[[self.latlongForPicUp valueForKey:@“lat”]floatValue];?纬度不是[[self.latlongForPicUp valueForKey:@“lat”]floatValue],经度不是[[self.latlongForPicUp valueForKey:@“lng”]floatValue]?即使它给出了错误的纬度和经度结果,我总是使用double而不是float,因为它更精确。在我看来,你应该试试看会发生什么。记录失水事故和失水事故的坐标,确保它们是你认为的那样。@scollaco你完全正确。谢谢请把你的答案贴出来,我想把它标为正确答案。。但有一些问题,第一次它给出了正确的结果,但当我再次使用相同的位置时,它再次给出错误的结果values@287986,对于纬度和经度,我总是使用double而不是float,因为它更精确。在我看来,你应该试试看,看看会发生什么。检查纬度和经度是否正确,打印locA和locB的值,然后在a中查看它们map@287986,对于纬度和经度,我总是使用double而不是float,因为它更精确。在我看来,你应该试试看,看看会发生什么。检查纬度和经度是否正确,打印locA和locB的值,然后在地图上看到它们