在自定义纬度/经度处创建新的 CLLocationCoordinate2D
Posted
技术标签:
【中文标题】在自定义纬度/经度处创建新的 CLLocationCoordinate2D【英文标题】:Creating a new CLLocationCoordinate2D at custom Latitude/Longitude 【发布时间】:2011-07-18 21:12:33 【问题描述】:我觉得问这个问题很糟糕,因为这似乎是一件很容易挂断电话的事情,但我已经查看了所有我能找到的相关资源,尝试了我见过其他人的尽可能多的解决方案组合使用,没有任何效果...
我正在尝试遍历我收到的一些 XML,并解析出 XML 中坐标的纬度和经度,并将其存储在一个数组中,然后我将从中绘制它。
我的问题是,无论我使用什么类型,如何转换它,你有什么,xcode 总是会发现一些问题。
我的 .h 文件的相关部分:
CLLocationCoordinate2D Coord;
CLLocationDegrees lat;
CLLocationDegrees lon;
@property (nonatomic, readwrite) CLLocationCoordinate2D Coord;
@property (nonatomic, readwrite) CLLocationDegrees lat;
@property (nonatomic, readwrite) CLLocationDegrees lon;
我的 .m 文件的相关部分:
else if ([elementName isEqualToString:@"Lat"])
checkpoint.lat = [[attributeDict objectForKey:@"degrees"] integerValue];
else if ([elementName isEqualToString:@"Lon"])
checkpoint.lon = [[attributeDict objectForKey:@"degrees"] integerValue];
else if ([elementName isEqualToString:@"Coord"])
checkpoint.Coord = [[CLLocation alloc] initWithLatitude:checkpoint.lat longitude:checkpoint.lon];
我得到的当前错误是:“从不兼容的类型'id''分配给'CLLocationCoordinate2D。我认为这意味着初始化函数的返回值不正确,但我不知道为什么,因为它是内置函数...
我还尝试了我看到其他人在做什么对我来说最有意义的事情:
checkpoint.Coord = CLLocationCoordinate2DMake(checkpoint.lat, checkpoint.lon);
虽然它不会立即返回错误,但当我尝试构建和运行时,它会给我:
架构 i386 的未定义符号: “_CLLocationCoordinate2DMake”,引用自: -[XMLParser parser:didStartElement:namespaceURI:qualifiedName:attributes:] 在 Checkpoint.o ld:未找到体系结构 i386 的符号 collect2: ld 返回 1 个退出状态
非常感谢任何朝着正确方向的帮助/澄清/推动,因为我现在非常没有想法。
【问题讨论】:
问这么简单的问题永远不会感到难过;这就是我们来这里的目的。 【参考方案1】:对您来说最有意义的事情 (CLLocationCoordinate2DMake) 是正确的。您只是忘记在项目中包含 CoreLocation 框架。
而且,正如其他人所指出的,文件中的纬度/经度可能不是整数。
【讨论】:
嗯,有道理,我认为这与缺少框架有关 >. 【参考方案2】:我所做的是: 首先创建一个 CLLocationCoordinate2D:
CLLocationCoordinate2D c2D = CLLocationCoordinate2DMake(CLLocationDegrees latitude, CLLocationDegrees longitude);
我的经纬度是双重类型。
在您的 Imports 中确保 Mapkit 库已导入。
#import <MapKit/MapKit.h>
【讨论】:
【参考方案3】:这应该可行。
CLLocationCoordinate2D center;
.....
else if ([elementName isEqualToString:@"Lat"])
center.latitude = [[attributeDict objectForKey:@"degrees"] doubleValue];
else if ([elementName isEqualToString:@"Lon"])
center.longitude = [[attributeDict objectForKey:@"degrees"] doubleValue];
【讨论】:
嘿 Kal,感谢您的快速响应,但不幸的是,我遇到了与 Joris 的建议相同的错误集。如果您(或 Joris)对原因有任何想法,我很乐意给他们一个机会。谢谢!【参考方案4】:尝试改变
[[attributeDict objectForKey:@"degrees"] integerValue]
进入
[[attributeDict objectForKey:@"degrees"] floatValue]
还有
checkpoint.Coord = [[CLLocation alloc] ....
不可能正确,因为您将 Coord 定义为 CLLocationCoordinate2D,即
不是 CLLocation 不是类而是结构你应该做的是:
CLLocationCoordinate2D coordinate;
else if ([elementName isEqualToString:@"Lat"])
coordinate.latitude = [[attributeDict objectForKey:@"degrees"] floatValue];
else if ([elementName isEqualToString:@"Lon"])
coordinate.longitude = [[attributeDict objectForKey:@"degrees"] floatValue];
checkpoint.Coord = coordinate;
【讨论】:
嗨,乔里斯,感谢您的快速回复!我很欣赏你的澄清,这很有意义。我尝试了您建议的更改,最终得到“表达式不可分配”错误。我的代码与您建议的相同,我真的不知道为什么 xcode 不批准。如果有任何方法可以给您更多信息,请告诉我,我将编辑主要问题!谢谢! 意识到这已经很老了,但是 CLLocationDegrees 类型(由 CLLocationCoordinate2d 组成)是双精度而不是浮点...取决于您需要多少分辨率,您想改为调用 doubleValue浮动值。以上是关于在自定义纬度/经度处创建新的 CLLocationCoordinate2D的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 iPhone 的 CLLocation 类将纬度和经度分配给变量?