2009-10-10 3 views
18

J'utilise UIMapView pour afficher les emplacements sur l'iPhone. Je veux faire un itinéraire de l'emplacement actuel à l'endroit d'intérêt, je ne pense pas que ce soit possible en utilisant MapKit (mais s'il vous plaît en informer) Donc j'ouvrirai l'application Google Maps ou un safari pour l'afficher. Est-ce que je peux le faire en spécifiant des coordonnées de (emplacement actuel) aux coordonnées (l'endroit d'intérêt) J'ai ces longitudes et latitudes. Ou dois-je utiliser des adresses de rue?Comment puis-je ouvrir Google Maps pour les directions en utilisant les coordonnées sur l'iphone

Si je dois utiliser des adresses de rue, puis-je les obtenir à partir de la latitude et de la longitude.

Répondre

2

Il est possible.Use MKMapView Obtenir l'emplacement de coordonnées où vous avez appuyé sur le téléphone et en utilisant les deux coordonnées demandent le fichier KML du service Web de Google, analyser le fichier KML (échantillon app viewer KML dans le site de développeur) et afficher les routes ....
Merci

+0

a obtenu un exemple de projet par hasard? –

+0

Le projet KML Viewer vous aidera à dessiner l'itinéraire entre deux endroits. – iGo

74

Oui, ce n'est pas possible avec MapKit. Vous pouvez essayer de créer une demande d'URL Google Maps contenant à la fois votre position actuelle et votre destination, qui s'ouvrira dans l'application Google Maps avec les instructions.

Voici un exemple d'URL:

http://maps.google.com/?saddr=34.052222,-118.243611&daddr=37.322778,-122.031944

Voici comment vous pouvez mettre en œuvre dans votre code:

CLLocationCoordinate2D start = { 34.052222, -118.243611 }; 
CLLocationCoordinate2D destination = { 37.322778, -122.031944 };  

NSString *googleMapsURLString = [NSString stringWithFormat:@"http://maps.google.com/?saddr=%1.6f,%1.6f&daddr=%1.6f,%1.6f", 
           start.latitude, start.longitude, destination.latitude, destination.longitude]; 

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:googleMapsURLString]]; 
+1

cartes iOS6 est une blague, btw premier lien est rompu – EaterOfCode

+1

iOS6 est libéré! :) Quelqu'un a fait la version IOS6 en utilisant l'application Apple Maps pour cela? –

+0

est-il une URL à ouvrir dans le webview je veux dire que vous pensez que c'est une bonne idée si nous n'avons pas google map. – dreamBegin

1

Une solution solide est de créer un contrôleur de vue avec un NIB qui comprend un UIWebView, puis passez l'URL qui exécute les services de carte/direction de Google. De cette façon, vous gardez l'utilisateur dans l'application. Cette approche n'est pas suffisante lors de l'extraction d'une page Web, car le kit Apple ne prend pas en charge le zoom. Mais avec OS4, au moins l'utilisateur peut double-cliquer sur le bouton d'accueil et revenir à l'application.

-1

Vous pouvez envoyer l'épinglette épinglé à vous-même et lorsque vous ouvrez le lien dans un email, il affichera les coordonnées.

1

Il est possible de montrer la route à MapKit: Il suffit d'utiliser MKPolyline

Je reçois chaîne de polyligne de googleMapsApi. Je l'analyse sur le serveur avec php, et renvoie la chaîne polilyne finale à mon application.

NSMutableArray *points = [myApp decodePolyline:[route objectForKey:@"polyline"]]; 

if([points count] == 0) 
{ 
    return; 
} 

// while we create the route points, we will also be calculating the bounding box of our route 
// so we can easily zoom in on it. 
MKMapPoint northEastPoint; 
MKMapPoint southWestPoint; 

// create a c array of points. 
MKMapPoint* pointArr = malloc(sizeof(CLLocationCoordinate2D) * [points count]); 

