瞄准使用以下方法找出我当前位置与NSMutableArray值中存储的位置(纬度和经度)之间的距离。
但是我的距离越来越远......请帮助..
我的代码
-(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);
}
阵列中的纬度
( “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 * * ** ,但现在正在进行5 * **
答案 0 :(得分:1)
CLLocation为您提供两个地方之间的乌鸦(直线)距离。我认为你的乌鸦距离很远。
首先取两个坐标的坐标,找出它们之间的距离。 然后在这两个坐标之间搜索乌鸦距离。
希望这会有所帮助
答案 1 :(得分: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);
}
希望这有帮助!
答案 2 :(得分:0)
要在Swift
中使用以下数据,请使用以下减少方法。
此处locations
是CLLocation
类型的数组。
let calculatedDistance = locations.reduce((0, locations[0])) { ($0.0 + $0.1.distance(from: $1), $1)}.0