如何通过传递地址打开 Apple Maps 行车路线
How to open Apple Maps driving direction by passing address
我正在尝试实现一个通过传递实际地址来打开 Apple Map 应用程序的行车路线屏幕的功能。
地址不仅仅是随机地址,而是大部分在 Apple 地图上注册和搜索的公司地址。因此,通过传递地址,它应该匹配并正确显示该企业的方向,而不是指向地图上的未知注释。当我直接传递经度和纬度时会发生这种情况,所以我不想使用 geocodeAddressString() 将地址转换为地理坐标。
如何实现?
只需使用 Apple 地图 API。如果您可以通过在 Apple 地图中输入商家名称找到商家,则可以通过 API 找到它。在你的例子中,正确的参数是 daddr
,像这样:
http://maps.apple.com/?daddr=1+Infinite+Loop,+Cupertino,+CA
您可以组合多个参数,例如您的起始位置:
http://maps.apple.com/?saddr=1024+Market+St,+San+Francisco,+CA&daddr=1+Infinite+Loop,+Cupertino,+CA
您可以找到支持的参数列表 here。
记得打开 URL 通过 UIApplication.shared().open(url: URL, options: [String: AnyObject], completionHandler: ((Bool) -> Void)?)
- 在 iOS 10 - 或 UIApplication.shared.open(url: URL)
您可以使用 url 调用地图(如 Nicola 所详述),但也有一个合适的 api :MKMapItem
- 基本上,您为兴趣点/地址创建地图项目 [1 个或更多]
与他们一起打开地图[使用启动选项开始导航]
func showMap() {
//---
//create item 1
//address
let coords = CLLocationCoordinate(coordinateField.doubleValue!,coordinateField.doubleValue!)
let addressDict =
[CNPostalAddressStreetKey: address.text!,
CNPostalAddressCityKey: city.text!,
CNPostalAddressStateKey: state.text!,
CNPostalAddressPostalCodeKey: zip.text!]
//item
let place = MKPlacemark(coordinate: coords!,
addressDictionary: addressDict)
let mapItem = MKMapItem(placemark: place)
//---
//create item 2
//address
let coords2 = CLLocationCoordinate(coordinateField2.doubleValue!,coordinateField2.doubleValue!)
let addressDict2 =
[CNPostalAddressStreetKey: address2.text!,
CNPostalAddressCityKey: city2.text!,
CNPostalAddressStateKey: state2.text!,
CNPostalAddressPostalCodeKey: zip2.text!]
//item2
let place2 = MKPlacemark(coordinate: coords2!,
addressDictionary: addressDict2)
let mapItem2 = MKMapItem(placemark: place2)
//-----
//launch it
let options = [MKLaunchOptionsDirectionsModeKey:
MKLaunchOptionsDirectionsModeDriving]
//for 1 only.
mapItem.openInMaps(launchOptions: options)
//for 1 or N items
var mapItems = [mapItem, mapItem2] //src to destination
MKMapItem.openMaps(withItems:mapItems, launchOptions: options)
}
我正在尝试实现一个通过传递实际地址来打开 Apple Map 应用程序的行车路线屏幕的功能。
地址不仅仅是随机地址,而是大部分在 Apple 地图上注册和搜索的公司地址。因此,通过传递地址,它应该匹配并正确显示该企业的方向,而不是指向地图上的未知注释。当我直接传递经度和纬度时会发生这种情况,所以我不想使用 geocodeAddressString() 将地址转换为地理坐标。
如何实现?
只需使用 Apple 地图 API。如果您可以通过在 Apple 地图中输入商家名称找到商家,则可以通过 API 找到它。在你的例子中,正确的参数是 daddr
,像这样:
http://maps.apple.com/?daddr=1+Infinite+Loop,+Cupertino,+CA
您可以组合多个参数,例如您的起始位置:
http://maps.apple.com/?saddr=1024+Market+St,+San+Francisco,+CA&daddr=1+Infinite+Loop,+Cupertino,+CA
您可以找到支持的参数列表 here。
记得打开 URL 通过 UIApplication.shared().open(url: URL, options: [String: AnyObject], completionHandler: ((Bool) -> Void)?)
- 在 iOS 10 - 或 UIApplication.shared.open(url: URL)
您可以使用 url 调用地图(如 Nicola 所详述),但也有一个合适的 api :MKMapItem
- 基本上,您为兴趣点/地址创建地图项目 [1 个或更多]
与他们一起打开地图[使用启动选项开始导航]
func showMap() { //--- //create item 1 //address let coords = CLLocationCoordinate(coordinateField.doubleValue!,coordinateField.doubleValue!) let addressDict = [CNPostalAddressStreetKey: address.text!, CNPostalAddressCityKey: city.text!, CNPostalAddressStateKey: state.text!, CNPostalAddressPostalCodeKey: zip.text!] //item let place = MKPlacemark(coordinate: coords!, addressDictionary: addressDict) let mapItem = MKMapItem(placemark: place) //--- //create item 2 //address let coords2 = CLLocationCoordinate(coordinateField2.doubleValue!,coordinateField2.doubleValue!) let addressDict2 = [CNPostalAddressStreetKey: address2.text!, CNPostalAddressCityKey: city2.text!, CNPostalAddressStateKey: state2.text!, CNPostalAddressPostalCodeKey: zip2.text!] //item2 let place2 = MKPlacemark(coordinate: coords2!, addressDictionary: addressDict2) let mapItem2 = MKMapItem(placemark: place2) //----- //launch it let options = [MKLaunchOptionsDirectionsModeKey: MKLaunchOptionsDirectionsModeDriving] //for 1 only. mapItem.openInMaps(launchOptions: options) //for 1 or N items var mapItems = [mapItem, mapItem2] //src to destination MKMapItem.openMaps(withItems:mapItems, launchOptions: options) }