MKMapView также предлагает возможность использования пользовательских наложений для плитки. В Openstreetmap есть отличный список серверов, которые вы можете использовать для получения пользовательской карты. Конечно, всегда есть возможность создать свой собственный набор наложения черепицы. Этот процесс описан в вики Openstreetmap 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: 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
.
Убедитесь, что указанные выше URL-адреса не поддерживают SSL (HTTP).Поэтому вам нужно будет разрешить ненадежные HTTP-запросы к этому конкретному URL-адресу, добавив App Transport Security Settings
в ваш Info.plist. Для получения дополнительной информации см. this link.
Спасибо за ввод. Знаете ли вы, как выглядит SDK Google Maps по сравнению с собственным MapKit, когда дело доходит до производительности? –
Я не авторитет, но я не могу различить существенную разницу в производительности между демонстрационным приложением Google Maps SDK и любым приложением с помощью MapKit. YMMV. – Marco