MKMapView纬度和经度坐标

dpa*_*ajr 6 iphone objective-c mkmapview ios ios5

我目前正在使用MKMapView,我正试图让数据出现在屏幕上.为了做到这一点,我决定改成一个小的MapDataProvider,它会抛出一个MKAnnotation对象数组 - 每个对象包含一个随机纬度和经度值的坐标.

我已经确定我的MKMapView连接到我的控制器并且MKAnnotation对象数组正确地来自我的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;
}
Run Code Online (Sandbox Code Playgroud)

小智 3

你原来的代码是这样的:

double latitude = arcrandom()%20 +50;
double longitude = -107  + arcrandom()%10;
Run Code Online (Sandbox Code Playgroud)

(事实上​​,你可能有arc4random,没有arcrandom。)


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

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

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

double latitude = arc4random()%20 +50;
double longitude = -107.0  + arc4random()%10;
Run Code Online (Sandbox Code Playgroud)


一个不相关的一点是, if CLLocationCoordinate2DIsValidsaid NO,您只是在执行 areturn而不发送回任何值(您需要根据方法声明发送回任何值)。要么做,return tempMapData;要么continue;