如何使用lat / long(swift4,MKMapView)获取本地商家名称?

时间:2017-12-31 11:11:58

标签: ios swift mapkit core-location

当我触摸MKMapView上的商业图标时,我花了好几个小时试图找出如何获取本地商家名称,但在我看来,苹果公司不希望你获得这些信息。

例如,我正试图让这个Kroger的地标位于这个纬度/长度:

Kroger, 536 Centennial Blvd, Richardson, TX  75081, United States 
<+32.93644619,-96.72057518>

使用此EXACT位置的反向地理位置,我将街道的placemark.name设置为“Centennial Blvd”,而不是像我期望的那样“Kroger”。

但是如果我使用带有naturalLanguageQuery =“Kroger”的MKLocalSearchRequest(),我会在其中找回包含此Kroger的地标列表(加上其他9个),但地标名称已正确设置为“Kroger”。< / p>

我需要点击手势才能在不使用任何naturalLanguageQuery文本的情况下查找商家名称。但它似乎并不可行。我该怎么做呢?

以下是两个代码块。

1)此代码返回“Centennial Blvd”

let geoCoder = CLGeocoder()
let kroger = CLLocation(latitude: +32.93644619, longitude: -96.72057518)

geoCoder.reverseGeocodeLocation(kroger, completionHandler: { (placemarks, error) -> Void in

    // Place details
    var placeMark: CLPlacemark!
    placeMark = placemarks?[0]
    //print(placeMark.addressDictionary)

    // Location name
    if let locationName = placeMark.name {
        print("locationName: \(locationName)")
    }
})

2)在此代码中,返回“Kroger”@&lt; + 32.93644619,-96.72057518&gt;

let request = MKLocalSearchRequest()
request.naturalLanguageQuery = "Kroger"
let kroger2 = CLLocationCoordinate2D(latitude: +32.93644619, longitude: -96.72057518)
let span = self.mapView.region.span
request.region = MKCoordinateRegion(center: kroger2, span: span)

let search = MKLocalSearch(request: request)
search.start { response, error in
    guard let response = response else {
        print("There was an error searching for: \(request.naturalLanguageQuery) error: \(error)")
        return
    }
    print("There are \(response.mapItems.count)")
    for item in response.mapItems {
        print("Item Placemark Name: \(item.placemark.name!)")
    }
}

编辑:我读过谷歌有API可以提供帮助,但我不想使用任何其他第三方API,我需要使用MapKit / CoreLocation来做到这一点。

0 个答案:

没有答案