Başlangıç ​​Adresi olarak Akım Konum Directions iPhone Maps çağırmak için nasıl

oy
72

Ben arayarak iPhone haritalar uygulamasını başlatmak için mümkün olduğunu biliyorum openURLparametrelerle bir google harita URL'yi saddrve daddrkonum dizeleri ya da (aşağıdaki örneğe bakın) Lat / Long ile.

Ama başlangıç adresi yapmak mümkün olup olmadığını merak ediyorum Mevcut Konum Ben kullanabilmesi için harita imi Haritalar uygulamasının konumu işleme kodu. Benim Google arama oldukça sonuçsuz olmuştur.

Örneğin:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat: @http://maps.google.com/maps?saddr=%@&daddr=%@, myLatLong, latlong]]];

Yerine Geçerli konum imini çağırmak için bir şey ile hariç myLatLong.

Oluştur 23/02/2009 saat 08:11
kaynak kullanıcı
Diğer dillerde...                            


16 cevaplar

oy
133

Ön iOS 6

Sokak adresi veya yere oradan rota sizi, hiç Maps Geçerli konum bilgisini almak için Çekirdek Konum kullanmak gerekir, ama bu enlem / boylam çiftiyle, alabilirsiniz. böylece gibi:

CLLocationCoordinate2D currentLocation = [self getCurrentLocation];
// this uses an address for the destination.  can use lat/long, too with %f,%f format
NSString* address = @"123 Main St., New York, NY, 10001";
NSString* url = [NSString stringWithFormat: @"http://maps.google.com/maps?saddr=%f,%f&daddr=%@",
                    currentLocation.latitude, currentLocation.longitude,
                    [address stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
[[UIApplication sharedApplication] openURL: [NSURL URLWithString: url]];

Açıkça mevcut konumunu bulmak için CoreLocation kullanmaktan kaçının ve kullanmak istediğiniz istiyoruz Son olarak, @"http://maps.google.com/maps?saddr=Current+Location&daddr=%@"bunun yerine url, sonra ben aşağıdaki yorum sağlanan bu bağlantıyı görmek yerelleştirilmesine nasıl Güncel + Konum dize. Ancak, başka bir belgesiz özelliği yararlanmakta olup, ve Jason McCreary aşağıda işaret ettiği gibi, bu gelecekteki sürümlerde güvenilir çalışmayabilir.


iOS 6 için Güncelleştirme

Başlangıçta, Haritalar , Google haritalar kullanılır, ama şimdi, Apple ve Google ayrı haritalar uygulamanız yok.

1) Google Maps uygulamasını kullanarak rota isterseniz, kullanmak comgooglemaps URL şemasını :

NSString* url = [NSString stringWithFormat: @"comgooglemaps://?daddr=%@&directionsmode=driving",
                    [address stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
BOOL opened = [[UIApplication sharedApplication] openURL: [NSURL URLWithString: url]];

2) Elma Maps kullanmak için, yeni kullanabilirsiniz MKMapItemiOS 6 için sınıf buraya Apple API docs gör

Temelde, böyle bir şey kullanır, hedef yönlendirme eğer koordinatlar ( latlong):

    MKPlacemark* place = [[MKPlacemark alloc] initWithCoordinate: latlong addressDictionary: nil];
    MKMapItem* destination = [[MKMapItem alloc] initWithPlacemark: place];
    destination.name = @"Name Here!";
    NSArray* items = [[NSArray alloc] initWithObjects: destination, nil];
    NSDictionary* options = [[NSDictionary alloc] initWithObjectsAndKeys:
                                 MKLaunchOptionsDirectionsModeDriving, 
                                 MKLaunchOptionsDirectionsModeKey, nil];
    [MKMapItem openMapsWithItems: items launchOptions: options];

Aynı kodunda hem iOS 6+ ve ön iOS 6 desteklemek amacıyla, Apple üzerindeki bu kodu gibi bir şey kullanarak öneriyoruz MKMapItemAPI doc sayfa:

Class itemClass = [MKMapItem class];
if (itemClass && [itemClass respondsToSelector:@selector(openMapsWithItems:launchOptions:)]) {
   // iOS 6 MKMapItem available
} else {
   // use pre iOS 6 technique
}

Bu Xcode Baz SDK iOS 6 (ya da olduğunu varsaymak olacaktır Son iOS ).

Cevap 08/06/2009 saat 10:49
kaynak kullanıcı

oy
21
NSString* addr = [NSString stringWithFormat:@"http://maps.google.com/maps?daddr=Current Location&saddr=%@",startAddr];
NSURL* url = [[NSURL alloc] initWithString:[addr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
[[UIApplication sharedApplication] openURL:url];
[url release];

Bu iPhone / iPod dili İngilizce olarak ayarlandığında ancak çalışır. Diğer dilleri desteklemek istiyorsanız Maps imi adı eşleştirmek için yerelleştirilmiş dize kullanmak gerekecektir.

Cevap 01/12/2010 saat 11:05
kaynak kullanıcı

Cevap 01/11/2010 saat 15:46
kaynak kullanıcı

oy
10

Sen gibi bir önişlemci #define kullanabilirsiniz:

#define SYSTEM_VERSION_LESS_THAN(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)

iOS sürümünü anlamak için. Sonra ben de 6 iOS desteklemek için bu kodu kullanabilirsiniz:

NSString* addr = nil;
if (SYSTEM_VERSION_LESS_THAN(@"6.0")) {
   addr = [NSString stringWithFormat:@"http://maps.google.com/maps?daddr=%1.6f,%1.6f&saddr=Posizione attuale", view.annotation.coordinate.latitude,view.annotation.coordinate.longitude];
} else {
   addr = [NSString stringWithFormat:@"http://maps.apple.com/maps?daddr=%1.6f,%1.6f&saddr=Posizione attuale", view.annotation.coordinate.latitude,view.annotation.coordinate.longitude];
}

NSURL* url = [[NSURL alloc] initWithString:[addr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
[[UIApplication sharedApplication] openURL:url];
Cevap 30/09/2012 saat 10:51
kaynak kullanıcı

oy
5

korumalı alan yüzümden, Harita uygulamanın imlerine erişimi yoktur.

Bunun yerine, şu anki konuma kendinizin belirleyebileceği Çekirdek Konum kullanın. Sonra Maps açmak için inşa URL'de (lat ve uzun) o yeri kullanırız.

Cevap 23/02/2009 saat 16:07
kaynak kullanıcı

oy
4

Ben göz atmanızı öneririz CMMapLauncher , ben belirli bir eşleme isteği ile Apple, Google ve diğer iOS haritalama uygulamaları başlatmak için inşa edilmiş bir mini kütüphane. CMMapLauncher ile, kod söz konusu tarifi olurdu almak için:

[CMMapLauncher launchMapApp:CMMapAppAppleMaps
          forDirectionsFrom:[CMMapPoint mapPointWithName:@"Origin"
                                              coordinate:myLatLong]
                         to:[CMMapPoint mapPointWithName:@"Destination"
                                              coordinate:latlong]];

Gördüğünüz gibi, o da sürümü iOS 6 ve diğerleri arasında gerekli denetleniyor kapsüller.

Cevap 07/09/2013 saat 13:37
kaynak kullanıcı

oy
3

Hey iOS6 dışında olduğundan!

Elma (Benim bakış itibaren) kötü bir şekilde kayda değer bir şey yaptı.

Apple'ın haritaları başlatılan ve iOS çalışan cihazlar için kullanmamalısınız 6 edilmektedir maps.google.com/?q=sen İDevice yerli Planı uygulamasını açmak istiyorum. Şimdi olurdu maps.apple.com/?q=.

geliştiriciler çok işe gerekmez Böylece değişim şeffaftır, böylece dost maps.apple.com sunucu maps.google.com'un olmayan tüm Apple aygıtları yönlendirir.

Biz geliştiricilerin sadece var Bu şekilde elma olanlara tüm google sorgu dizeleri geçmek için. Bu benim çok sevmediğim şeydir.

Ben yaptım bu nedenle bugün bu functionnality uygulamak zorunda kaldı. Ama ben sadece IDevices sunucu tarafında algılamak ve sadece olanlar için elma URL'ler hizmet düşündüm ben sadece Apple'ın haritaları sunucusunu hedeflemek için mobil web sitesi yatan her url yeniden olmamalıdır hissetti. Ben paylaşmak istedim.

Ben opensource Mobil kullanılan bu yüzden PHP kullanıyorum Algılama kütüphane: http://code.google.com/p/php-mobile-detect/

Sadece kullanmak isiPadalışkanlık elmayı google, bir boolean toplamamaddesi olarak sözde yöntem ve bitirdiniz ;-)

$server=$detect->isiPad()?"apple":"google";
$href="http://maps.{$server}.com/?q=..."

Şerefe!

Cevap 21/09/2012 saat 18:57
kaynak kullanıcı

oy
2

Eğer konum izinleri için sormak istemiyorum ve lat ve Ing yoksa aşağıdakileri kullanın.

NSString *destinationAddress = @"Amsterdam";

Class itemClass = [MKMapItem class];
if (itemClass && [itemClass respondsToSelector:@selector(openMapsWithItems:launchOptions:)]) {

    CLGeocoder *geocoder = [[CLGeocoder alloc] init];
    [geocoder geocodeAddressString:destinationAddress completionHandler:^(NSArray *placemarks, NSError *error) {
        if([placemarks count] > 0) {

            MKPlacemark *placeMark = [[MKPlacemark alloc] initWithPlacemark:[placemarks objectAtIndex:0]];

            MKMapItem *mapItem = [[MKMapItem alloc]initWithPlacemark:placeMark];

            MKMapItem *mapItem2 = [MKMapItem mapItemForCurrentLocation];


            NSArray *mapItems = @[mapItem, mapItem2];

            NSDictionary *options = @{
        MKLaunchOptionsDirectionsModeKey:MKLaunchOptionsDirectionsModeDriving,
        MKLaunchOptionsMapTypeKey:
            [NSNumber numberWithInteger:MKMapTypeStandard],
        MKLaunchOptionsShowsTrafficKey:@YES
            };

            [MKMapItem openMapsWithItems:mapItems launchOptions:options];

        } else {
            //error nothing found
        }
    }];
    return;
} else {

    NSString *sourceAddress = [LocalizedCurrentLocation currentLocationStringForCurrentLanguage];

    NSString *urlToOpen = [NSString stringWithFormat:@"http://maps.google.com/maps?saddr=%@&daddr=%@",
                 [sourceAddress stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],
                 [destinationAddress stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlToOpen]];
}

IOS5 için, Mevcut Konum doğru dilde olması gerekiyor. Bu görevinden LocalizedCurrentLocation kullanmak http://www.martip.net/blog/localized-current-location-string-for-iphone-apps

iOS6 için, ben işaretini almak ve sonra onunla haritası ve mevcut konumu açmak için CLGeocoder kullanın.

CoreLocation.framework ve MapKit.framework eklemeyi unutmayın

Cevap 06/12/2012 saat 13:14
kaynak kullanıcı

oy
2

iOS6 için elma dokümanlar eşdeğer maps.apple.com URL Planını kullanarak tavsiye

böylece kullanmak

http://maps.apple.com/maps?saddr=%f,%f&daddr=%f,%f

yerine

http://maps.google.com/maps?saddr=%f,%f&daddr=%f,%f

kodu olacaktır geriye doğru uyumlu olduğu

    NSString* versionNum = [[UIDevice currentDevice] systemVersion];
    NSString *nativeMapScheme = @"maps.apple.com";
    if ([versionNum compare:@"6.0" options:NSNumericSearch] == NSOrderedAscending)
        nativeMapScheme = @"maps.google.com";
    }
    NSString* url = [NSString stringWithFormat: @"http://%@/maps?saddr=%f,%f&daddr=%f,%f", nativeMapScheme
             startCoordinate.latitude, startCoordinate.longitude,
             endCoordinate.latitude, endCoordinate.longitude];
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];

: Elma Haritalar URL şeması için desteklenen diğer parametrelerin bir bütün yükü vardır Elma URL Şeması Referans

Kodunuzun diğer bölgelerinde koşullu kod varsa bu iOS sürümü algılama makroları kullanabilirsiniz. iOS sürümü makroları

Cevap 20/09/2012 saat 11:53
kaynak kullanıcı

oy
2

Gerçek çözüm burada bulabilirsiniz. Z5 Kavramlar iOS Geliştirme Kod Parçacığı

Bu sadece kodlama biraz gerektirir.

- (IBAction)directions1_click:(id)sender
{
    NSString* address = @"118 Your Address., City, State, ZIPCODE";
    NSString* currentLocation = @"Current Location";
    NSString* url = [NSStringstringWithFormat: @"http://maps.google.com/maps?saddr=%@&daddr=%@",[currentLocation stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],[address stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
    UIApplication *app = [UIApplicationsharedApplication];
    [app openURL: [NSURL URLWithString: url]];
}
Cevap 02/06/2012 saat 17:51
kaynak kullanıcı

oy
2

Sadece mobil cihazınız yalnızca bir url html şimdi bunu yapabilirsiniz. İşte bir var örnektir . Eğer sadece kendi telefonunuza tarayarak birinin nerede olurlarsa olsunlar size yol tarifini almanın bir yolu var bir qr kod dönüştürelim eğer serin bir şeydir.

Cevap 27/05/2010 saat 00:34
kaynak kullanıcı

oy
1

Benim önerim kullanarak olurdu OpenInGoogleMaps-iOS Bu (Kasım 2015) tarih seçimine bir yukarı olduğu gibi, bu kakao meyveleri yüklemeyi destekler ve birkaç tıklamayla gitmeye hazırız.

kullanarak yükleyin: pod "OpenInGoogleMaps"

kullanarak başlık dosyasına gerektir: #import "OpenInGoogleMapsController.h"

Aşağıdaki örnek kod:

/*In case the user does NOT have google maps, then apple maps shall open*/
[OpenInGoogleMapsController sharedInstance].fallbackStrategy = kGoogleMapsFallbackAppleMaps;    

/*Set the coordinates*/
GoogleMapDefinition *definition = [[GoogleMapDefinition alloc] init];   
CLLocationCoordinate2D metsovoMuseumCoords;     //coordinates struct
metsovoMuseumCoords.latitude = 39.770598;
metsovoMuseumCoords.longitude = 21.183215;
definition.zoomLevel = 20;
definition.center = metsovoMuseumCoords;        //this will be the center of the map

/*and here we open the map*/
[[OpenInGoogleMapsController sharedInstance] openMap:definition];       
Cevap 10/11/2015 saat 13:35
kaynak kullanıcı

oy
1

Google Maps'in mevcut sürümü ile, basitçe ihmal sadrparametreyi:

saddr: Değer boş bırakılırsa ... sonra kullanıcının geçerli konum kullanılacaktır.

https://developers.google.com/maps/documentation/ios/urlscheme

Cevap 15/12/2013 saat 19:30
kaynak kullanıcı

oy
1

iOS6 Maps App için, sadece yukarıda yayınlanan aynı URL'yi kullanabilirsiniz http://maps.google.com/maps?saddr=%f,%f&daddr=%@

ancak, Google'ın haritalar URL'ye olarak, birlikte bu adresi kullanın maps://aşağıdaki URL elde:maps://saddr=%f,%f&daddr=%@.

'Geçerli Location'ı kullanma çalışmıyor gibi görünüyor, bu yüzden koordinatları ile kaldı etmez.

Antother iyi şey: Geriye doğru uyumlu: iOS5 üzerinde, Google Haritalar uygulamasını başlattı.

Cevap 13/09/2012 saat 13:21
kaynak kullanıcı

oy
0

Kaynak konumu girmezseniz, bu kaynak olarak mevcut konumu alacaktır. Kodunuzu aşağıya deneyin

let urlString = " http://maps.apple.com/maps?daddr=(destinationLocation.latitude),(destinationLocation.longitude)&dirflg=d "}

UIApplication.shared.openURL (URL (string:! UrlString))

Cevap 18/09/2017 saat 12:06
kaynak kullanıcı

oy
0

Ben farklı bir iş parçacığı üzerinde bu cevap verdi. ( Mevcut Konum Elma Maps IOS 6 ile çalışmaz ). Daha sonra, önce geçerli konumun koordinatlarını almak Harita URL'sini oluşturmak için kullanmak gerekir.

Cevap 11/01/2013 saat 06:37
kaynak kullanıcı

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