gpt4 book ai didi

ios - 如何在 swift/iOS 中更新谷歌地图标记位置

转载 作者:可可西里 更新时间:2023-11-01 02:18:09 25 4
gpt4 key购买 nike

我想要多个标记并根据来自服务器的新数据更新它们的位置。这就是我在 map 上显示标记的方式(基本内容):

func showMarkerOnMap() {
mapView.clear() //<- That's GMSMapView
for all in dataFromServer {
let lat5 = all.latitude
let lon5 = all.longitude
let position = CLLocationCoordinate2DMake(lat5, lon5)
let marker = GMSMarker(position: position)
marker.flat = true
marker.map = self.mapView
}
}

这就是我使用 Alamofire 获取 dataFromServer 的方式:

var dataFromServer = [dataClass]()
func getCoordinatesFromServer(){

//Here goes headers and authentication data

Alamofire.request(.GET, URL, headers: headers).authenticate(user: oranges, password: appels).responseJSON { response in
switch response.result {
case .Success:
//Remove existing dataFromServer
self.dataFromServer.removeAll()

if let value = response.result.value {
let json = JSON(value)

for result in json.arrayValue {
let lat = result["latitude"].doubleValue
let lon = result["longitude"].doubleValue

let zip = dataClass(latitude: lat, longitude: lon)
//The next part is for checking that coordinates do not overlap
if self.dataFromServer.count < 1 {
self.dataFromServer.append(zip)
} else {
for all in self.dataFromServer {
guard all.latitude != lat else {
return
}
self.trblInfo1.append(zip)
}
}
}
//This should update existing markers?
self.showMarkerOnMap()
}
case .Failure(let error):
print(error)
}
}
}

基本上我只是将所有接收到的数据附加到属于 dataClass 类的 dataFromServer:

class dataClass: NSObject {
var latitude: Double
var longitude: Double

init(latitude: Double, longitude: Double) {
self.latitude = latitude
self.longitude = longitude
}
}

我的 getCoordinatesFromServer() 函数每 3 秒被调用一次(目前)。我期望收到新坐标(我确实收到了它们),然后应该调用 showMarkerOnMap() 从而清除所有现有标记并创建新闻。我得到的 - 标记重复和明显的滞后。如果转到另一个 View 然后返回包含 mapView 的 View ,则原始标记会消失。

关于如何改进我的代码或一些替代方案的任何建议?

最佳答案

如果您有来自服务器的任何类型的位置唯一标识符,您可以保留一个标记列表,然后在新数据到达时更新它们的位置。像这样:

for result in json.arrayValue {

let lat = result["latitude"].doubleValue
let lon = result["longitude"].doubleValue

let identifier = result["identifier"] as! String
self.myMarkersDictionary[identifier]?.position.latitude = lat
self.myMarkersDictionary[identifier]?.position.longitude = lon
...
}

关于ios - 如何在 swift/iOS 中更新谷歌地图标记位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34594635/

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