Le style de carte personnalisé dans MapKit

je cherche un moyen d'implémenter un style de carte personnalisé dans iOS 7, tout comme vous pouvez le faire avec Google Maps. J'ai trouvé quelques messages disant que ce n'est pas possible avec MapKit, mais ils sont tous postés il y a un certain temps. Pour clarifier, par style je parle de couleurs personnalisées et de préférence aussi des polices. Exemple de style de carte Google personnalisé ci-dessous.

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

je je préférerais vraiment utiliser MapKit pour des raisons de performance, mais s'il n'est pas pris en charge, je suis ouvert à l'utilisation d'autres cadres. Ceux que j'ai vu sont MapBox et Cloudmade, et bien sûr le Google Maps SDK.

Existe-t-il un moyen de le faire avec MapKit? Si non, quelle est la meilleure façon de le faire?

10
demandé sur Daniel Larsson 2013-11-29 00:02:37

3 réponses

MKMapView n'expose pas les propriétés que vous souhaitez personnaliser. Le SDK GoogleMaps prend en charge les couleurs et les icônes personnalisées pour les repères, ce qui peut être suffisant pour vos besoins.

Edit: Restez à l'écoute pour iOS 11, qui peut offrir ce niveau de personnalisation.

7
répondu Marco 2017-06-22 04:35:21

MKMapView offre également la possibilité d'utiliser des tuiles sur mesure. Openstreetmap a une grande liste des serveurs de tuiles que vous pouvez utiliser pour obtenir une carte personnalisée. Bien sûr, il y a toujours la possibilité de créer votre propre jeu de superposition de tuiles. Le processus est décrit dans le wiki Openstreetmap ici.

une implémentation possible dans Swift pourrait ressembler à ceci:

1. Importer MapKit

import MapKit

2. Ajouter des superpositions map

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

3. Conform to MKMapViewDelegate

class ViewController: UIViewController, MKMapViewDelegate { ... }

4. Implémenter la méthode delegate pour utiliser le bon renderer pour afficher les tuiles

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

dans l'exemple ci-dessus, overlayURL est tiré de la liste des serveurs de tuiles trouvée sur openstreetmap:OpenstreetMap Tuile De Serveurs.

par exemple si vous souhaitez utiliser la carte stamen (qui a un style aquarelle) votre url serait ressembler à ça:

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

si vous êtes à la recherche d'une carte en mode sombre, vous préférez probablement Carto Dark: http://a.basemaps.cartocdn.com/dark_all/${z}/${x}/${y}.png.

voir que les URLs ci-dessus n'ont pas de support SSL (HTTP). Par conséquent, vous devrez autoriser les requêtes HTTP non sécurisées à cette URL spécifique en ajoutant le App Transport Security Settings dans votre Info.plist. Pour plus d'informations, jetez un oeil à ce lien.

15
répondu dehlen 2017-05-23 11:54:46

une autre option est MBXMapKit, qui est une bibliothèque MapBox construite au sommet du MapKit D'Apple, bien qu'elle soit conçue pour les couches MapBox. Elle est séparée de l' MapBox iOS SDK, qui est une réécriture de base destinée à fonctionner comme MapKit mais pas basée sur elle.

2
répondu incanus 2013-12-02 20:00:17