2014-10-01 75 views
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."); 
      } 
     } 

    } 

有什麼不對的這個實施或有任何其他方式找到隨機點?

回答

2

您的代碼是正確的。唯一的一點是,如果您將+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

相關問題