Style de carte personnalisé dans MapKit

Je suis à la search d'un moyen de mettre en œuvre 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 quelques time. Pour clarifier, par style, je parle de colors personnalisées et de preference aussi de fonts. Exemple de style personnalisé Google Map ci-dessous.

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

Je préférerais vraiment utiliser MapKit pour des raisons de performances, mais s'il n'est pas supporté, je suis également ouvert à l'utilisation d'autres frameworks. Ceux que j'ai vus sont MapBox et Cloudmade, et bien sûr le SDK Google Maps.

Y a-t-il un moyen de le faire avec MapKit? Si non, quelle est la meilleure façon d'y aller?

MKMapView n'expose pas les propriétés que vous souhaitez personnaliser. Le SDK Google Maps prend en charge les colors et les icons personnalisées pour les marqueurs, ce qui peut suffire à vos besoins.

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

MKMapView offre également la possibilité d'utiliser des recouvrements de carreaux personnalisés. Openstreetmap a une excellente list de servers de tuiles que vous pourriez utiliser pour get une carte personnalisée. Bien sûr, il y a toujours la possibilité de créer votre propre jeu de superposition de tuiles. Le process 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 à la carte

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

3. Conforme à MKMapViewDelegate

 class ViewController: UIViewController, MKMapViewDelegate { ... } 

4. Implémentez la méthode déléguée pour utiliser le rendu correct pour afficher les mosaïques

 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 list des servers de tuiles de openstreetmap: OpenstreetMap Tile Servers .

Par exemple, si vous souhaitez utiliser la carte stamen (qui a un style aquarelle), votre URL ressemblerait à ceci:

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

Si vous searchz une carte en mode sombre, vous allez probablement mieux avec Carto Dark: http://a.basemaps.cartocdn.com/dark_all/${z}/${x}/${y}.png .

Voir que les URL ci-dessus n'a pas de support SSL (HTTP). Par conséquent, vous devrez autoriser les requêtes HTTP non sécurisées vers cette URL spécifique en ajoutant les App Transport Security Settings l' App Transport Security Settings dans votre Info.plist. Pour plus d'informations, consultez ce lien .

Une autre option est MBXMapKit , qui est une bibliothèque MapBox construite sur MapKit d'Apple, bien qu'elle soit adaptée aux couches MapBox. Il est distinct du SDK MapBox iOS , qui est une réécriture au sol destinée à fonctionner comme MapKit mais qui ne repose pas sur celle-ci.