Open Apple Maps programmatically

前端 未结 3 1268
没有蜡笔的小新
没有蜡笔的小新 2021-01-02 08:12

I want to open the Apple Maps App in my own Swift App, but I have only zipcode, city & street. I have NO Coordinates. I researched a lot, but there were only ways with u

相关标签:
3条回答
  • 2021-01-02 08:56

    Swift 4 and above

    Use this version to get the coordinates for the Address, there is also a way to open it directly with the address, but that is susceptible to errors

    import CoreLocation
    
    let myAddress = "One,Apple+Park+Way,Cupertino,CA,95014,USA"
    let geoCoder = CLGeocoder()
    geoCoder.geocodeAddressString(myAddress) { (placemarks, error) in
        guard let placemarks = placemarks?.first else { return }
        let location = placemarks.location?.coordinate ?? CLLocationCoordinate2D()
        guard let url = URL(string:"http://maps.apple.com/?daddr=\(location.latitude),\(location.longitude)") else { return }
        UIApplication.shared.open(url)
    }
    

    Apple has a Documentation about the Map URL Scheme. Look here: https://developer.apple.com/library/archive/featuredarticles/iPhoneURLScheme_Reference/MapLinks/MapLinks.html#//apple_ref/doc/uid/TP40007899-CH5-SW1

    0 讨论(0)
  • 2021-01-02 09:09

    Using Swift 4 and Xcode 9

    At the top:

    import CoreLocation
    

    Then:

    let geocoder = CLGeocoder()
    
    let locationString = "London"
    
    geocoder.geocodeAddressString(locationString) { (placemarks, error) in
        if let error = error {
            print(error.localizedDescription)
        } else {
            if let location = placemarks?.first?.location {
                let query = "?ll=\(location.coordinate.latitude),\(location.coordinate.longitude)"
                let urlString = "http://maps.apple.com/".appending(query)
                if let url = URL(string: urlString) {
                    UIApplication.shared.open(url, options: [:], completionHandler: nil)
                }
            }
        }
    }
    
    0 讨论(0)
  • 2021-01-02 09:10

    You can just pass your address information as URL parameters in the URL with which you open the maps app. Say you wanted the maps app to open centered on The White House.

    UIApplication.sharedApplication().openURL(NSURL(string: "http://maps.apple.com/?address=1600,PennsylvaniaAve.,20500")!)
    

    The Maps app opens with the ugly query string in the search field but it shows the right location. Note that the city and state are absent from the search query, it's just the street address and the zip.

    A potentially better approach, depending on your needs, would be to get the CLLocation of the address info you have using CLGeocoder.

    let geocoder = CLGeocoder()
    let str = "1600 Pennsylvania Ave. 20500" // A string of the address info you already have
    geocoder.geocodeAddressString(str) { (placemarksOptional, error) -> Void in
      if let placemarks = placemarksOptional {
        print("placemark| \(placemarks.first)")
        if let location = placemarks.first?.location {
          let query = "?ll=\(location.coordinate.latitude),\(location.coordinate.longitude)"
          let path = "http://maps.apple.com/" + query
          if let url = NSURL(string: path) {
            UIApplication.sharedApplication().openURL(url)
          } else {
            // Could not construct url. Handle error.
          }
        } else {
          // Could not get a location from the geocode request. Handle error.
        }
      } else {
        // Didn't get any placemarks. Handle error.
      }
    }
    
    0 讨论(0)
提交回复
热议问题