【问题标题】:iphone -- convert MKMapPoint distances to metersiphone -- 将 MKMapPoint 距离转换为米
【发布时间】:2011-11-15 19:00:25
【问题描述】:

假设我有一个正方形,它由四个 CLLocationCoordinate2D 点组成,它们的单位是纬度、经度,我想找到以米为单位的正方形面积。我将 CLLocationCoordinate2D 点转换为 MKMapPoints,然后在 X-Y 空间中找到该区域。但是,我发现的区域是以 MKMapPoint 为单位的,它不直接转换为米。如何将 MKMapPoint-space 中的这个区域转换回米?

【问题讨论】:

    标签: iphone objective-c google-maps mapkit


    【解决方案1】:

    假设地球是一个完美的球体,您可以使用Haversine formula 来计算它。

    要了解纬度/经度与米在地球环境中的工作原理,您可能会发现阅读 Nautical miles 会很有趣。

    您可以通过谷歌搜索 objective-c Haversine formula 找到更多资源和一些示例代码。

    享受吧!

    【讨论】:

      【解决方案2】:

      MapKit 函数MKMetersBetweenMapPoints 使这更容易。

      例如,如果要获取当前显示区域的面积:

      MKMapPoint mpTopLeft = mapView.visibleMapRect.origin;
      
      MKMapPoint mpTopRight = MKMapPointMake(
          mapView.visibleMapRect.origin.x + mapView.visibleMapRect.size.width, 
          mapView.visibleMapRect.origin.y);
      
      MKMapPoint mpBottomRight = MKMapPointMake(
          mapView.visibleMapRect.origin.x + mapView.visibleMapRect.size.width, 
          mapView.visibleMapRect.origin.y + mapView.visibleMapRect.size.height);
      
      CLLocationDistance hDist = MKMetersBetweenMapPoints(mpTopLeft, mpTopRight);
      CLLocationDistance vDist = MKMetersBetweenMapPoints(mpTopRight, mpBottomRight);
      
      double vmrArea = hDist * vDist;
      

      文档指出该函数“考虑了地球的曲率”。

      【讨论】:

      • 好的,谢谢,这很有帮助。但是如果我有一个不规则的多边形呢?给定顶点的多边形面积有一个公式,但我会以 MKMapPoint 为单位进行计算。我如何将它们转换为米?
      • 问题是“正方形”,所以我举了一个矩形区域的例子。即使这样,以上仍然是一个近似值,仅适用于曲率不是重要因素的相对较小的区域(尽管 distance 函数无论如何都是准确的)。对于不规则多边形,抱歉我没有一个简单的答案。尝试从this answer 开始。您必须决定要使用什么算法并从那里开始。
      • 试试这个来计算不规则多边形的面积:stackoverflow.com/questions/22038925/mkpolygon-area-calculation
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-05
      • 2015-10-18
      • 2013-04-04
      • 1970-01-01
      • 2018-04-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多