【问题标题】:Determine if Point is within radius确定点是否在半径内
【发布时间】:2012-01-31 16:44:36
【问题描述】:

确定点 X 是否在点 Y 的 100 米半径内的最佳方法是什么?

有关于 CLLocation 的方法吗?

谢谢

【问题讨论】:

  • 计算两个纬度/经度之间的距离并与 100 进行比较,看看它是否小于 100 适合您的情况。
  • CoreLocation 框架包含解决此问题的方法,假设您使用的是纬度和经度坐标。查看这篇文章了解更多信息:stackoverflow.com/questions/9029445/…

标签: iphone objective-c


【解决方案1】:

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

documentation

它计算与另一个CLLocation 对象的距离。

【讨论】:

    【解决方案2】:

    你可以使用这个方法:

    // 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
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多