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
是的,但如果添加一个常数每次都有值,比如+1或-1,它会为同一个当前位置再次生成相同的一组坐标。这就是为什么我包含“arc4random()”,每次都会生成新值。但我需要一个更干净的解决方案。 – RoHaN 2014-10-02 08:24:07
可能你需要的方法获得一个-1和1之间的随机双重加上经纬度,但不是随机整数。 – kabarga 2014-10-02 08:39:18
嗯,我已经用这个更新了随机纬度/经度逻辑:double latitude =((arc4random()%100)+(myCoordinates.latitude * 100))/ 100; double longitude =((myCoordinates.longitude * 100) - (arc4random()%100))/ 100; – RoHaN 2014-10-02 08:43:11