将值数组放入 CLLocationCoordinate2D 的优雅方式

Posted

技术标签:

【中文标题】将值数组放入 CLLocationCoordinate2D 的优雅方式【英文标题】:Elegant Way to Put Array of Values Into CLLocationCoordinate2D 【发布时间】:2012-01-30 03:36:08 【问题描述】:

有没有一种优雅的方法可以从 NSDecimalNumber 值的数组中创建一个 CLLocationCoordinate2D 对象?也许是递归函数?

我是目标 C 的新手,对此有困难。

以下是我正在使用的数据结构的示例。


NSDecimalNumber 值的数组:

NSLog(@"path: %@", [path description]);

返回

path: (
    "-71.4826609644423",
    "27.7231737704478",
    "-71.4826608497223",
    "27.7231120144099",
    "-71.4826391681679",
    "27.7228678610506",
    ...
    "-71.482414263977",
    "27.7225217655116",
)

我可以像这样手动创建 CLLocationCoordinate2D 对象:

CLLocationCoordinate2D pathCoords[5]=
    CLLocationCoordinate2DMake(27.7231737704478,-71.4826609644423),
    CLLocationCoordinate2DMake(27.7231120144099,-71.4826608497223),
    CLLocationCoordinate2DMake(27.7228678610506,-71.4826391681679),
    ...
    CLLocationCoordinate2DMake(27.7225217655116,-71.482414263977),
;

欢迎任何编码建议。 谢谢!

【问题讨论】:

【参考方案1】:

我假设您已经创建了一个名为 pathCoords 大小为 5 的 CLLocationCoordinate2D 结构。

for(int i=0;i<[path count]/2;i++)
   pathCoords[i] = CLLocationCoordinate2DMake([path objectAtIndex:2*i+1], [path objectAtIndex:2*i]);

你的问题的本质不是递归的,所以如果你去递归 - 这是一个矫枉过正。

【讨论】:

感谢您的快速回复!编译器返回[path objectAtIndex:2*i+1] 的错误:Passing 'id' to parameter of incompatible type 'CLLocationDegrees' (aka 'double') 好吧,你需要正确地转换类型。我只是即时输入代码。您需要将 NSDecimalNumber 转换为双精度数。这 (google.com/…) 会有所帮助。【参考方案2】:

最终解决方案包括将 NSDecimalNumbers 类型转换为 doubleValues:

for(int i=0; i<[path count]/2; i++) 
        pathCoords[i] = CLLocationCoordinate2DMake([[path objectAtIndex:2*i+1] doubleValue], [[path objectAtIndex:2*i] doubleValue]);

【讨论】:

以上是关于将值数组放入 CLLocationCoordinate2D 的优雅方式的主要内容,如果未能解决你的问题,请参考以下文章

将值放入数组并使用 array_sum

如何将值添加到数组 - Angular2

如何将值添加到其他类的数组列表中?

将值放入地图的内部地图

我如何将值放入文本输入? [复制]

ORA-00947: 将值放入过程中的类型时没有足够的值