2009-10-10 24 views
18

Estoy usando UIMapView para mostrar las ubicaciones en el iPhone. Quiero hacer una ruta desde la ubicación actual hasta la ubicación de interés, no creo que sea posible utilizar MapKit (pero si es así, infórmenos). De modo que abriré la aplicación Google Maps o safari para mostrarla.¿Cómo abro Google Maps para obtener instrucciones usando las coordenadas en el iphone?

¿Puedo hacer esto especificando coordenadas desde (ubicación actual) a coordenadas (la ubicación de interés) Tengo estas longitudes y latitudes. ¿O tengo que usar direcciones de calles?

Si tengo que usar direcciones de calles, ¿puedo obtenerlas a partir de la latitud y la longitud?

Respuesta

2

Es possible.Use MKMapView obtener la ubicación de coordenadas en el que ha tocado en el teléfono y el uso de las dos coordenadas solicitar el archivo KML del servicio web Google, analizar el archivo KML (muestra aplicación KML espectador en el sitio del desarrollador) y mostrar las rutas ....
Gracias

+0

tiene un proyecto de ejemplo por casualidad? –

+0

El proyecto KML Viewer lo ayudará a trazar la ruta entre dos lugares. – iGo

74

Sí, no es posible usar MapKit. Puede tratar de crear una solicitud de URL de Google Maps que contenga tanto su ubicación actual como su destino que se abrirá en la aplicación Google Maps con las instrucciones.

He aquí un ejemplo de URL:

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

Así es como se podría implementar esto en su código:

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

mapas iOS6 es una broma, por cierto primer eslabón se rompe – EaterOfCode

+1

IOS6 se libera! :) ¿Alguien hizo la versión IOS6 usando la aplicación Apple Maps para esto? –

+0

¿Hay alguna url para abrir en la vista web? Quiero decir, ¿crees que es una gran idea si no tenemos el mapa de Google. – dreamBegin

1

Una solución sólida es crear un controlador de vista con una punta que incluye una UIWebView, y luego pase la URL que ejerce los servicios de mapa/dirección de Google. De esta manera, mantienes al usuario en la aplicación. Este enfoque no es suficiente cuando se abre una página web, porque el kit de Apple no admite el acercamiento. Pero con OS4, al menos el usuario puede hacer doble clic en el botón de inicio y volver a la aplicación.

-1

Puede enviarse por correo electrónico el pin caído y al abrir el enlace en el correo electrónico, se muestran las coordenadas.

1

Es posible mostrar la ruta en MapKit: Sólo tiene que utilizar MKPolyline

consigo cadena de polilínea a partir de googleMapsApi. Lo analizo en el servidor con php y devuelvo la cadena polilyne final a mi aplicación.

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]; 

y mostrando:

- (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; 
} 

darle una oportunidad.

+0

Su línea Just Showing solo de Source a Destination. Quiero mostrar line like Zigzag Shape. Al igual que muestra una ruta adecuada que U necesita ir en esta dirección ... – Vivek2012

4

Use el código de abajo para ambos mapas de Google y Apple en 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

Primer mapa verificación de Google está instalada en el dispositivo o no

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://"); 
    } 

Añadir esquema de consulta en.plist

<key>LSApplicationQueriesSchemes</key> 
<array> 
<string>comgooglemaps</string> 
</array> 
Cuestiones relacionadas