Подтвердить что ты не робот

Как установить границы для координатного массива с Google Maps sdk для iOS?

Как установить границы для массива координат с картами Google sdk для iOS? Мне нужно масштабировать карту для 4 видимых маркеров.

4b9b3361

Ответ 1

Вот мое решение этой проблемы. Построение объекта GMSCoordinateBounds по нескольким координатам.

- (void)focusMapToShowAllMarkers
{       
    CLLocationCoordinate2D myLocation = ((GMSMarker *)_markers.firstObject).position;
    GMSCoordinateBounds *bounds = [[GMSCoordinateBounds alloc] initWithCoordinate:myLocation coordinate:myLocation];

    for (GMSMarker *marker in _markers)
        bounds = [bounds includingCoordinate:marker.position];

    [_mapView animateWithCameraUpdate:[GMSCameraUpdate fitBounds:bounds withPadding:15.0f]];
}

Обновленный ответ: поскольку GMSMapView маркеров GMSMapView устарело, вы должны сохранить все маркеры в своем собственном массиве.

обновленный ответ swift 3:

    func focusMapToShowAllMarkers() {
        let firstLocation = (markers.first as GMSMarker).position
        var bounds = GMSCoordinateBoundsWithCoordinate(firstLocation, coordinate: firstLocation)

        for marker in markers {
            bounds = bounds.includingCoordinate(marker.position)
        }
        let update = GMSCameraUpdate.fitBounds(bounds, withPadding: CGFloat(15))
        self.mapView.animate(cameraUpdate: update)
  }

Ответ 2

Swift 3.0 версия ответа Lirik:

func focusMapToShowAllMarkers() {
    let myLocation: CLLocationCoordinate2D = self.markers.first!.position
    var bounds: GMSCoordinateBounds = GMSCoordinateBounds(coordinate: myLocation, coordinate: myLocation)

    for marker in self.markers {
        bounds = bounds.includingCoordinate(marker.position)
        self.mapView.animate(with: GMSCameraUpdate.fit(bounds, withPadding: 15.0))
    }
}

И вот мой собственный путь:

func focusMapToShowMarkers(markers: [GMSMarker]) {

    guard let currentUserLocation = self.locationManager.location?.coordinate else {
        return
    }

    var bounds: GMSCoordinateBounds = GMSCoordinateBounds(coordinate: currentUserLocation,
                                                          coordinate: currentUserLocation)

    _ = markers.map {
        bounds = bounds.includingCoordinate($0.position)
        self.mapView.animate(with: GMSCameraUpdate.fit(bounds, withPadding: 15.0))
    }
}

И вы можете вызвать мою функцию выше:

self.focusMapToShowMarkers(markers: [self.myLocationMarker, currentPokemonMarker])

Ответ 3

На данный момент Google наконец-то реализовал GMSCoordinateBounds, вы можете использовать его с помощью GMSCameraUpdate.

Подробнее см. официальное reference.

Ответ 4

Swift 5 версия ответа Лирика:

    func focusMapToShowAllMarkers() {

        if arrMarkers.count > 0 {
            let firstLocation = (arrMarkers.first!).position
            var bounds = GMSCoordinateBounds(coordinate: firstLocation, coordinate: firstLocation)

            for marker in arrMarkers {
              bounds = bounds.includingCoordinate(marker.position)
            }

           let update = GMSCameraUpdate.fit(bounds, withPadding: CGFloat(15))
           self.mapView.animate(with: update)
        }
    }