2013-11-28 3 views
8

Я ищу способ реализовать пользовательский стиль карты в iOS 7, как вы можете сделать с Google Maps. Я нашел несколько сообщений о том, что это невозможно с MapKit, но они все отправлены назад. Чтобы уточнить, по стилю я говорю о пользовательских цветах и ​​предпочтительно также о шрифтах. Пример пользовательского стиля Google Map ниже.Пользовательский стиль карты в MapKit

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

Я действительно предпочитаю использовать MapKit по соображениям производительности, но если она не поддерживается Я открыт для использования других механизмов, а также. Те, что я видел, это MapBox и Cloudmade, и, конечно же, SDK Google Maps.

Есть ли способ сделать это с помощью MapKit? Если нет, то каков наилучший способ?

ответ

8

MKMapView не предоставляет объекты, которые вас интересуют при настройке. SDK Google Maps поддерживает пользовательские цвета и значки для маркеров, которых может быть достаточно для ваших целей.

Редактировать: Следите за обновлениями для iOS 11, которые могут предложить такой уровень настройки.

+0

Спасибо за ввод. Знаете ли вы, как выглядит SDK Google Maps по сравнению с собственным MapKit, когда дело доходит до производительности? –

+0

Я не авторитет, но я не могу различить существенную разницу в производительности между демонстрационным приложением Google Maps SDK и любым приложением с помощью MapKit. YMMV. – Marco

2

Другой вариант: MBXMapKit, который представляет собой библиотеку MapBox, построенную на MapKit от Apple, хотя она предназначена для слоев MapBox. Он отделен от MapBox iOS SDK, который является перезаписью с нуля, предназначенной для работы как MapKit, но не основанной на ней.

+0

Спасибо, я посмотрю. Мне нравится, что он построен на MapKit. –

15

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.

+0

Здравствуйте, @dehlen, спасибо за этот полезный ответ. Быстрый Q: где в моем MapViewController я помещаю этот код (особенно блок в пункт 2, так как я получаю красные сообщения об ошибках везде, где я их размещаю). –

+0

@DimitriT вы можете поместить его в свой файл viewDidLoad, например. – dehlen

+0

спасибо Dehlen. Если вы так любезны объяснить для новичка, как я, - какой код я должен добавить, чтобы получить класс mapViewModel, поскольку я получаю ошибку «использование неразрешенного идентификатора MapViewModel». Предполагаю, что добавляю новый быстрый файл, задаваясь вопросом, как добавить это. Просто получил вид карт и аннотаций. Любые советы по этому классу были бы большой помощью. –

Смежные вопросы