Как ссылаться картинки Карты для маршрута с текущим местоположением в поле Start Address

голоса
72

Я знаю , что это возможно , чтобы запустить приложение iPhone карты, позвонив openURLна Google Maps URL с параметрами saddrи daddrсо строками местоположения или Lat / Long (смотрите пример ниже).

Но мне интересно , если это возможно , чтобы сделать стартовый адрес будет «Current Location» карта закладкой , так что я могу использовать Карты местоположения код обработки приложения. Мой поиск Google был довольно бесплодными.

Например:

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

За исключением что - то ссылаться на текущую закладку местоположение на месте myLatLong.

Задан 23/02/2009 в 08:11
источник пользователем
На других языках...                            


16 ответов

голоса
133

Предварительно IOS 6

Вы должны использовать Core Location, чтобы получить текущее местоположение, но с этим Широм / парами, вы можете получить карты маршрутизировать вас оттуда, адрес или место. Вот так:

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

И, наконец, если вы хотите , чтобы избежать использования CoreLocation явно найти текущее местоположение, и вы хотите использовать @"http://maps.google.com/maps?saddr=Current+Location&daddr=%@"URL вместо этого, то этой ссылки , что я предоставил в комментариях ниже для того, как локализовать ток + Расположение строки. Тем не менее, вы , воспользовавшись другой документировано, и Джейсон McCreary указывает ниже, она не может надежно работать в будущих версиях.


Обновление для IOS 6

Первоначально карта используется Google Maps, но теперь, Apple и Google имеют отдельные карты приложений.

1) Если вы хотите , чтобы маршрут с помощью приложения Google Maps, использовать в comgooglemaps схему URL :

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

2) Для того, чтобы использовать Apple Maps, вы можете использовать новый MKMapItemкласс для прошивки 6. См API документы компании Apple здесь

В принципе, вы будете использовать что - то вроде этого, если маршрутизация для назначения координат ( 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];

Для того , чтобы поддерживать как IOS 6+ и предварительно IOS 6 в том же коде, я рекомендовал бы использовать что - то вроде этого кода , что Apple , имеет на MKMapItemстранице API док:

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

Это было бы предположить , что ваш Xcode Base SDK является IOS 6 (или Latest IOS ).

Ответил 08/06/2009 в 10:49
источник пользователем

голоса
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];

Это работает, но только тогда, когда язык iPhone / IPod устанавливается на английском языке. Если вы хотите, чтобы поддерживать другие языки, которые вы должны будете использовать локализованную строку, чтобы соответствовать имени закладки Карты.

Ответил 01/12/2010 в 11:05
источник пользователем

Ответил 01/11/2010 в 15:46
источник пользователем

голоса
10

Вы можете использовать препроцессора #define, как:

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

чтобы понять вашу версию IOS. Тогда, я могу использовать этот код, чтобы поддержать IOS 6, тоже:

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];
Ответил 30/09/2012 в 10:51
источник пользователем

голоса
5

Из-за песочницу, вы не имеете доступ к закладкам приложения карты.

Вместо этого следует использовать Core Location, чтобы определить текущее местоположение самостоятельно. Затем используйте это место (лат и долго) в URL вы строите, чтобы открыть карты.

Ответил 23/02/2009 в 16:07
источник пользователем

голоса
4

Я рекомендую проверить CMMapLauncher , мини-библиотека , которая я построил для запуска Apple, Google и другие картографические приложения IOS с конкретным запросом отображения. С CMMapLauncher, код , чтобы получить направление в Ваш вопрос будет:

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

Как вы можете видеть, это также инкапсулирует версии проверки требуется между IOS 6 и другими.

Ответил 07/09/2013 в 13:37
источник пользователем

голоса
3

Эй, так как iOS6 выходит!

Apple, сделал что-то замечательное в плохом смысле (с моей точки зрения).

Карты Apple, запущены и для устройств , работающих под управлением IOS 6 не следует использовать , maps.google.com/?q=если вы хотите , чтобы открыть чтения компакт - дисков родного приложения Plan. Теперь было бы maps.apple.com/?q=.

Так что разработчики не имеют много работы, дружественный сервер maps.apple.com перенаправляет все устройства неяблока к maps.google.com поэтому изменение является прозрачным.

