如何解决SwiftUI MapKit UIViewRepresentable MKLocalSearch 区域不起作用和集群
我有一个应用程序,它是具有 SwiftUI 生命周期的 SwiftUI 应用程序。我已经设置了一个 MKMapView 作为 UIViewRepresentable。对于其中一项功能,用户点击屏幕上的两个位置 映射并输入搜索条件以在由两次点击确定的区域内查找地点。
地图有效,水龙头的注释有效,我确实从 MKLocalSearch 但结果不完整,不反映我所在的地区 已在请求中设置。充其量,我从大致中心得到一组结果 该地区的。边缘很少或没有。我是否似乎并不重要 创建一个圆形或矩形区域。而且我的大小似乎并不重要 使区域。我只是在终点没有得到有效的结果。
除了显示问题的必需品外,我已经删除了所有内容,所以这个 可以运行代码来演示。将光标置于文本字段中并点击返回,然后 点击齿轮将结果打印到控制台
地图如下:
struct MapView: UIViewRepresentable {
typealias UIViewType = MKMapView
@State private var myMapView: MKMapView?
@State private var sfCoord = CLLocationCoordinate2D(latitude: 37.7749,longitude: -122.4194)
class Coordinator: NSObject,MKMapViewDelegate {
var control: MapView
init(_ control: MapView) {
self.control = control
}
func mapView(_ mapView: MKMapView,didAdd views: [MKAnnotationView]) {
if let annotationView = views.first {
if let annotation = annotationView.annotation {
if annotation is MKUserLocation {
let region = MKCoordinateRegion(center: annotation.coordinate,latitudinalMeters: 5000,longitudinalMeters: 5000)
mapView.setRegion(region,animated: true)
}//if user
}//if annotation
}//if views first
}//did add
}//class
func makeUIView(context: Context) -> MKMapView {
let map = MKMapView()
map.showsUserLocation = true
map.delegate = context.coordinator
dispatchQueue.main.async {
self.myMapView = map
}
return map
}//make ui view
func makeCoordinator() -> Coordinator {
Coordinator(self)
}//coord
func updateUIView(_ view: MKMapView,context: Context) {
}//update ui view
}//struct
struct ContentView: View {
@State private var search = "Coffee"
@State private var myLandmarks: [MyLandmark] = [MyLandmark]()
@State private var mapView: MapView?
var body: some View {
NavigationView {
ZStack(alignment: .top) {
MapView()
.ignoresSafeArea()
TextField("Search",text: $search,onEditingChanged: { _ in })
{
self.getNearbyMyLandmarks()
}
.textFieldStyle(RoundedBorderTextFieldStyle())
.padding()
.offset(y: -20)
} //z
.navigationBarItems(leading: Button(action: {
self.printMyLandmarks()
}) {
Image(systemName: "gear")
.resizable()
.frame(width: 25,height: 25,alignment: .center)
},trailing: Button(action: {
self.search = "Coffee"
}) {
Image(systemName: "arrow.counterclockwise.circle")
.resizable()
.frame(width: 25,alignment: .center)
}
)//nav bar items
}//nav
.navigationViewStyle(StackNavigationViewStyle())
}//body
}// content view
private extension ContentView {
private func getNearbyMyLandmarks() {
let request = MKLocalSearch.Request()
request.naturalLanguageQuery = search
let sfRegion = MKCoordinateRegion(center: CLLocationCoordinate2D(latitude: 37.7749,longitude: -122.4194),latitudinalMeters: 100000,longitudinalMeters: 100000)
request.region = sfRegion
let search = MKLocalSearch(request: request)
search.start { (response,error) in
if let response = response {
let mapItems = response.mapItems
self.myLandmarks = mapItems.map {
MyLandmark(mapItem: $0)
}
}
}
}//get nearby landmarks
//used of testing only
func printMyLandmarks() {
let sfCoord = CLLocationCoordinate2D(latitude: 37.7749,longitude: -122.4194)
for m in 0..<self.myLandmarks.count {
print(myLandmarks[m].name + "," + distanceFromCenter(center: sfCoord,site: myLandmarks[m].coordinate))
}
}//print my landmarks
func distanceFromCenter(center: CLLocationCoordinate2D,site: CLLocationCoordinate2D) -> String {
let centerLocation = CLLocation(latitude: center.latitude,longitude: center.longitude)
let siteLocation = CLLocation(latitude: site.latitude,longitude: site.longitude)
let distanceInMeters: Double = siteLocation.distance(from: centerLocation)
let distanceString = String(format: "%.0f",distanceInMeters)
return distanceString
}//distance from center
}//extension Content View
struct MyLandmark {
let mapItem: MKMapItem
var id: UUID {
return UUID()
}
var name: String {
self.mapItem.placemark.name ?? "No Name Listed"
}
var coordinate: CLLocationCoordinate2D {
self.mapItem.placemark.coordinate
}
}//struct my landmark
第一个包含 10 万米的列表:
皮特咖啡,31672 嬉皮酒,31796 早鸟咖啡公司,31707 星巴克,31573 安娜的家庭咖啡店,32050 Aj 的咖啡,32959 Brewja咖啡,26822 星巴克,31480 咖啡厅 4,30126 怡安咖啡,31241 佛罗多乔的咖啡和茶,28427 皮特咖啡,31642 Snappy's 咖啡馆,31613 星巴克,32015 阿特拉斯咖啡馆,31855 邓肯,32050 佐卡罗咖啡馆,24113 星巴克,31334 潘帕斯咖啡馆,31647 星巴克,30666 甜甜圈快递,32026 星巴克,32827 星巴克,30370 星巴克,29164 Valley Java 有机咖啡和茶,30348
1000 米区域的第二个列表:
SimplexiTea,237 蓝瓶咖啡,371 仪式咖啡烘焙机,455 Mavelous Coffee Bar 和 Little Griddle,122 城市仪式,576 全明星咖啡厅,412 皮特的咖啡,272 水星咖啡馆,445 库迈加,317 六分仪咖啡烘焙机,633 星球咖啡馆 SF,293 菲尔兹咖啡,734 视镜咖啡,985 爪哇咖啡馆,115 尼娜的咖啡馆,219 La Boulangerie,526 娜雅甜品咖啡厅,549 四桶咖啡,900 咖啡文化,436 V 咖啡厅,603 星巴克,309 星巴克,256 约翰尼甜甜圈,564 佛卡夏市场和面包店,645
我希望我在这里遗漏了一些简单的东西。我收到的结果显然是 无用。任何指导将不胜感激。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。