2012-01-31 13 views
-1

ポイントXがポイントYの半径100メートルにあるかどうかを判断する最良の方法は何ですか?ポイントが半径内にあるかどうかを確認する

CLLocationについての方法はありますか?

おかげ

+1

として距離を比較緯度/長い2間の距離を計算し、100と比較し、それはあなたのために100未満である場合にはそう見ます場合。 – samfisher

+0

CoreLocationフレームワークには、緯度と経度の座標を扱っていることを前提に、これを把握するためのメソッドが含まれています。詳細については、この記事をチェックしてください:http://stackoverflow.com/questions/9029445/how-to-find-the-nearest-100-meters-latitude-and-longitude-depending-upon-the-cur/9031836# 9031836 –

答えて

2

は、それが他のCLLocationオブジェクトからの距離を計算する

- (CLLocationDistance) distanceFromLocation:(const CLLocation *)location 

documentation

を参照してください。

0

あなたは、このメソッドを使用することができます。

// proximity distance calculation 
static const double kDegToRad = 0.017453292519943295769236907684886; 
static const double kEarthRadiusM = 6372797.560856; 

+ (double)distanceInMetersFromLoc:(CLLocation *)from toLoc:(CLLocation *)to 
{ 
    return kEarthRadiusM * [self radianArcFrom:from.coordinate to:to.coordinate]; 
} 

+ (double)radianArcFrom:(CLLocationCoordinate2D)from to:(CLLocationCoordinate2D)to 
{ 
    double latitudeArc = (from.latitude - to.latitude) * kDegToRad; 
    double longitudeArc = (from.longitude - to.longitude) * kDegToRad; 
    double latitudeHS = sin(latitudeArc * 0.5); 
    latitudeHS *= latitudeHS; 
    double lontitudeHS = sin(longitudeArc * 0.5); 
    lontitudeHS *= lontitudeHS; 
    double factor = cos(from.latitude * kDegToRad) * cos(to.latitude * kDegToRad); 
    return 2.0 * asin(sqrt(latitudeHS + factor * lontitudeHS)); 
} 

if([distanceInMetersFromLoc:location1 to:location2] < 100) 
{ 
    // your condition is satisfied. you can write your code here 
} 
関連する問題