Как анимировать Google Map к текущим позициям маркера и рисовать линии в Swift - PullRequest
0 голосов
/ 24 января 2019

Я получаю местоположения от Firestore и успешно показываю маркер на определенных местоположениях на карте Google, но проблема, с которой я сталкиваюсь, когда я запускаю приложение в симуляторе, не соответствует текущим позициям маркера. И я не знаю, как я могу нарисовать маршрут между маркерами. Пожалуйста, помогите?

Вот код получения локаций из Firestore в быстром темпе.

for document in snapshot!.documents {
print(document.data())
let marker = GMSMarker()

self.location.append(Location(trackingData: document.data()))

print(self.location)

let latitude = document.data()["Latitude"] ?? 0
print(latitude)
let longitude = document.data()["longitude"] ?? 0
print(longitude)

    marker.position = CLLocationCoordinate2D(latitude: latitude as! CLLocationDegrees , longitude: longitude as! CLLocationDegrees)
    marker.map = self.mapView
    marker.userData = self.location
    marker.icon = UIImage(named: "marker")
    print("Data stored in marker \(marker.userData!)")
 }

enter image description here

1 Ответ

0 голосов
/ 24 января 2019

Вы можете достичь этого с помощью GMSCoordinateBounds

Ссылка: https://stackoverflow.com/a/45169325/8447312

Имейте объект bounds перед циклом for:

var bounds = GMSCoordinateBounds()

Тогда в вашем дляВ цикле вы сделаете положение каждого маркера включенным в объект Bounds:

var bounds = GMSCoordinateBounds()

for document in snapshot!.documents {
    print(document.data())
    let marker = GMSMarker()

    self.location.append(Location(trackingData: document.data()))
    let latitude = document.data()["Latitude"] ?? 0
    let longitude = document.data()["longitude"] ?? 0

    marker.position = CLLocationCoordinate2D(latitude: latitude as! CLLocationDegrees , longitude: longitude as! CLLocationDegrees)
    marker.map = self.mapView
    marker.userData = self.location
    marker.icon = UIImage(named: "marker")

    //include position for each marker
    bounds = bounds.includingCoordinate(marker.position)
 }

 //when your loop is completed you included all your marker's coordinate in your bounds now, you need to animate:

 mapView.animate(with: GMSCameraUpdate.fit(bounds, with: UIEdgeInsets(top: 20.0, left: 20.0, bottom: 20.0, right: 20.0)))

Я дал 20 вставок для каждой стороны, вы можете изменить его на значение по вашему желанию.

О чертежестроки попробуйте это:

Создайте путь прямо над вами, создайте границы:

let path = GMSMutablePath()

Затем в цикле for добавьте позицию каждого маркера в этот путь, как вы сделали для границ:

path.add(marker.position)

В конце, перед анимацией вашей карты, создайте такие направления, как:

let directions = GMSPolyline(path: path)
directions.strokeWidth = 1.0
directions.map = mapView

Весь код (пути добавлены):

var bounds = GMSCoordinateBounds()
var path = GMSMutablePath()

for document in snapshot!.documents {
    print(document.data())
    let marker = GMSMarker()

    self.location.append(Location(trackingData: document.data()))
    let latitude = document.data()["Latitude"] ?? 0
    let longitude = document.data()["longitude"] ?? 0

    marker.position = CLLocationCoordinate2D(latitude: latitude as! CLLocationDegrees , longitude: longitude as! CLLocationDegrees)
    marker.map = self.mapView
    marker.userData = self.location
    marker.icon = UIImage(named: "marker")

    bounds = bounds.includingCoordinate(marker.position)
    path.add(marker.position)
 }

 let directions = GMSPolyline(path: path)
 directions.strokeWidth = 1.0
 directions.map = mapView

 mapView.animate(with: GMSCameraUpdate.fit(bounds, with: UIEdgeInsets(top: 20.0, left: 20.0, bottom: 20.0, right: 20.0)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...