for(int idx = 0; idx < points.count; idx++) 
{ 
    // break the string down even further to latitude and longitude fields. 
    NSString* currentPointString = [points objectAtIndex:idx]; 
    NSArray* latLonArr = [currentPointString componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@","]]; 

    CLLocationDegrees latitude = [[latLonArr objectAtIndex:0] doubleValue]; 
    CLLocationDegrees longitude = [[latLonArr objectAtIndex:1] doubleValue]; 

    // create our coordinate and add it to the correct spot in the array 
    CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(latitude, longitude); 

    MKMapPoint point = MKMapPointForCoordinate(coordinate); 

    if (idx == 0) { 
     northEastPoint = point; 
     southWestPoint = point; 
    } 
    else 
    { 
     if (point.x > northEastPoint.x) 
      northEastPoint.x = point.x; 
     if(point.y > northEastPoint.y) 
      northEastPoint.y = point.y; 
     if (point.x < southWestPoint.x) 
      southWestPoint.x = point.x; 
     if (point.y < southWestPoint.y) 
      southWestPoint.y = point.y; 
    } 
    pointArr[idx] = point; 
    _currentLenght++; 
} 

// create the polyline based on the array of points. 
self.routeLine = [MKPolyline polylineWithPoints:pointArr count:points.count]; 

_routeRect = MKMapRectMake(southWestPoint.x, southWestPoint.y, 
          northEastPoint.x - southWestPoint.x, 
          northEastPoint.y - southWestPoint.y); 

// clear the memory allocated earlier for the points 
free(pointArr); 

if (nil != self.routeLine) { 
     [self.mapView addOverlay:self.routeLine]; 
} 
[self.mapView setVisibleMapRect:_routeRect]; 

Et démontrant:

- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay 
{ 
MKOverlayView* overlayView = nil; 

if(overlay == self.routeLine) 
{ 
    self.routeLineView = [[[MKPolylineView alloc] initWithPolyline:self.routeLine] autorelease]; 
    self.routeLineView.fillColor = [UIColor blueColor]; 
    self.routeLineView.strokeColor = TICNavigatorColor; 
    self.routeLineView.lineWidth = 7; 
    self.routeLineView.lineJoin = kCGLineJoinRound; 
    self.routeLineView.lineCap = kCGLineCapRound; 

    overlayView = self.routeLineView; 
} 

return overlayView; 
} 

Donnez-lui un essai.

+0

Sa ligne juste montrant de la source à la destination. Je veux montrer la ligne comme forme de zigzag. Comme il montre une route correcte que U a besoin d'aller dans cette direction ... – Vivek2012

4

Utilisez le code ci-dessous pour les cartes de Google et Apple dans Swift 3 -

if UIApplication.shared.canOpenURL(URL(string: "comgooglemaps://")!) 
     { 
      let urlString = "http://maps.google.com/?daddr=\(destinationLocation.latitude),\(destinationLocation.longitude)&directionsmode=driving" 

      // use bellow line for specific source location 

      //let urlString = "http://maps.google.com/?saddr=\(sourceLocation.latitude),\(sourceLocation.longitude)&daddr=\(destinationLocation.latitude),\(destinationLocation.longitude)&directionsmode=driving" 

      UIApplication.shared.openURL(URL(string: urlString)!) 
     } 
     else 
     { 
      //let urlString = "http://maps.apple.com/maps?saddr=\(sourceLocation.latitude),\(sourceLocation.longitude)&daddr=\(destinationLocation.latitude),\(destinationLocation.longitude)&dirflg=d" 
      let urlString = "http://maps.apple.com/maps?daddr=\(destinationLocation.latitude),\(destinationLocation.longitude)&dirflg=d" 

      UIApplication.shared.openURL(URL(string: urlString)!) 
     } 
1

carte Première vérification de Google est installé dans le périphérique ou non

if ([[UIApplication sharedApplication] canOpenURL: 
     [NSURL URLWithString:@"comgooglemaps://"]]) { 
     [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"comgooglemaps://?saddr=23.0321,72.5252&daddr=22.9783,72.6002&zoom=14&views=traffic"]]; 
    } else { 
     NSLog(@"Can't use comgooglemaps://"); 
    } 

Ajouter un schéma de requête dans.plist

<key>LSApplicationQueriesSchemes</key> 
<array> 
<string>comgooglemaps</string> 
</array> 
Questions connexes