如何确定一个GMSMarker是否在GMSPolygon内部(iOS Google地图SDK)

5

我知道如何使用Apple MapKit实现这一点,按照此链接进行操作。但是对于如何检查位置或注释(GMSMarker)是否在Google Map SDK中的GMSPolygon中,我没有任何想法。


我在Google Maps的JavaScript中找到了如何做到这一点...从这个链接,https://dev59.com/IHnZa4cB1Zd3GeqPolFZ 但是没有找到iOS的任何解决方案。 - Nitesh Borad
请参考https://dev59.com/tHjZa4cB1Zd3GeqPdWOR。使用GMSGeometryContainsLocation方法。即使没有这个内置的Google方法,您也可以使用[此处](https://dev59.com/Y2Mk5IYBdhLWcg3wvAVo)所示的CGPathContainsPoint方法来构建自己的CGPathRef,使用多边形的坐标。 - user467105
2个回答

16

我得到了答案。

在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.");
}

来源:GMSGeometryContainsLocation


这个对我不起作用,它在这里崩溃了 if (GMSGeometryContainsLocation(locationPoint, polygonPath, YES)) { - Bangalore
检查 locationPoint 和 polygonPath 是否为 NULL 值。 - Nitesh Borad

4

对于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
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接