【问题标题】:Calculate distance from array of coordinates计算与坐标数组的距离
【发布时间】:2014-03-17 14:23:57
【问题描述】:

目前我可以计算两个坐标之间的距离NSStrings。

我现在正在尝试计算 NSMutableArray 中的坐标列表,但我被卡住了。
我不知何故需要计算所有loc 之间的距离,或者有更好的方法吗?

for (int i=0; i < self.trackArray.count; i++)
{
    CGFloat latitude  = [[self.trackArray objectAtIndex:0] doubleValue];
    CGFloat longitude = [[self.trackArray objectAtIndex:1] doubleValue];

    CLLocation *loc = [[CLLocation alloc]  initWithLatitude:latitude longitude:longitude];

    CLLocationDistance distance = [loc distanceFromLocation:loc];
    CLLocationDistance kilometers = distance / 1000.0;
    self.distanceString = [NSString stringWithFormat:@"%f", kilometers];
}

更新。 NSLog 中数组的外观示例。

(
"37.335009,-122.032722",
"37.334977,-122.032813",
"37.334948,-122.032921",
"37.334922,-122.033042",
"37.334892,-122.033184",
"37.334858,-122.033344",
"37.334821,-122.033509",
"37.334780,-122.033696"
)

抱歉,我没有说清楚我要做什么,我有一个应用程序可以跟踪用户的位置并在他们身后画一条线,上面是从用户跟踪的坐标,我想找到当前行进的距离计算的距离是乌鸦的距离,它是坐标的第一行和最后一行。我想例如计算前 2 行坐标之间的距离,然后将该距离添加到下 2 行坐标等中。所以如果用户绕着一个圆圈走,我想知道距离。

【问题讨论】:

  • trackArray中数据的布局和类型是什么?举一个“计算所有位置之间的距离”的确切含义的例子。您是指 trackArray 中每个项目到某个其他固定位置 X 的距离还是数组中每个项目之间的距离(从项目 0 到项目 1 的距离、从项目 1 到项目 2 的距离等)?
  • 当你说“计算所有 loc 之间的距离”时,我不是 100% 确定你的意思。你的意思是在数组中的每个位置和每个其他位置之间?或者在某个位置和数组中的值之间?等等......你能解释一下你想要达到的目标吗?即最好的数组中最近的位置等......
  • 你想完成什么?您上面的代码在您的 for 循环中根本没有使用您的索引 i,因此它每次都会做完全相同的事情。您是否试图找到任意两者之间的最大距离?还是一分钟?或者究竟是什么?你想打印出所有距离的列表吗?
  • @Anna 用您的回复更新了问题。谢谢
  • 我认为你想要的是“画一条你走的路”并计算起点和终点之间的距离对吗?

标签: objective-c nsmutablearray cllocationmanager cllocationdistance


【解决方案1】:

试试这个:

-(void) test {
  CLLocationDistance totalKilometers = 0;
  for (int i = 0; i < (self.trackArray.count - 1); i++) // <-- count - 1
  {
     CLLocation *loc1 = [self cLLocationFromString:[self.trackArray objectAtIndex:i]];
     CLLocation *loc2 = [self cLLocationFromString:[self.trackArray objectAtIndex:(i + 1)]];

     CLLocationDistance distance = [loc1 distanceFromLocation:loc2];
     CLLocationDistance kilometers = distance / 1000.0;
     totalKilometers += kilometers;
  }
  self.distanceString = [NSString stringWithFormat:@"%f", totalKilometers];
}

-(CLLocation*) cLLocationFromString:(NSString*)string
{
    NSArray *coordinates = [string componentsSeparatedByString:@","];
    CGFloat latitude  = [[coordinates objectAtIndex:0] doubleValue];
    CGFloat longitude = [[coordinates objectAtIndex:1] doubleValue];
    return [[CLLocation alloc]  initWithLatitude:latitude longitude:longitude];
}

【讨论】:

  • 我认为这段代码可能有错误。如果 self.trackArray 的计数正好为 1,这不会导致崩溃吗?然后,您在第 0 次迭代时访问 i+1 将超出数组的范围。我认为要么 1. 如果你只有一个坐标,你什么都不做,或者 2. 你有一个“最后保存的”坐标(如果你的应用有这种功能),然后你计算两者之间的距离。
  • 在循环条件中可以看到,如果self.trackArray的count正好为1,我们就不会进入循环!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-12
  • 2021-04-05
  • 1970-01-01
  • 1970-01-01
  • 2020-12-26
  • 1970-01-01
相关资源
最近更新 更多