将字符串从我的应用程序传递到 Apple Maps 以便它可以搜索

Posted

技术标签:

【中文标题】将字符串从我的应用程序传递到 Apple Maps 以便它可以搜索【英文标题】:Passing a String from my app to Apple Maps so that it can Search 【发布时间】:2018-05-02 19:10:09 【问题描述】:

我正在尝试找出将字符串值传递给苹果地图的最佳方法,以便我可以搜索它。我正在开发一个类中的应用程序,该应用程序从数组中提取随机字符串,我希望能够调用设备上已经存在的苹果地图并搜索选择的任何字符串。我查看了 MKLocalSearchRequest,我认为这可能是最简单的选择,我只是不确定如何将它与 Apple Maps 集成,而不是在应用程序内将它与 mapkitview 一起使用。这是我发现的一种方法,它似乎可以工作我只是不确定如何声明它。

 class func openMaps(with mapItems: [MKMapItem], 
 launchOptions: [String : Any]? = nil) -> Bool

【问题讨论】:

Open Apple Maps programmatically in ios8, Xcode 7, Swift 2的可能重复 @rbaldwin 我看了那个,它似乎对我一点帮助都没有 @CalebBartholomew 如果它是一个字符串值,您可以使用 rbaldwin 建议的方法,请查看documentation 中有关地图链接的更多信息,尽管它已经过时但仍在工作。 @NajdanTomić 你给我的文档链接与 rbaldwin 给我的完美配合。我能够把它拼凑起来。非常感谢 【参考方案1】:
import CoreLocation

然后在viewDidLoad:

    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)
                
            
        
    

【讨论】:

这与上述文档完美结合。谢谢【参考方案2】:

您有很多选择:

import MapKit

第一

UIApplication.shared.openURL(NSURL(string:
    "comgooglemaps://?saddr=&daddr=\(place.latitude),\(place.longitude)&directionsmode=driving")! as URL)

或者

@IBAction func action(_ sender: Any) 
    let latitude: CLLocationDegrees = 37.2
    let longitude: CLLocationDegrees = 22.9

    let regionDistance:CLLocationDistance = 10000
    let coordinates = CLLocationCoordinate2DMake(latitude, longitude)
    let regionSpan = MKCoordinateRegionMakeWithDistance(coordinates, regionDistance, regionDistance)
    let options = [
        MKLaunchOptionsMapCenterKey: NSValue(mkCoordinate: regionSpan.center),
        MKLaunchOptionsMapSpanKey: NSValue(mkCoordinateSpan: regionSpan.span)
    ]
    let placemark = MKPlacemark(coordinate: coordinates, addressDictionary: nil)
    let mapItem = MKMapItem(placemark: placemark)
    mapItem.name = "Place Name"
    mapItem.openInMaps(launchOptions: options)
    

【讨论】:

假设我在执行搜索时使用mapItem.name = "Taco Bell",它会将我带到海洋中的一个随机位置。有没有办法让它自动在你周围搜索?【参考方案3】:

Swift 4 及更高版本

使用此版本获取地址的坐标

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 Maps 以便它可以搜索的主要内容,如果未能解决你的问题,请参考以下文章

链接到 Apple 地图,将路线设置为“步行”

通过传递纬度和经度打开 Apple 地图

Apple Watch 不向 iPhone 传递数据 - Swift

通过使用纬度和经度的导航调用 maps.app(Apple 地图)

如何打开专注于服务选项卡的Apple Maps? (网址方案)

删除 Apple Maps 默认注释