如何在Google Maps SDK for iOS中绘制填充多边形

时间:2013-03-25 13:19:53

标签: polygon google-maps-sdk-ios

我想在iPhone上使用Google地图(版本1.1.1,最后一个)绘制一个填充多边形。

任何人都知道如何在ios上做到这一点:

(我在Android上的代码)

mMap.addPolygon(new PolygonOptions()
            .addAll(latLngList)
            .fillColor(Color.BLUE)
            .strokeColor(Color.RED)
            .strokeWidth(3));

此致

PS:如果你有很多解决方案,请记住我有很多要绘制的多边形。

1 个答案:

答案 0 :(得分:1)

SDK目前不支持填充多边形,但是有一个功能请求可以在此处添加:

https://code.google.com/p/gmaps-api-issues/issues/detail?id=5070

与此同时,一个选项可能是将多边形绘制到图像中,然后将它们添加为地面叠加层。这将是非常有限的,但可能作为临时解决方法。

另一种选择是在地图视图的顶部添加另一个视图并将多边形绘制到其中,然后在地图视图移动时更新它们。无法将另一个视图与地图视图完美同步,因此当您平移/缩放时,多边形将稍微滞后,但这对您来说也可以作为临时解决方法。

<强>更新

这些只是一些尝试地面覆盖方法的随机想法,我不确定它们是否会起作用,但它们可能会让你开始:

我建议将矩形的纬度/经度角转换为MKMapPoint(使用MKMapPointForCoordinate)。这些相当于缩放级别为20的Google坐标系。

然后,您可以使用MKMapPoint坐标中矩形的宽度/高度的宽高比来确定地面叠加层UIImage的宽高比。一旦你有宽高比,你只需要试验实际尺寸(即猜测宽度,从纵横比计算高度),找到一个看起来不错的尺寸。它越大,矩形的细节就越细,但它将使用的内存越多,而且性能可能越慢。此外,您可能会达到某种规模的硬限制 - 我猜测UIImage会被Google Maps SDK转换为纹理,而且iPhone 3GS +上的纹理最大尺寸为2048x2048。

然后,使用与How to setRegion with google maps sdk for iOS?类似的内容来计算缩放级别和中心纬度/经度。您将使用UIImage宽度/高度而不是地图视图宽度/高度,而是使用矩形的边界而不是所需视图的边界。您也不需要从宽度和高度计算比例(因为比例应该相同) - 所以只需使用其中一个。不是使用缩放级别和中心lat / lon创建摄像机,而是在GMSGroundOverlayOptions上设置它们。同时将地面叠加层的anchor设置为图像的中心(即0.5,0.5)。

以上描述了如何为每个矩形添加一个GroundOverlay。如果你有很多重叠或附近的矩形,你可以把它们组合成一个UIImage,但这会有点复杂。