Ios 如何通过传递地址打开Apple Maps行驶方向
我正在尝试实现一个功能,通过传递实际地址打开Apple Map应用程序的驾驶方向屏幕 地址不仅是随机地址,而且是业务地址,这些地址大多在苹果地图上注册和搜索。因此,通过传递地址,它应该是匹配的,并正确地显示该业务的方向,而不是指向地图上的未知注释。这种情况发生在我直接传递经度和纬度时,因此我不想使用geocodeAddressString()将地址转换为geocoordinationIos 如何通过传递地址打开Apple Maps行驶方向,ios,swift,mapkit,apple-maps,Ios,Swift,Mapkit,Apple Maps,我正在尝试实现一个功能,通过传递实际地址打开Apple Map应用程序的驾驶方向屏幕 地址不仅是随机地址,而且是业务地址,这些地址大多在苹果地图上注册和搜索。因此,通过传递地址,它应该是匹配的,并正确地显示该业务的方向,而不是指向地图上的未知注释。这种情况发生在我直接传递经度和纬度时,因此我不想使用geocodeAddressString()将地址转换为geocoordination 如何实现它?只需使用Apple Maps API即可。如果你可以通过在苹果地图上显示一个企业的名称来找到它,你可
如何实现它?只需使用Apple Maps API即可。如果你可以通过在苹果地图上显示一个企业的名称来找到它,你可以通过API找到它。在您的情况下,正确的参数是
daddr
,如下所示:
http://maps.apple.com/?daddr=1+无限+循环,+Cupertino,+CA
您可以组合多个参数,例如起始位置:
http://maps.apple.com/?saddr=1024+Market+St、+San+Francisco、+CA&daddr=1+Infinite+Loop、+Cupertino、+CA
您可以找到支持的参数列表
请记住通过iOS 10中的
UIApplication.shared().open(URL:URL,options:[String:AnyObject],completionHandler:((Bool)->Void)?
-或UIApplication.shared.open(URL:URL)
可以使用URL调用映射(如Nicola所述),但也有一个合适的api:MKMapItem
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)
}
Id避免使用协议并使用MKMapItems。。它们是在allalso之后制作的:在代码中构建字符串?甚至。。你必须担心URL编码和一切:)@Nicola Giantecchi谢谢你的代码。它起作用了well@NicolaGiancecchi忘记了在上面的评论中提到,我最终使用了q和sll参数,而不是仅使用daddr。(也就是说,way给了我正确的位置这个答案对我很有用。如果你想知道如何将空格改为+,你可以检查这个答案来帮助解决这个问题。希望这对将来的人有所帮助。这种方法有一些优点。但也有一些缺点:1)@androisojavaswift想通过它的名字找到这个企业,不仅是地址或城市2)CNPOstaladAddress密钥仅在iOS 9.0之后才可用;URI模式的使用是因为iOS 6 3)您只需要为这段代码导入Contacts框架1:)按名称查找是CLGeocoder为您所做的工作-它构建位置标记。你不需要地址,甚至不需要坐标:)2。这些密钥与旧的地址簿密钥相同,因此如果需要使用旧的基本sdk进行构建,则可以在较低版本上使用。。3) 如果你只想要位置,就不要:)我的代码没有使用地理编码器,就像在他的问题中@androisojavaswift想要的一样。这是一个有争议的选择。。。显然,您的实现更加清晰和详细@daijdjan感谢您的代码。这非常有帮助,我有机会玩mapkit。但我最终还是使用了Nicola Giancecchi提供的解决方案