CLCircularRegion获得1英里半径范围内的随机点

问题描述:

到目前为止,我尝试生成随机的经度和纬度并使用“CLLocationCoordinate2DIsValid”验证它。但问题是我从来没有得到我指定的“CLCircularRegion”内的坐标。以下是逻辑,我写:CLCircularRegion获得1英里半径范围内的随机点

CLLocationCoordinate2D myCoordinates = { currentLocationLatitude, currentLocationLongitude }; 

    CLCircularRegion *myRegion = [[CLCircularRegion alloc] initWithCenter:myCoordinates radius:160934 identifier:@"myID"]; 


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

    double latitude = (arc4random()%20) + (myCoordinates.latitude); 
    double longitude = (myCoordinates.longitude) + arc4random()%10; 

    CLLocationCoordinate2D randomCoordinate = CLLocationCoordinate2DMake(latitude, longitude); 

     if(CLLocationCoordinate2DIsValid(randomCoordinate) != NO) 
     { 
      NSLog(@"randomCoordinate: %f %f", randomCoordinate.latitude, randomCoordinate.longitude); 
      if([myRegion containsCoordinate:randomCoordinate]) 
      { 
       NSLog(@"Point contains inside your region."); 
      } 
     } 

    } 

有什么不对的这个实施或有任何其他方式找到随机点?

您的代码是正确的。唯一的一点是,如果您将+1加到纬度,+1加上经度,则您将获得138公里的距离,但您的半径为160公里。所以,基本上你可以只添加+1到lat/long但不是10或20 ...或者你需要增加半径...使用链接来检查距离:http://www.movable-type.co.uk/scripts/latlong.html

+0

是的,但如果添加一个常数每次都有值,比如+1或-1,它会为同一个当前位置再次生成相同的一组坐标。这就是为什么我包含“arc4random()”,每次都会生成新值。但我需要一个更干净的解决方案。 – RoHaN 2014-10-02 08:24:07

+0

可能你需要的方法获得一个-1和1之间的随机双重加上经纬度,但不是随机整数。 – kabarga 2014-10-02 08:39:18

+0

嗯,我已经用这个更新了随机纬度/经度逻辑:double latitude =((arc4random()%100)+(myCoordinates.latitude * 100))/ 100; double longitude =((myCoordinates.longitude * 100) - (arc4random()%100))/ 100; – RoHaN 2014-10-02 08:43:11