【问题标题】:How to know whether MKMapView visibleMapRect contains a Coordinate?如何知道 MKMapView visibleMapRect 是否包含坐标?
【发布时间】:2013-04-26 14:57:02
【问题描述】:

如果我有一个 MKMapView 和一个 CLLocationCoordinate2D 你如何测试地图的可见区域是否包含坐标?

【问题讨论】:

    标签: ios ios5 mkmapview mapkit


    【解决方案1】:

    最快的方法是使用内置的 Apple 功能,这将使这类事情变得超级快!

    if(MKMapRectContainsPoint(mapView.visibleMapRect, MKMapPointForCoordinate(coordinate)))
    {
        //Do stuff
    }
    

    坐标是您的 CLLocation2D。

    这将比使用批量 if 语句计算坐标要快得多。原因是 Apple 使用四叉树并且可以为您进行快速查找。

    【讨论】:

      【解决方案2】:

      Swift 3 兼容

      如果你经常使用地图,我建议你创建一个这样的扩展:

      extension MKMapView {
          
          func contains(coordinate: CLLocationCoordinate2D) -> Bool {
              return MKMapRectContainsPoint(self.visibleMapRect, MKMapPointForCoordinate(coordinate))
          }
          
      }
      

      那么就可以在任何地方使用,例如:

      func mapView(_ mapView: MKMapView, regionDidChangeAnimated animated: Bool) {
          if mapView.contains(coordinate: mapView.centerCoordinate) {
             // do stuff
          }
      }
      

      这样你就保留了代码:

      • 更易于维护:如果 Apple 决定更改其框架,您将能够在单点快速重构更改代码
      • 更易测试
      • 更具可读性和简洁性

      【讨论】:

        【解决方案3】:

        swift 5.1 我的两分钱

          extension MKMapView {
        
              func contains(coordinate: CLLocationCoordinate2D) -> Bool {
                return self.visibleMapRect.contains(MKMapPoint(coordinate))
            }
        
         }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-08-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多