L' Apple Developer Documentation (le lien est maintenant mort) explique que si vous placez un lien dans une page Web et que vous cliquez dessus tout en utilisant Mobile Safari sur l'iPhone, l'application Google Maps fournie en standard avec l'iPhone sera lancée.
Comment puis-je lancer la même application Google Maps avec une adresse spécifique à partir de ma propre application iPhone native (c'est-à-dire pas une page Web via Mobile Safari) de la même manière que si j'appuie sur une adresse dans Contacts pour lancer la carte?
NOTE: Ceci ne fonctionne que sur l'appareil lui-même. PAS DANS LE SIMULATEUR.
Pour iOS 5.1.1 et inférieur, utilisez la méthode UIApplication
de UIApplication
. Il effectuera la réinterprétation d'URL magique normale de l'iPhone. alors
[someUIApplication openURL:[NSURL URLWithSsortingng:@"http://maps.google.com/maps?q=London"]]
devrait invoquer l'application Google Maps.
À partir d'iOS 6, vous appelez l'application Maps d'Apple. Pour cela, configurez un object MKMapItem
avec l'location que vous souhaitez afficher, puis envoyez-lui le message openInMapsWithLaunchOptions
. Pour commencer à l'location actuel, essayez:
[[MKMapItem mapItemForCurrentLocation] openInMapsWithLaunchOptions:nil];
Vous aurez besoin d'être lié à MapKit pour cela (et il vous requestra l'access à la localization, je crois).
Exactement. Le code dont vous avez besoin pour cela est quelque chose comme ça:
UIApplication *app = [UIApplication sharedApplication]; [app openURL:[NSURL URLWithSsortingng: @"http://maps.google.com/maps?q=London"]];
car selon la documentation , UIApplication est uniquement disponible dans le délégué d'application, sauf si vous appelez sharedApplication.
Pour ouvrir Google Maps à des coordonnées spécifiques, essayez ce code:
NSSsortingng *latlong = @"-56.568545,1.256281"; NSSsortingng *url = [NSSsortingng ssortingngWithFormat: @"http://maps.google.com/maps?ll=%@", [latlong ssortingngByAddingPercentEscapesUsingEncoding:NSUTF8SsortingngEncoding]]; [[UIApplication sharedApplication] openURL:[NSURL URLWithSsortingng:url]];
Vous pouvez replace la string latlong par l'location actuel de CoreLocation.
Vous pouvez également spécifier le niveau de zoom en utilisant le drapeau ("z"). Les valeurs sont 1-19. Voici un exemple:
[[UIApplication sharedApplication] openURL: [NSURL URLWithSsortingng: @ " http://maps.google.com/maps?z=8 "]];
Il existe également l'application App Store Google Maps, documentée sur https://developers.google.com/maps/documentation/ios/urlscheme
Donc, vous devez d'abord vérifier qu'il est installé:
[[UIApplication sharedApplication] canOpenURL: [NSURL URLWithSsortingng:@"comgooglemaps://"]];
Et ensuite, vous pouvez replace http://maps.google.com/maps?q=
avec comgooglemaps://?q=
.
Voici la reference du schéma d'URL Apple pour les liens cartocharts: http://developer.apple.com/iphone/library/featuredarticles/iPhoneURLScheme_Reference/Articles/MapLinks.html
Les règles pour créer un lien de carte valide sont les suivantes:
- Le domaine doit être google.com et le sous-domaine doit être map ou ditu.
- Le path doit être /, / maps, / local ou / m si la requête contient le site en tant que key et local en tant que valeur.
- Le path ne peut pas être / maps / *.
- Tous les parameters doivent être pris en charge. Voir le Tableau 1 pour la list des parameters pris en charge **.
- Un paramètre ne peut pas être q = * si la valeur est une URL (donc KML n'est pas détecté).
- Les parameters ne peuvent pas inclure view = text ou dirflg = r.
** Voir le lien ci-dessus pour la list des parameters supportés.
<key>LSApplicationQueriesSchemes</key> <array> <ssortingng>comgooglemaps</ssortingng> </array>
if ([[UIApplication sharedApplication] canOpenURL: [NSURL URLWithSsortingng:@"comgooglemaps:"]]) { NSSsortingng *urlSsortingng = [NSSsortingng ssortingngWithFormat:@"comgooglemaps://?ll=%@,%@",destinationLatitude,destinationLongitude]; [[UIApplication sharedApplication] openURL:[NSURL URLWithSsortingng:urlSsortingng]]; } else { NSSsortingng *ssortingng = [NSSsortingng ssortingngWithFormat:@"http://maps.google.com/maps?ll=%@,%@",destinationLatitude,destinationLongitude]; [[UIApplication sharedApplication] openURL:[NSURL URLWithSsortingng:ssortingng]]; }
if UIApplication.sharedApplication().canOpenURL(NSURL(ssortingng: "comgooglemaps:")!) { var urlSsortingng = "comgooglemaps://?ll=\(destinationLatitude),\(destinationLongitude)" UIApplication.sharedApplication().openURL(NSURL(ssortingng: urlSsortingng)!) } else { var ssortingng = "http://maps.google.com/maps?ll=\(destinationLatitude),\(destinationLongitude)" UIApplication.sharedApplication().openURL(NSURL(ssortingng: ssortingng)!) }
if UIApplication.shared.canOpenURL(URL(ssortingng: "comgooglemaps:")!) { var urlSsortingng = "comgooglemaps://?ll=\(destinationLatitude),\(destinationLongitude)" UIApplication.shared.openURL(URL(ssortingng: urlSsortingng)!) } else { var ssortingng = "http://maps.google.com/maps?ll=\(destinationLatitude),\(destinationLongitude)" UIApplication.shared.openURL(URL(ssortingng: ssortingng)!) }
Pour la question de téléphone, testez-vous sur le simulateur? Cela ne fonctionne que sur l'appareil lui-même.
En outre, openURL renvoie un bool, que vous pouvez utiliser pour vérifier si le périphérique que vous exécutez prend en charge la fonctionnalité. Par exemple, vous ne pouvez pas passer d'appels sur un iPod Touch 🙂
"g" change en "q"
[[UIApplication sharedApplication] openURL:[NSURL URLWithSsortingng: @"http://maps.google.com/maps?q=London"]]
Si vous avez encore des problèmes, cette video montre comment get "Mes maps" de google pour apparaître sur l'iphone – vous pouvez alors prendre le lien et l'envoyer à n'importe qui et cela fonctionne.
Pour passer à la carte Google, utilisez cette API et envoyez la latitude et la longitude
NSSsortingng* addr = nil; addr = [NSSsortingng ssortingngWithFormat:@"http://maps.google.com/maps?daddr=%1.6f,%1.6f&saddr=Posizione attuale", destinationLat,destinationLong]; NSURL* url = [[NSURL alloc] initWithSsortingng:[addr ssortingngByAddingPercentEscapesUsingEncoding:NSUTF8SsortingngEncoding]]; [[UIApplication sharedApplication] openURL:url];
Si vous avez besoin de plus de flexibilité que le format d'URL de Google vous donne ou si vous souhaitez intégrer une carte dans votre application au lieu de lancer l'application cartographique, vous findez un exemple sur https://sourceforge.net/projects/quickconnect .
Si vous avez besoin de plus de flexibilité que le format d'URL de Google vous donne ou si vous souhaitez intégrer une carte dans votre application au lieu de lancer l'application cartographique, voici un exemple .
Il vous fournira même le code source pour faire tout l'enrobage.
iPhone4 iOS 6.0.1 (10A523)
Pour Safari et Chrome. Les deux dernières versions jusqu'à maintenant (2013-Jun-10th).
Le schéma d'URL ci-dessous fonctionne également. Mais dans le cas de Chrome ne fonctionne que dans la page ne fonctionne pas à partir de la barre d'adresse.
maps: q = GivenTitle @ latitude, longtitude
**Getting Directions between 2 locations** NSSsortingng *googleMapUrlSsortingng = [NSSsortingng ssortingngWithFormat:@"http://maps.google.com/?saddr=%@,%@&daddr=%@,%@", @"30.7046", @"76.7179", @"30.4414", @"76.1617"]; [[UIApplication sharedApplication] openURL:[NSURL URLWithSsortingng:googleMapUrlSsortingng]];