MapKit中的自定义地图样式

时间:2013-11-28 20:02:38

标签: ios google-maps mapkit mapbox cloudmade

我正在寻找一种在iOS 7中实现自定义地图样式的方法,就像使用Google Maps一样。我发现一些帖子说这对MapKit来说是不可能的,但是它们都被发布了一段时间。为了澄清,按照风格我说的是自定义颜色,最好也是字体。下面是自定义Google地图样式的示例。

http://www.servendesign.com/wp-content/uploads/2011/12/zaarley-custom-google-maps.jpg

出于性能原因,我更倾向于使用MapKit,但如果不支持我,我也愿意使用其他框架。我见过的是MapBox和Cloudmade,当然还有Google Maps SDK。

有没有办法用MapKit做到这一点?如果没有,最好的方法是什么?

3 个答案:

答案 0 :(得分:17)

MKMapView还提供了使用自定义图块叠加的可能性。 Openstreetmap有一个很好的磁贴服务器列表,您可以使用它来获取自定义映射。当然,总有可能创建自己的图块叠加集。该过程在Openstreetmap wiki here中进行了描述。

Swift中可能的实现可能如下所示:

<强> 1。导入MapKit

import MapKit

<强> 2。添加叠加层以映射

let overlayPath = self.mapViewModel.overlayURL
let overlay = MKTileOverlay(URLTemplate: overlayPath)
overlay.canReplaceMapContent = true
self.mapView.addOverlay(overlay)

第3。符合MKMapViewDelegate

class ViewController: UIViewController, MKMapViewDelegate { ... }

<强> 4。实现委托方法以使用正确的渲染器来显示切片

func mapView(mapView: MKMapView, rendererForOverlay overlay: MKOverlay) -> MKOverlayRenderer {
    guard let tileOverlay = overlay as? MKTileOverlay else {
        return MKOverlayRenderer(overlay: overlay)
    }
    return MKTileOverlayRenderer(tileOverlay: tileOverlay)
}

在上面的例子中,overlayURL取自openstreetmap上的tile服务器列表:OpenstreetMap Tile Servers

例如,如果您想使用雄蕊地图(具有水彩风格),您的网址将如下所示:

let overlayURL = "http://tile.stamen.com/watercolor/{z}/{x}/{y}.jpg"

如果您正在搜索暗模式地图,那么最好使用Carto Dark:http://a.basemaps.cartocdn.com/dark_all/${z}/${x}/${y}.png

请参阅上述URL没有SSL支持(HTTP)。因此,您需要通过在Info.plist中添加App Transport Security Settings来允许对此特定URL的不安全HTTP请求。有关详细信息,请查看this link

答案 1 :(得分:7)

MKMapView不会公开您感兴趣的自定义属性。 Google Maps SDK支持标记的自定义颜色和图标,这可能足以满足您的需要。

编辑:请继续关注iOS 11,它可能提供此级别的自定义。

答案 2 :(得分:2)

另一个选项是MBXMapKit,它是在Apple的MapKit上构建的MapBox库,尽管它适用于MapBox图层。它与MapBox iOS SDK是分开的,这是一个基本的重写,意味着像MapKit一样工作,但不是基于它。