以自定义纬度/经度创建新的CLLocationCoordinate2D

时间:2011-07-18 21:12:33

标签: objective-c ios ios4 mapkit

我觉得这个问题很糟糕,因为看起来这么简单,但是我已经查看了所有相关的资源,尝试了很多我见过的解决方案组合使用,没有任何工作......

我正在尝试迭代我收到的一些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。我认为这意味着初始化函数的返回值不正确,但我不知道为什么因为它的a内置功能...

我也尝试了一些对我来说最有意义的事情,我看到别人在做什么:

checkpoint.Coord = CLLocationCoordinate2DMake(checkpoint.lat, checkpoint.lon);

虽然这不会立即返回错误,但当我尝试构建并运行它时,我会:

  

架构i386的未定义符号:     “_CLLocationCoordinate2DMake”,引自:          - Checkpoint.o中的[XMLParser解析器:didStartElement:namespaceURI:qualifiedName:attributes:]   ld:找不到架构i386的符号   collect2:ld返回1退出状态

在正确的方向上任何帮助/澄清/推动都会非常感激,因为我现在非常缺乏想法。

4 个答案:

答案 0 :(得分:49)

对您来说最有意义的(CLLocationCoordinate2DMake)是正确的。您只是忘了在项目中包含CoreLocation框架。

而且,正如其他人所指出的那样,文件中的纬度/经度可能不是整数。

答案 1 :(得分:7)

我做的是: 首先创建一个CLLocationCoordinate2D:

CLLocationCoordinate2D c2D = CLLocationCoordinate2DMake(CLLocationDegrees latitude, CLLocationDegrees longitude); 

我的纬度和经度是双重类型。

在Imports中确保导入Mapkit库。

#import <MapKit/MapKit.h>

答案 2 :(得分:4)

这应该有用。

CLLocationCoordinate2D center;
.....
else if ([elementName isEqualToString:@"Lat"]) {
    center.latitude = [[attributeDict objectForKey:@"degrees"] doubleValue];
}
else if ([elementName isEqualToString:@"Lon"]) {
    center.longitude = [[attributeDict objectForKey:@"degrees"] doubleValue];
}

答案 3 :(得分:2)

尝试更改

[[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;