it-swarm.com.ru

Как открыть Google Maps, чтобы показать маршрут с помощью Swift

Я читал в Интернете, но не смог найти законного ответа. Мне нужно открыть Google Maps, когда пользователь нажимает кнопку, чтобы показать направления. Старт и пункт назначения должны быть заполнены автоматически.

Как я могу добиться этого в Swift?

Если у кого-то есть решение, пожалуйста, предоставьте мне пример кода. Начало всегда будет текущим местоположением пользователя.

28
sumesh

ОК, я нашел ответ сам.

Если вы хотите показать маршруты из текущего местоположения пользователя, оставьте поле saddr пустым, а в поле daddr вы можете ввести координаты пункта назначения.

Вот как я это сделал

if (UIApplication.sharedApplication().canOpenURL(NSURL(string:"comgooglemaps://")!)) {
            UIApplication.sharedApplication().openURL(NSURL(string:
                "comgooglemaps://?saddr=&daddr=\(place.latitude),\(place.longitude)&directionsmode=driving")!)

        } else {
            NSLog("Can't use comgooglemaps://");
        }
    }

для дальнейших запросов вы можете обратиться к этой ссылке Схема URL карты Google

44
sumesh

Ответ уже есть, но в старых версиях Swift 

В Swift 3

//Working in Swift new versions.
if (UIApplication.shared.canOpenURL(URL(string:"comgooglemaps://")!)) 
{
    UIApplication.shared.openURL(NSURL(string:
    "comgooglemaps://?saddr=&daddr=\(Float(latitude!)),\(Float(longitude!))&directionsmode=driving")! as URL)   
} else 
{
    NSLog("Can't use com.google.maps://");
}
23
user3745635

Для тех, у кого решение для принятого ответа не работает, не забудьте добавить comgooglemaps в LSApplicationQueriesSchemes в info.plist.

 info.plist

13
Abedalkareem Omreyh
@IBAction func NavigationTrackerPressedPressed(_ sender: UIButton){

    if let UrlNavigation = URL.init(string: "comgooglemaps://") {
        if UIApplication.shared.canOpenURL(UrlNavigation){
            if self.destinationLocation?.longitude != nil && self.destinationLocation?.latitude != nil {

                let lat =      (self.destinationLocation?.latitude)!
                let longi = (self.destinationLocation?.longitude)!

                if let urlDestination = URL.init(string: "comgooglemaps://?saddr=&daddr=\(lat),\(longi)&directionsmode=driving") {
                    UIApplication.shared.openURL(urlDestination)
                }
            }
        }
        else {
            NSLog("Can't use comgooglemaps://");
            self.openTrackerInBrowser()

        }
    }
    else
    {
        NSLog("Can't use comgooglemaps://");
       self.openTrackerInBrowser()
    }



}
func openTrackerInBrowser(){
    if self.destinationLocation?.longitude != nil && self.destinationLocation?.latitude != nil {

        let lat = (self.destinationLocation?.latitude)!
        let longi = (self.destinationLocation?.longitude)!

        if let urlDestination = URL.init(string: "https://www.google.co.in/maps/dir/?saddr=&daddr=\(lat),\(longi)&directionsmode=driving") {
            UIApplication.shared.openURL(urlDestination)
        }
    }
}
8
Anoop
  let lat = self.upcomingListArr[indexPath.item].latitude!
            let long = self.upcomingListArr[indexPath.item].longitude!
            if (UIApplication.shared.canOpenURL(NSURL(string:"comgooglemaps://")! as URL)) {
                UIApplication.shared.openURL(NSURL(string:
                    "comgooglemaps://?saddr=&daddr=\(String(describing: lat)),\(String(describing: long))")! as URL)

            } else {
                UIApplication.shared.openURL(NSURL(string:
                    "https://www.google.co.in/maps/dir/?saddr=&daddr=\(String(describing: lat)),\(String(describing: long))")! as URL)
            }
6
Sachin Kishore

Я хочу, чтобы пользователь мог открывать Google Карты через браузер (работает только тогда, когда у пользователя нет приложения Google Maps) Google предоставляет документацию для этого здесь . Начиная с iOS 9, вы должны установить схему. Это вы найдете здесь .

Для меня решение Google не работает. Может быть, вы умнее и найдете решение (пожалуйста, напишите!).

В любом случае я сделал простой веб-звонок:

let lat = 37.7
let lon = -122.4
if (UIApplication.sharedApplication().canOpenURL(NSURL(string:"https://maps.google.com")!)) 
{
     UIApplication.sharedApplication().openURL(NSURL(string:
     "https://maps.google.com/[email protected]\(lat),\(lon)")!)
}

Это может быть использовано как своего рода запасной вариант ответа сумеш. 

6
kuzdu

1) Метод: Вы можете передать единственный адрес назначения, текущий адрес будет автоматически выбран приложением Google Map.

let strLat : String = "23.035007"
let strLong : String = "72.529324"

override func viewDidLoad() {
        super.viewDidLoad()
        if (UIApplication.shared.canOpenURL(URL(string:"comgooglemaps://")!)) {
            UIApplication.shared.openURL(URL(string:"comgooglemaps://?saddr=&daddr=\(strLat),\(strLong)&directionsmode=driving")!)
        }
        else {
            print("Can't use comgooglemaps://");
        }
    }

