2024-07-03 02:45:56
这位朋友你好,非常抱歉没有把问题描述清楚,详情应该是一个nsarray存储了@“31.xxx,-117.xxx",@“32.xxx,-118.xxx"这样格式的坐标,请问怎样把它存到CLLocationCoordinate2D poiCoords[]这个数组里面,CLLocationCoordinate2D被定义为如下形式
struct {
CLLocationDegrees latitude;
CLLocationDegrees longitude;
} CLLocationCoordinate2D;
如果大大的NSArray中是用NSString对象来储存坐标值,那我们需要做的是根据数组中的每个NSString对象的内容来转换成一对double值。因为再CLLocation.h仲 CLLocationDegrees的定义是:
typedef double CLLocationDegrees;
我们可以将这个转换用一个方程来完成:
CLLocationCoordinate2D convert(NSString *coordStr){
NSString *nstr;
NSArray *comps;
double d1, d2;
CLLocationCoordinate2D coord;
comps = [coordStr componentsSeparatedByString:@","];
nstr = [comps objectAtIndex:0];
d1 = nstr.doubleValue;
nstr = [comps objectAtIndex:1];
d2 = nstr.doubleValue;
coord.latitude = d1;
coord.longitude = d2;
return coord;
}
测试:
int main(){
@autoreleasepool {
NSArray *array;
array = @[@"31.323,-12.039", @"32.xxx,-118.xxx"];
for (NSString *str in array) {
CLLocationCoordinate2D coord;
coord = convert(str);
printf("%.3f, %.3f\n", coord.latitude, coord.longitude);
}
return 0;
}
}
打印结果:
31.323, -12.039
32.000, -118.000
又或者,可以利用CGPoint 或者CGSize的一些帮助方程来进行转换:
for (NSString *str in array) {
CGPoint p;
CLLocationCoordinate2D coord;
p = CGPointFromString([NSString stringWithFormat:@"{%@}", str]);
coord.latitude = p.x;
coord.longitude = p.y;
printf("%.3f, %.3f\n", coord.latitude, coord.longitude);
}
当然,你还要一个一个的CLLocationCoordinate2D 放进你的C 数组中。NSArray 可以用-getObjects:方法将自身的元素放入一个C数组中。但该数组的元素的类型与NSArray的元素的类型是一致的,换句话,他是一个: __unsafe_unretained NSString **
希望对你有帮助