Cum pot deschide Hărți Google pentru instrucțiuni de ghidare folosind coordonatele de pe iPhone

voturi
18

Sunt folosind UIMapView pentru a afișa locații de pe iPhone. Vreau să fac un traseu de la locația curentă la locația de interes, nu cred că este posibil sa folosind MapKit (dar dacă este vă rugăm să informați) Așa că se va deschide fie aplicația Google Maps sau Safari pentru a afișa.

Pot face acest lucru prin specificarea coordonatelor de la (locația curentă) pentru a co-ordonate (locația de interes) Am aceste longitudini și latitudini. Sau am să utilizeze adrese de stradă?

Dacă eu trebuie să utilizeze adrese de stradă, le pot obține de la latitudine și longitudine.

Întrebat 10/10/2009 la 14:58
sursa de către utilizator
În alte limbi...                            


7 răspunsuri

voturi
75

Da, nu este posibil folosind MapKit. Ai putea încerca să formeze o adresă URL de solicitare Google Maps, care conține atât locația curentă și de destinație, care se va deschide în aplicația Google Maps cu direcțiile.

Iată un exemplu URL:

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

Iată cum ai putea pune în aplicare această modificare în codul:

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]];
Publicat 12/10/2009 la 06:37
sursa de către utilizator

voturi
4

Utilizați codul de mai jos pentru ambele Google și Apple hărți în 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)!)
        }
Publicat 04/01/2017 la 19:42
sursa de către utilizator

voturi
2

Este possible.Use MKMapView Obține coordoneze locația în care ați apăsat pe telefon și folosind cele două coordonate solicită KML fișierul din serviciul web Google, parsa KML fișier (aproximativ eșantion KML vizualizator în site - ul dezvoltator) și a afișa traseele .. ..
vă mulțumesc

Publicat 29/06/2011 la 07:23
sursa de către utilizator

voturi
1

Prima hartă de verificare Google este instalat în dispozitiv sau nu

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

Adăugați schemă interogare în .plist

<key>LSApplicationQueriesSchemes</key>
<array>
 <string>comgooglemaps</string>
</array>
Publicat 15/06/2017 la 11:06
sursa de către utilizator

voturi
1

Este posibil să se arate în traseu MapKit: Doar folosi MKPolyline

I a lua șir polilinie de la googleMapsApi. L-am analizat pe server cu php, și pentru a reveni șir finală polilyne aplicația mea.

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

Și arătând:

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

Incearca.

Publicat 28/09/2012 la 07:53
sursa de către utilizator

voturi
1

O soluție solidă este de a crea un controler de vizualizare cu un BNI, care include un UIWebView, și apoi transmite adresa URL care exercită servicii harta / direcție Google. În acest fel, păstrați utilizatorul în cerere. Această abordare nu este suficientă atunci când trăgând o pagină web, deoarece kit-ul Apple nu are suport zoom-ului. Dar, cu OS4, cel puțin utilizatorul poate dublu clic pe butonul de start și de a reveni la aplicația.

Publicat 07/05/2010 la 00:55
sursa de către utilizator

voturi
-1

Puteți trimite PIN-ul a scăzut la tine și atunci când deschideți link-ul din e-mail, acesta va afișa coordonatele.

Publicat 18/08/2011 la 06:54
sursa de către utilizator

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more