MapKit中的自定义地图样式

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

http://sofzh.miximages.com/ios/zaarley-custom-google-maps.jpg

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

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

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

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

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

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 。

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

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

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

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

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