ios MKLocalPointsOfInterestRequest返回的结果与MKLocalSearch.Request或MKLocalSearchCompletter不同

ehxuflar  于 2023-06-25  发布在  iOS
关注(0)|答案(1)|浏览(191)

我的应用使用核心位置请求用户附近的兴趣点。我使用了Apple提供的不同API:MKLocalPointsOfInterestRequestMKLocalSearch.RequestMKLocalSearchCompleter。它们提供的结果完全不同,而请求的配置非常相似。
MKLocalPointsOfInterestRequest提供的位置非常少(如果有的话,有时The operation couldn’t be completed. (MKErrorDomain error 4.))其他的结果更多,但并不相同。下面提供了不同请求的代码。
1.这是预期的行为吗?
1.如果没有,我错过了什么吗?
1.这是一个bug吗?
谢谢

  • PS:在Xcode 14.3,iOS 16.0上测试。*

MKLocalPointsOfInterestRequest

let center: CLLocationCoordinate2DMake = CLLocationCoordinate2DMake(41.38891, 9.16205)

let poiRequest: MKLocalPointsOfInterestRequest = MKLocalPointsOfInterestRequest(center: coordinate, radius: 3_000)
poiRequest.pointOfInterestFilter = MKPointOfInterestFilter(including: [.beach, .marina])
let poiSearch: MKLocalSearch = MKLocalSearch(request: poiRequest)
let resultsPOI = try await poiSearch.start()
print(resultsPOI.mapItems.compactMap(\.name))

这给予了我以下结果:

["Plage de Stagnolu"]

MKLocalSearch.Request

let center: CLLocationCoordinate2DMake = CLLocationCoordinate2DMake(41.38891, 9.16205)

let searchRequest: MKLocalSearch.Request = MKLocalSearch.Request()
searchRequest.region = MKCoordinateRegion(center: coordinate, latitudinalMeters: 4_000, longitudinalMeters: 4_000)
searchRequest.pointOfInterestFilter = MKPointOfInterestFilter(including: [.beach, .marina])
searchRequest.resultTypes = .pointOfInterest
searchRequest.naturalLanguageQuery = "beach"
let search: MKLocalSearch = MKLocalSearch(request: searchRequest)
let results = try? await search.start()
print(results.mapItems.compactMap(\.name))

这给予了我以下的结果。

["Plage du Petit Sperone", "Plage de 3 Pointes", "Plage de Saint-Antoine Bonifacio", "Plage de Fazzio", "Piantarella Beach", "Plage du Grand Sperone", "Capu Testagro", "Plage de Balistra", "Plage de Stagnolo", "Plage de Cala Longa", "Plage de La Tonnara", "Plage Porto Novo", "Plage de Sant\'Amanza", "Rena Majori", "Plage de Rondinara", "Plage de Santa Giulia", "Spiaggia Rena Bianca", "Plage De Roccapina", "Cala Spinosa", "Naracu Nieddu Beach", "Porto Cervo Beach", "Lido Dog Beach", "Plage de Figari", "Capocchia Du Purpu", "Spiaggia Zia Culumba"]

MKLocalSearchCompleter

func search(coordinate: CLLocationCoordinate2D) {
    completer.region = MKCoordinateRegion(center: coordinate, latitudinalMeters: 4_000, longitudinalMeters: 4_000)
    completer.pointOfInterestFilter = MKPointOfInterestFilter(including: [.beach, .marina])
    completer.resultTypes = .pointOfInterest
    completer.queryFragment = "beach"
}

func completerDidUpdateResults(_ completer: MKLocalSearchCompleter) {
    print(completer.results.map(\.title))
}

这给予了我以下结果:

["Porto Istana Beach", "Sandbanks Beach", "Spiaggia La Cinta", "Piantarella Beach", "Platja de la Barceloneta", "Whitstable Beach", "West Wittering Beach", "Cala Millor", "Maora B\'ch Sailing Club"]
eivnm1vs

eivnm1vs1#

MKLocalPointsOfInterestRequest中的maxRadius固定在2000米。因此,无论提供的搜索区域如何,您都不会得到超过该距离的任何命中。

相关问题