Вращающаяся камера Mapbox - PullRequest
0 голосов
/ 10 июля 2019

Я использую Mapbox в своем проекте iOS с языком Swift. В настоящее время я ищу способ программно повернуть вид карты на фиксированную высоту с определенными координатами внутри. Я много пробовал и даже просмотрел их Справочник по API, но не смог найти никакой помощи.

Кто-нибудь пытался сделать что-то подобное, в котором MapView постоянно вращается, удерживая определенные координаты в границах, используя библиотеку MAPBOX.

Помощь будет очень признателен.

Ответы [ 2 ]

1 голос
/ 15 июля 2019

Спасибо @riastrad за руководство и я придумала кучу кода, который может помочь реализовать эту функцию.

Обмен со всеми, чтобы они могли получить помощь, если им требуется:

Код для Swift 4.2

//Create a bound using two coordinates.
let coordinateBounds = MGLCoordinateBounds(sw: coordinateOne, ne: coordinateTwo)
//Add Insets for the bounds if needed
let mapEdgeInsets = UIEdgeInsets(top: 10.0, left: 0.0, bottom: 0.0, right: 10.0)
//get the camera that fit those bounds and edge insets
let camera = self.mapView.cameraThatFitsCoordinateBounds(coordinateBounds, edgePadding: mapEdgeInsets)
//Update camera pitch (if required)
camera.pitch = 60
//setup CameraHeading 
let zoomLevel = self.mapView.zoomLevel
var cameraHeading = camera.heading
if zoomLevel > 14 {
    cameraHeading += 2.2
} else {
    cameraHeading += 0.7
}
if cameraHeading > 359 {
    cameraHeading = 1
}
camera.heading = cameraHeading
//set new camera with animation
let newCamera = camera
self.mapView.setCamera(newCamera, withDuration: 0.1, animationTimingFunction: CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut))

поместите вышеуказанный набор кода в метод и вызывайте этот метод каждые 0,1 секунды.

private func enableRotationTimer(_ enable:Bool) {
    guard self.store != nil else { return }
    if enable == true {
        if mapRotationTimer == nil {
            mapRotationTimer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(rotateCamera), userInfo: nil, repeats: true)
        }
    } else {
        mapRotationTimer?.invalidate()
        mapRotationTimer = nil
    }
}

Надеюсь, это поможет другим. Спасибо

1 голос
/ 10 июля 2019

Функция setCamera позволяет вам передавать функцию анимации.Вы можете увидеть пример этого здесь: https://docs.mapbox.com/ios/maps/examples/camera-animation/

Для ограничения границ вашей карты камеры, это требует некоторой ловкости рук и немного вычислений, чтобы определить, где находится камера по отношению к границам, которые выхотел бы установить.Вы можете найти пример этого здесь: https://docs.mapbox.com/ios/maps/examples/constraining-gestures/

Исходя из того, как вы сформулировали свой вопрос, кажется, что вам нужно объединить эти два подхода.


⚠️ отказ от ответственности: в настоящее время я работаю в Mapbox⚠️

...