2013-02-02 2 views
0

Я использую эту функцию, чтобы получить расстояние от одного к другому CLLocationCLLocationDistance возвращает совершенно неправильные значения

здесь venue.lat является NSNumber

GeoAddress *address = [[GeoAddress new] init]; 

CLLocationCoordinate2D coord; 
coord.longitude = (CLLocationDegrees)[venue.lat doubleValue]; 
coord.latitude = (CLLocationDegrees)[venue.lng doubleValue]; 

address.latlng = [[CLLocation alloc] initWithLatitude:coord.latitude longitude: coord.longitude]; 

if (curUserLocation.coordinate.latitude){ 
    address.distance = [address.latlng distanceFromLocation:curUserLocation]; 
    NSLog(@" DISTANCE %f", address.distance); 
    NSLog(@" LOC1 %f lat %f lng", address.latlng.coordinate.latitude, address.latlng.coordinate.longitude); 
    NSLog(@" ME %f lat %f lng", curUserLocation.coordinate.latitude, curUserLocation.coordinate.longitude); 
} 

Это Geoaddress:

// GeoAddress.h 
@interface GeoAddress : NSObject 
{   
    CLLocation * latlng; 
    CLLocationDistance distance; 
} 
@property CLLocationDistance distance; 
@property (nonatomic, retain) CLLocation * latlng; 

// GeoAddress.m 
#import "GeoAddress.h" 

@implementation GeoAddress 
@synthesize distance; 
@synthesize latlng; 

Это брокер:

DISTANCE 15106456.105786 
LOC1 -73.986357 lat 40.702645 lng 
ME 40.702082 lat -73.984775 lng 

Цифры полностью за пределами фактического расстояния ~ 0.17 км

Что я делаю неправильно ??

+0

В тренажере я получаю неправильное расстояние тоже, я думаю, есть позиция по умолчанию возвращается только потому, что это не настоящее устройство. –

+0

Я думаю, что широта и долгота для LOC1 - назад. – Anna

ответ

5

У вас есть строки, которые говорят:

coord.longitude = (CLLocationDegrees)[venue.lat doubleValue]; 
coord.latitude = (CLLocationDegrees)[venue.lng doubleValue]; 

Очевидно, что должно быть:

coord.longitude = (CLLocationDegrees)[venue.lng doubleValue]; 
coord.latitude = (CLLocationDegrees)[venue.lat doubleValue]; 
+0

oh wow .. спасибо. не могу поверить, что я просто попытался преобразовать их по фактической формуле. – Stpn

+0

Спасибо, это просто показало мне, что я делаю неправильно: P – mattdeboard

1

Где вы установили coord от venue, широта и долгота, присваиваемые в обратном направлении.

Это дает вам неожиданное расстояние.

1

Посмотрите на свой выходе:

LOC1 -73.986357 lat 40.702645 lng 
ME 40.702082 lat -73.984775 lng 

Вы обменялись латами и долго МЭ

Смежные вопросы