gpt4 book ai didi

iphone - MKMapView 经纬度坐标

转载 作者:可可西里 更新时间:2023-11-01 03:57:27 27 4
gpt4 key购买 nike

我目前正在使用 MKMapView,我正在尝试让数据显示在屏幕上。为实现这一点,我决定调整一个小型 MapDataProvider,它吐出一个 MKAnnotation 对象数组 - 每个对象都包含一个具有随机纬度和经度值的坐标。

我已经确保我的 MKMapView 连接到我的 Controller 并且 MKAnnotation 对象数组正确地来 self 的 MapDataProvider...但是出于某种原因..当我尝试在北美指定坐标时(例如. 48, -84)..MKMapView 上什么也没有出现。

在尝试之后,我发现任何小于 0 的经度值都会给我带来这个问题。

我已尝试验证集合中每个 MKAnnotation 对象的坐标值,但 CLLocation2DIsValue() 一直返回 false。

问题:

我可以为 CLLocationCoordinate2D 输入什么范围的纬度和经度值,以便我的图钉显示在北美?

为了提供更多上下文,下面是在 MapDataProvider 中调用的方法:

+(NSArray *) getMockMapData{

NSMutableArray *tempMapData = [[NSMutableArray alloc] initWithCapacity:15];

for (int i=0; i< 15; i++) {

double latitude = rand()%20 +50;
double longitude = -107 + rand()%10;

CLLocationCoordinate2D coord = CLLocationCoordinate2DMake(latitude, longitude);

if(CLLocationCoordinate2DIsValid(coord) == NO)
continue;

[tempMapData addObject:[MockMapData
dataForValues:[@"Item " stringByAppendingString:[[NSNumber numberWithInt:i] description]]
subTitle:[@"Item " stringByAppendingString:[[NSNumber numberWithInt:i]description]]
coordinate:coord]];
}
return tempMapData;
}

最佳答案

你原来的代码是这样的:

double latitude = arcrandom()%20 +50;
double longitude = -107 + arcrandom()%10;

(实际上,您可能有 arc4random,而不是 arcrandom。)


arc4random 函数返回一个无符号整数值。

从该值中减去一个整数 (-107) 会导致溢出,从而得到类似 4294967189 的值。那肯定是无效的经度。

不要切换到 rand(文档中说这是一个“错误的随机数生成器”),而是使用 arc4random(我认为这是首选)并强制 float 通过编写 -107.0 而不是 -107 来计算点:

double latitude = arc4random()%20 +50;
double longitude = -107.0 + arc4random()%10;


一个不相关的点是,如果 CLLocationCoordinate2DIsValidNO,你只是在做一个 return 而没有发回任何值(你需要根据方法声明)。 return tempMapData;continue;

关于iphone - MKMapView 经纬度坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9780238/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com