【问题标题】:CLCircularRegion get random points within 1 mile radiusCLCircularRegion 获取1英里半径内的随机点
【发布时间】:2014-11-26 09:38:17
【问题描述】:

到目前为止,我已经尝试生成随机纬度和经度并使用“CLLocationCoordinate2DIsValid”对其进行验证。但问题是我从来没有得到我指定的“CLCircularRegion”内的坐标。以下是我写的逻辑:

    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.");
            }
        }

    }

这个实现有什么问题还是有其他方法可以找到随机点?

【问题讨论】:

    标签: ios objective-c iphone cllocation clcircleregion


    【解决方案1】:

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

    【讨论】:

    • 是的没错,但是如果每次都添加一个常数值,比如 +1 或 -1,它将为相同的当前位置再次生成相同的坐标集。这就是为什么我包含“arc4random()”,每次都生成新值。但我需要一个更干净的解决方案。
    • 可能您需要该方法来获得介于 -1 和 1 之间的随机双精度,以加到纬度/经度但不是随机整数。
    • 好吧,我已经用这个更新了随机纬度/经度逻辑:双纬度 = ((arc4random()%100) + (myCoordinates.latitude * 100))/100;双经度 = ((myCoordinates.longitude * 100) - (arc4random()%100))/100;
    • 使用类似:drand48()+myCoordinates.latitude 和 drand48()+myCoordinates.longitude。 drand48() 是 0 到 1 之间的随机双精度数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-19
    • 1970-01-01
    • 1970-01-01
    • 2021-07-20
    • 2015-06-15
    • 2011-12-11
    相关资源
    最近更新 更多