2014-01-27 2 views
0

Привет, используя следующий метод, чтобы узнать расстояние между моим текущим местоположением и местоположениями (широта и долгота), хранящимися в значении NSMutableArray.Неправильное расстояние между местоположениями в iOS?

Но я получаю неправильный distance..Please помощь ..

Мой код

-(void)getDistancetoShow:(NSMutableArray *)newArray{ 

    CLLocationCoordinate2D coordinateUser = [self getLocation]; 


    float _lat,_long; 


    first_Loc = [[CLLocation alloc] initWithLatitude:coordinateUser.latitude longitude:coordinateUser.longitude]; 

    for(int p=0;p<[[newArray1 valueForKey:@"Name"] count];p++){ 

     _lat=[[[newArray1 valueForKey:@"Latitude"] objectAtIndex:p]floatValue]; 
     _long=[[[newArray1 valueForKey:@"Longitude"] objectAtIndex:p]floatValue]; 
     second_loc=[[CLLocation alloc] initWithLatitude:_lat longitude:_long]; 


     showDistance=[second_loc distanceFromLocation:first_Loc]/1000; 

     [distanceToDispaly addObject:[NSString stringWithFormat:@"%.2f KM",showDistance]]; 
    } 

    NSLog(@"first=%@, second=%@", first_Loc, second_loc); 


} 

Latitudes в массиве

( "47,0735010448824", "+47,0564688100431", "47,0582514311038" , "47.0587640538326", "47.0569233603454", "47.0541853132569", "47,0542029215138", "+47,0544259594592", "47,0560264547367", "47,0576532159776", "47,0550023679218", "47,0342030007379", "47,0746263896213", "47,0740256635512", "47,0524765957921", "+47,0606287049051", "47,0539691521825", "47,0542799159057", "+47,0651001682846", "+47,0536948902097", "47,0525973335309", "+47,0389265414812", "+47,0761811267051", "47,0668801601942", "+47,0614859079241", "+47,0579433468181", "47,0718998779465" )

и долгота в массиве

( "21.9154175327011", "21,9312065669748", "21,9337414545594", "+21,9346772505188", "+21,9300587945685", "+21,9363460105132", "21,9362081709222", "21,9343042603097", "21,939485335992", "21,9320057169724", "21,9300799002643", "21,9485373571669", "+21,9310667367526", "21,9318507902135", "21,9192195298473", "+21,9195273899529", "21,9329595191441", "+21,9292015418841", "21,9219452321208", "21,9098849252041", "21,9074768948561", "+21,9424499491422", "21,9151458954504", "21,9304346568769", "+21,9305973807911", "21,9331511189507", "21,9159872752442" )

но реальное расстояние в чем-то вроде уставившись 9 * * ** но я getiing в настоящее время 5 * **

+0

Вы запускаете свое приложение в тренажере? Симулятор не может показать ваше текущее местоположение. – Zhans

+0

Каково значение 'first_Loc'? Без этой информации невозможно проверить ваши результаты. –

+0

my lat and long 12.975602--77.638898 – Bangalore

ответ

1

CLLocation дает кукарекать (прямой) расстояние между двумя местами. Я думаю, вы добираетесь налево.

Сначала возьмите координату двух мест и найдите расстояние между ними. , затем найдите расстояние между этими двумя координатами.

надеюсь, что это поможет

+0

точного расстояния, как 96222.00, но он показывает только 56232,00 т.д. – Bangalore

+0

ки сначала вы должны дать жёстко координаты двух точек Возьмите две переменное CLLocation и применить distanceFromPlayerToEnemySelectedInMeters = [enemyLocation distanceFromLocation: playerLocation]; – morroko

+0

его не работает .... – Bangalore

1

После того, как вы получите две координаты можно вычислить расстояние между ними, используя этот кусок кода (взятый из here):

- (NSNumber*)calculateDistanceInMetersBetweenCoord:(CLLocationCoordinate2D)coord1 coord:(CLLocationCoordinate2D)coord2 { 
    NSInteger nRadius = 6371; // Earth's radius in Kilometers 
    double latDiff = (coord2.latitude - coord1.latitude) * (M_PI/180); 
    double lonDiff = (coord2.longitude - coord1.longitude) * (M_PI/180); 
    double lat1InRadians = coord1.latitude * (M_PI/180); 
    double lat2InRadians = coord2.latitude * (M_PI/180); 
    double nA = pow (sin(latDiff/2), 2) + cos(lat1InRadians) * cos(lat2InRadians) * pow (sin(lonDiff/2), 2); 
    double nC = 2 * atan2(sqrt(nA), sqrt(1 - nA)); 
    double nD = nRadius * nC; 
    // convert to meters 
    return @(nD*1000); 
} 

Надежда это помогает!

+0

CLLocation имеет метод с именем 'distanceFromLocation:' возвращает расстояние в метре – Zhans

+0

этот тоже дает неправильный ответ – Bangalore

+0

Откуда вы знаете реальное расстояние? – Gad

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