gpt4 book ai didi

ios - 在 swift 4 中使用 firebase 实时数据库进行实时运输跟踪

转载 作者:行者123 更新时间:2023-11-29 05:49:18 25 4
gpt4 key购买 nike

如何像 ola、Uber 一样实时跟踪交通。在我的应用程序中,有两种类型的用户:驱动程序、用户。我想连续跟踪驾驶员位置并在谷歌地图上实时向用户显示。我正在使用 swift 4.2 xocode 10.1。任何文档或任何指导都会很多。

我已经安装了谷歌地图,并指出了起始位置和下降位置,并使用

绘制了一条折线路线

https://maps.googleapis.com/maps/api/directions/json?origin this api.

我还可以从以下位置获取驱动程序的当前位置func locationManager(_ manager: CLLocationManager, didUpdateLocationslocations: [CLLocation]) 方法。

我读了一些关于实时跟踪的文章文档,就像我必须连续获取驱动程序的 GPS 位置并将其发送到 Firebase 实时数据库,然后我再次从 Firebase 用户获取位置并必须移动汽车图像以及用户端的位置。

我做了同样的事情,我将驱动程序位置发送到数据库,并且也可以获取该位置,但无法进一步继续,请帮助。提前致谢

var locationRefrence: StorageReference {
return Storage.storage().reference().child("Locations")
}

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {

guard let locValue: CLLocationCoordinate2D = manager.location?.coordinate else { return }
print("locations = \(locValue.latitude) \(locValue.longitude)")

if mapViewObj == nil {
mapViewObj = GMSMapView()

let camera = GMSCameraPosition.camera(withLatitude: locValue.latitude, longitude: locValue.longitude, zoom: 16.0)
mapViewObj = GMSMapView.map(withFrame: self.mapView.frame, camera: camera)
mapViewObj.delegate = self
mapViewObj.isMyLocationEnabled = true
mapViewObj.settings.myLocationButton = true

self.mapView.addSubview(mapViewObj)
}

let location = "\(locValue.latitude) \(locValue.longitude)"

firebaseUpload(location: location)
}

func firebaseUpload(location: String) {
let uploadLocationRef = locationRefrence.child("location")
let locationData = location.data(using: .utf8)

let uploadTask = uploadLocationRef.putData(locationData!, metadata: nil) { (metadata, error) in
print(metadata ?? "No metadata")
print(error ?? "No error")
}

uploadTask.observe(.progress) { (snapshot) in
print(snapshot.progress ?? "No progress")
}

uploadTask.resume()
}

func fetchLocationFromFirebase() {
let downloadLocationRef = locationRefrence.child("location")

let downloadTask = downloadLocationRef.getData(maxSize: 1024 * 1024 * 12) { (data, error) in
if let data = data {
let locationStr = String(data: data, encoding: .utf8)
print("Fetched Locations : \(locationStr ?? "Nothing fetched...")")
}
print(error ?? "No error")
}

downloadTask.observe(.progress) { (snapshot) in
print(snapshot.progress ?? "No progress")
}

downloadTask.resume()
}

最佳答案

我认为你的问题在这里:

let downloadTask = downloadLocationRef.getData(maxSize: 1024 * 1024 * 12) { (data, error) in

我不知道你为什么要这样做?这不是首先获取数据的好方法,而且它只获取现在存在的数据,不会监视任何更新,因此我认为您需要对 Firebase 的实时数据库进行更多研究。

对于这种特殊情况,您希望在位置更新时随时更新,以便您可以观察“位置”子项的变化

refHandle = postRef.observe(DataEventType.value, with: { (snapshot) in
let postDict = snapshot.value as? [String : AnyObject] ?? [:]
// ...
})

这将为您提供位置表每次更新时的数据快照

引用:https://firebase.google.com/docs/database/ios/read-and-write

关于ios - 在 swift 4 中使用 firebase 实时数据库进行实时运输跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55844635/

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