如何确定 GMSMarker 是不是在 GMSPolygon 内(iOS Google Map SDK)

Posted

技术标签:

【中文标题】如何确定 GMSMarker 是不是在 GMSPolygon 内(iOS Google Map SDK)【英文标题】:How to determine if an GMSMarker is inside of GMSPolygon (iOS Google Map SDK)如何确定 GMSMarker 是否在 GMSPolygon 内(iOS Google Map SDK) 【发布时间】:2014-07-18 13:49:34 【问题描述】:

我知道如何在this link 之后使用 Apple MapKit 执行此操作,但不知道如何检查位置或注释 (GMSMarker) 是否在 Google Map SDK 的 GMSPolygon 内。

【问题讨论】:

我在 javascript 中的 Google 地图中找到了如何做到这一点...来自此链接,***.com/questions/20074747/… 但没有找到适用于 ios 的任何解决方案 见***.com/questions/19587792/…。使用 GMSGeometryContainsLocation。即使没有内置的 Google 方法,您也可以使用here 所示的 CGPathContainsPoint 方法,使用多边形的坐标构建您自己的 CGPathRef。 【参考方案1】:

我得到了答案。

Google SDK 的 GMSGeometryUtils.h 文件中定义了一个内联函数:

//Returns whether |point|,CLLocationCoordinate2D lies inside of path, GMSPath
    BOOL GMSGeometryContainsLocation(CLLocationCoordinate2D point, GMSPath *path,
                                 BOOL geodesic);

它包含一个名为 GMSGeometryContainsLocation 的函数,用于确定位置点是否位于多边形路径内。

if (GMSGeometryContainsLocation(locationPoint, polygonPath, YES)) 
    NSLog(@"locationPoint is in polygonPath.");
 else 
    NSLog(@"locationPoint is NOT in polygonPath.");

Source: GMSGeometryContainsLocation

【讨论】:

这个对我不起作用,它在这里崩溃 if (GMSGeometryContainsLocation(locationPoint, polygonPath, YES)) 检查 locationPoint 和 polygonPath 的 NULL 值。【参考方案2】:

对于 Swift 4,您可以使用这个扩展:

extension GMSPolygon 

    func contains(coordinate: CLLocationCoordinate2D) -> Bool 

        if self.path != nil 
            if GMSGeometryContainsLocation(coordinate, self.path!, true) 
                return true
            
            else 
                return false
            
        
        else 
            return false
        
    

你可以像这样直接从你的多边形对象中调用它:

if gms_polygon.contains(coordinate: point) 
    //do stuff here

【讨论】:

以上是关于如何确定 GMSMarker 是不是在 GMSPolygon 内(iOS Google Map SDK)的主要内容,如果未能解决你的问题,请参考以下文章

删除谷歌地图中的自定义信息窗口后如何取消选择 GMSMarker

GMSMarker 没有 addGestureRecognizor?

从 GMSMapView 中删除所有 GMSMarker?

GMSMarker 信息窗口内容(片段)未更新

Swift 3 - 在 GMSMarker 上长按并打印其坐标(Google Maps iOS SDK)

iOS google maps sdk GMSMarker 定位