gpt4 book ai didi

swift - 如何最好地从 Web 服务器加载 MapView 的位置

转载 作者:IT王子 更新时间:2023-10-29 05:21:56 25 4
gpt4 key购买 nike

我在 Web 数据库中有大约 2000 个位置,用户应该能够在 map 上选择这些位置。我可以要求 Web 数据库仅提供源自当前位置的一定数量的位置。

为了使一切顺利和优雅,我首先要实例化 MKMapView,启动 CLLocationManager 并等待直到我获得 didUpdateLocations。然后我会尝试使用完成处理程序从数据库中获取我的数据。

我应该

a) 一次获取所有数据

b) 以小块或 block 的形式获取数据?

最好的方法是什么?

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
self.gotoCurrentLocation()
if let userLocation = manager.location {
GroundHelper.getAllGroundLocations(userLocation) { self.handleWaypoints($0!) }
}
}

private func handleWaypoints(grounds: [Ground]) {
mapView.addAnnotations(grounds)
}

// MARK: - Helper Methods

typealias GPXCompletionHandler = ([Ground]?) -> Void

class func getAllGroundLocations(userlocation: CLLocation, completionHandler: GPXCompletionHandler) {

let priority = DISPATCH_QUEUE_PRIORITY_DEFAULT
dispatch_async(dispatch_get_global_queue(priority, 0), { ()->() in
var results = RestApiManager.sharedInstance.getGPS(userlocation, limit: 50)

// return first 50 results
dispatch_async(dispatch_get_main_queue(), {

var grounds = [Ground]()
for result in results {
let (_,jsonGround) = result
let ground = Ground(json:jsonGround)
grounds.append(ground)
}
completionHandler(grounds)
})

// get the rest
results = RestApiManager.sharedInstance.getGPS(userlocation)

// return them
dispatch_async(dispatch_get_main_queue(), {

var grounds = [Ground]()
for result in results {
let (_,jsonGround) = result
let ground = Ground(json:jsonGround)
grounds.append(ground)
}
completionHandler(grounds)

})
})
}

最佳答案

一次获取所有数据是不可扩展的。您可能会及时处理 2000 个条目,但如果数据集增长怎么办?你能处理3000吗? 5000? 10000 个注释?

以 block 的形式获取数据,仅返回 map 中心位置附近的条目,并在用户在 map 上移动时显示这些条目更有意义。然而,这种方法非常慢,因为在用户拖动 map 和注释出现在屏幕上之间通常有很长的延迟(网络请求本质上很慢)。

因此,为了获得出色的用户体验,推荐的方法是在本地缓存结果。如果您有本地数据库(例如 Core Data),您可以执行此操作,或者您可以使用 NSCache 执行此操作。

使用这种方法,当用户在 map 上移动时,您将向服务器发送新请求,但返回的结果数量可以限制为 20、50 或 100 react 灵敏)。

接下来,您将在 map 上呈现缓存结果中的所有注释,因此注释的数量会随着用户在 map 上的移动而增加。

来自 http://realm.io 的人有一个很好的视频解释了这种方法:https://www.youtube.com/watch?v=hNDNXECD84c虽然您不需要使用他们的移动数据库 (Realm),但您可以了解应用程序架构和设计。

关于swift - 如何最好地从 Web 服务器加载 MapView 的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32923009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com