Таким образом, мы developpers просто должно переключить все строки Google запрос на яблоневые из них. Это то, что мне не нравится много.

Я должен был осуществить это functionnality сегодня, так что я сделал это. Но я чувствовал, что я должен не просто переписать все URL, лежащие на мобильном вебе-сайте целевых карт сервера Apple, так что я думал, что я просто обнаружить мобильное iУстройство на сторону сервера и служу яблочные URLs только для тех. Я думал, что я поделюсь.

Я использую PHP , так что я использовал OpenSource Mobile Detect библиотека: http://code.google.com/p/php-mobile-detect/

Просто используйте isiPadметод псевда как логический добытчик и вы сделали, вы не будете конвертировать Google в яблоко ;-)

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

Ура!

Ответил 21/09/2012 в 18:57
источник пользователем

голоса
2

Если вы не хотите, чтобы попросить разрешение местоположения и не имеете лат и LNG, используйте следующее.

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, текущее местоположение должно быть на правильном языке. Я использую LocalizedCurrentLocation с этого поста http://www.martip.net/blog/localized-current-location-string-for-iphone-apps

Для iOS6, я использую CLGeocoder, чтобы получить метку, а затем открыть карту с ней и текущее местоположение.

Не забудьте добавить CoreLocation.framework и MapKit.framework

Ответил 06/12/2012 в 13:14
источник пользователем

голоса
2

Для iOS6 яблока документы рекомендуется использовать URL Scheme эквивалент maps.apple.com

поэтому используйте

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

вместо

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

для обратной совместимости кода будет

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

есть целая нагрузка других поддерживаемых параметров для схемы URL компании Apple Maps: Apple , URL Scheme Reference

Вы можете использовать эти макросы IOS обнаружения версии , если у вас есть условный код в других частях кода. IOS версия макросов

Ответил 20/09/2012 в 11:53
источник пользователем

голоса
2

Реальное решение можно найти здесь. Z5 Концепция IOS разработка кода сниппета

Она просто требует немного кодирования.

- (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]];
}
Ответил 02/06/2012 в 17:51
источник пользователем

голоса
2

Вы можете сделать это сейчас в HTML только из URL только на мобильном устройстве. Вот пример . Отличная вещь, если вы включите это в код Qr у вас есть способ получения кто - то направления к вам, где бы они просто сканируя его на свой телефон.

Ответил 27/05/2010 в 00:34
источник пользователем

голоса
1

Мое предложение будет использовать OpenInGoogleMaps-ИСН , как это до даты выбора (до ноября 2015 года), он поддерживает установку стручки какао , и вы готовы пойти в несколько кликов.

Установка с помощью: pod "OpenInGoogleMaps"

Требовать в заголовочном файле с помощью: #import "OpenInGoogleMapsController.h"

Пример кода ниже:

/*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];       
Ответил 10/11/2015 в 13:35
источник пользователем

голоса
1

С текущей версией Google Maps, просто опустить sadrпараметр:

saddr: ... Если значение остается пустым, то будет использоваться текущее местоположение пользователя.

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

Ответил 15/12/2013 в 19:30
источник пользователем

голоса
1

Для iOS6 Maps App, вы можете просто использовать один и тот же URL размещен выше http://maps.google.com/maps?saddr=%f,%f&daddr=%@

но вместо URL Google Maps, можно использовать URL - адрес с в maps://результате по следующему адресу:maps://saddr=%f,%f&daddr=%@.

Использование «Current Location», кажется, не работает, так что я остался с координатами.

Antother хорошей вещь: Это обратная совместимость: На iOS5, он запускает приложение Google Maps.

Ответил 13/09/2012 в 13:21
источник пользователем

голоса
0

Если вы не предоставите местоположение источника, он будет принимать текущее местоположение в качестве источника. Попробуйте ниже код-

пусть urlString = " http://maps.apple.com/maps?daddr=(destinationLocation.latitude),(destinationLocation.longitude)&dirflg=d "}

UIApplication.shared.openURL (URL (строка: urlString))

Ответил 18/09/2017 в 12:06
источник пользователем

голоса
0

Я ответил на это в другом потоке. ( Текущее местоположение не работает с Apple , Карты IOS 6 ). Вам нужно получить координаты текущего местоположения, а затем использовать его для создания карты URL.

Ответил 11/01/2013 в 06:37
источник пользователем

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