2) Вы можете передать как начальный, так и целевой адрес

let strLat : String = "23.035007"
let strLong : String = "72.529324"

let strLat1 : String = "23.033331"
let strLong2 : String = "72.524510"

override func viewDidLoad() {
        super.viewDidLoad()
        if (UIApplication.shared.canOpenURL(URL(string:"comgooglemaps://")!)) {
            UIApplication.shared.openURL(URL(string:"comgooglemaps://?saddr=\(strLat),\(strLong)&daddr=\(strLat1),\(strLong2)&directionsmode=driving&zoom=14&views=traffic")!)
        }
        else {
            print("Can't use comgooglemaps://");
        }
    }
5
Hardik Thakkar

Вот обновление Swift 3

Во-первых, вам нужно добавить два элемента LSApplicationQueriesSchemes в список info.plist.

 enter image description here

Затем вы можете использовать эту функцию для загрузки адреса на картах Google.

 let primaryContactFullAddress = "No 28/A, Kadalana, Moratuwa, Sri Lanka"

 @IBAction func showLocaionOnMaps(_ sender: Any) {
        let testURL: NSURL = NSURL(string: "comgooglemaps-x-callback://")!
        if UIApplication.shared.canOpenURL(testURL as URL) {
            if let address = primaryContactFullAddress.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed) {
                let directionsRequest: String = "comgooglemaps-x-callback://" + "?daddr=\(address)" + "&x-success=sourceapp://?resume=true&x-source=AirApp"
                let directionsURL: NSURL = NSURL(string: directionsRequest)!
                let application:UIApplication = UIApplication.shared
                if (application.canOpenURL(directionsURL as URL)) {
                    application.open(directionsURL as URL, options: [:], completionHandler: nil)
                }
            }
        } else {
            NSLog("Can't use comgooglemaps-x-callback:// on this device.")
        }
}
3
Chathuranga Silva

Рабочий код Swift 4

if let url = URL(string: "comgooglemaps://?saddr=&daddr=\(location.coordinate.latitude),\(location.coordinate.longitude)&directionsmode=driving") {
        UIApplication.shared.open(url, options: [:])
    }

этот код работает для меня. И я не вставил 

* LSApplicationQueriesSchemes

Если вы используете эмулятор не можете увидеть результаты. Не забудьте поработать над проектом по телефону.

2
Haktan Enes Biçer

В Swift 4:  

 if (UIApplication.shared.canOpenURL(NSURL(string:"comgooglemaps://")! as URL)) {
       UIApplication.shared.open((NSURL(string:
            "comgooglemaps://?saddr=&daddr=\(trashDictionarySorted[indexPath.section][0])&directionsmode=driving")! as URL), options: [:], completionHandler: nil)

        } else {
            NSLog("Can't use comgooglemaps://");
        }
    }
0
Erik Peruzzi

// Я надеюсь, что это будет работать идеально.

let googleURL = NSURL(string: "comgooglemaps://?q=")

if(UIApplication.shared.canOpenURL(googleURL! as URL)) {
     UIApplication.shared.open(URL(string:"comgooglemaps://?saddr=\(DEVICE_LAT),\(DEVICE_LONG)&daddr=\(addressLat),\(addressLng)&directionsmode=driving")!, options: [:], completionHandler: nil)
}

// Также устанавливаем разрешение из info.plist согласно приложенному изображению.

введите описание изображения здесь

0
syed aurangzaib

Прежде всего, спасибо вам, ребята, за ваши ответы. Но когда я работаю вокруг, я не нашел рабочего ответа для себя. И в результате я создал рабочий код в двух случаях: когда у пользователя есть приложение Google Maps, а если нет…. Вот моя версия кода. Xcode 10, Swift 4.2. Надеюсь, это поможет.

Шаг 1: Найдите ваш info.plist и откройте как -> Исходный код

 First you should find your info.plist and open it as Source Code.

Шаг 2: Добавьте эти строки между <dict> и </dict>

 enter image description here

Шаг 3: В вашем действии добавьте этот код. Не забудьте установить широту и долготу.

        let latitude = 44.987781
        let longitude = 88.987781
        let appDomen: String = "comgooglemaps://"
        let browserDomen: String = "https://www.google.co.in/maps/dir/"
        let directionBody: String = "?saddr=&daddr=\(latitude),\(longitude)&directionsmode=driving"

        // Make route with google maps application
        if let appUrl = URL(string: appDomen), UIApplication.shared.canOpenURL(appUrl) {
            guard let appFullPathUrl = URL(string: appDomen + directionBody) else { return }
            UIApplication.shared.openURL(appFullPathUrl)

        // If user don't have an application make route in browser
        } else if let browserUrl = URL(string: browserDomen), UIApplication.shared.canOpenURL(browserUrl) {
            guard let browserFullPathUrl = URL(string: browserDomen + directionBody) else { return }
            UIApplication.shared.openURL(browserFullPathUrl)
        }
0
Alex Kolovatov