SDK 目前不支持填充多边形,但是有一个功能请求在此处添加它们:
https://code.google.com/p/gmaps-api-issues/issues/detail?id=5070
同时,一种选择是将多边形绘制到图像中,然后将它们添加为地面叠加层。这将是非常有限的,但可以作为临时解决方法。
另一种选择是在地图视图的顶部添加另一个视图并将多边形绘制到其中,然后在地图视图移动时更新它们。不可能将另一个视图与地图视图完美同步,因此当您平移/缩放时,您的多边形会有点滞后,但这对于您来说也可以作为临时解决方法。
更新
这些只是尝试地面覆盖方法的一些随机想法,我不确定它们是否可行,但它们可能会让您入门:
我建议将矩形的纬度/经度角转换为MKMapPoint
(使用MKMapPointForCoordinate
)。这些相当于 Google 在缩放级别 20 时的坐标系。
然后,您可以使用坐标中矩形宽度/高度的MKMapPoint
纵横比来确定地面覆盖层的纵横比UIImage
。一旦你有了纵横比,你只需要试验实际尺寸(即猜测宽度,根据纵横比计算高度)来找到一个看起来不错的。它越大,矩形的细节就越精细,但它使用的内存越多,性能可能就越慢。此外,您可能会遇到某种尺寸的硬限制——我猜UIImage
Google Maps SDK 将其转换为纹理,并且纹理在 iPhone 3GS+ 上的最大尺寸为 2048x2048。
然后,使用类似于How to setRegion with google maps sdk for iOS?计算缩放级别和中心纬度/经度。而不是地图视图的宽度/高度,您将使用UIImage
宽度/高度,并且您将使用矩形的边界而不是所需视图的边界。您也不需要从宽度和高度计算比例(因为比例应该相同) - 所以只需使用其中一个。不要创建具有缩放级别和中心纬度/经度的相机,而是将它们设置在GMSGroundOverlayOptions
. 还将地面叠加层设置anchor
为图像的中心(即 0.5、0.5)。
上面描述了如何为每个矩形添加一个 GroundOverlay。如果您有很多重叠或附近的矩形,您可以将它们组合成一个UIImage
,但这会有点复杂。