【问题标题】:Check if coordinate rectangle contains CLLocationCoordinate2D检查坐标矩形是否包含 CLLocationCoordinate2D
【发布时间】:2015-09-12 14:50:49
【问题描述】:

我正在使用适用于 iOS 的特殊 Map SDK,并且正在向地图添加自定义形状。形状总是不同的大小,可以是圆形、方形、星形等。关键是它在应用程序运行时始终是动态的。

将此形状添加到地图后,我可以访问它的属性overlayBounds,描述为:This property contains the smallest rectangle that completely encompasses the overlay.

overlay 是我添加到地图中的形状。

每当CLLocationManager 生成位置更新时,我想检查最新坐标是否在形状的overlayBounds 属性内。

当访问overlayBounds 时,它有一个ne 属性和一个sw 属性。这两个都只是CLLocationCoordinate2D's

所以,如果overlayBounds 由两个CLLocationCoordinate2D's 组成,CLLocationManager 总是更新用户的位置并给我最近的坐标(CLLocationCoordinate2D),我如何检查是否是最近的坐标在overlayBounds内?

经过大量研究,我只找到了一种可能的解决方案:https://stackoverflow.com/a/30434618/3344977

但该答案假定我的 overlayBounds 属性有 4 个坐标(CLLocationCoordinate2D's),而我只有 2 个。

【问题讨论】:

    标签: ios core-location cllocationmanager cllocationcoordinate2d


    【解决方案1】:

    您的描述似乎比实际问题更难。因此,如果我理解正确,您的问题只是检查该点是否在overlayBounds 中描述的矩形内。

    您只有 2 个点,因为它足以定义一个矩形。所以NE 和SW 是另外两个被接收为(NE.x, SE.y) 和(SE.x, NE.y) 的两个点。有了这个,您可以使用您链接的答案,或者您可以简单地构造一个MKMapRect,其中原点是NE,大小是SE-NE。所以在这种情况下,您可以简单地使用MKMapRectMake,然后使用MKMapRectContainsPoint。但是当计算大小为SE-NE 时请注意可能会产生负面结果,在这种情况下您需要为大小添加度数。即 180 到 x(纬度)和 360 到 y(经度)......

    MKMapRect rect = MKMapRectMake(NE.latitude, NE.longitude, SE.latitude-NE.latitude, SE.longitude-NE.longitude);
    if(rect.width < .0) rect.width += 180.0;
    if(rect.height < .0) rect.height += 360.0;
    BOOL pointInside = MKMapRectContainsPoint(rect, pointOnMap);
    

    这样的事情应该可以解决问题。

    现在,如果您尝试检查点是否在形状本身内部,这实际上取决于您的形状是如何定义的。如果这是某种形式的分析表示,您可能会找到一些已经为您返回值的方法,但如果不是,那么您最好的方法很可能是将形状绘制到某个画布上并在您需要的位置检查画布的颜色查看。无论如何,这里更大的问题是将点和矩形转换为笛卡尔坐标系。如果是这种情况,那么只需添加评论,我会尽力帮助您...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-24
      • 1970-01-01
      • 2021-07-29
      • 2014-03-24
      • 1970-01-01
      相关资源
      最近更新 更多