mapkit-ios-demo icon indicating copy to clipboard operation
mapkit-ios-demo copied to clipboard

Проекция координат на экране

Open Ernest0-Production opened this issue 2 years ago • 1 comments

Пытаюсь вручную вычислить позицию камеры и зума при котором будет видна некоторая прямоугольная область, зная, что в SDK есть метод map.camera(for: bounds):

// на вход передаем visibleCoordinateBounds: YMKBoundingBox

let visibleBoundsInPoints = ( 
  northEast: mapView.mapWindow.worldToScreen(withWorldPoint: visibleCoordinateBounds.northEast)!,
  southWest: mapView.mapWindow.worldToScreen(withWorldPoint: visibleCoordinateBounds.southWest)!
)

let visibleBoundsRect = CGRect(
  origin: CGPoint(
      x: visibleBoundsInPoints.southWest.x,
      y: visibleBoundsInPoints.northEast.y
    ),
    size: CGSize(
      width: abs(visibleBoundsInPoints.northEast.x - visibleBoundsInPoints.southWest.x),
      height: abs(visibleBoundsInPoints.southWest.y - visibleBoundsInPoints.northEast.y)
    )
)

let scale = paw(2, map.cameraPosition.zoom)

let zoomToFit = min(
      log2(mapWindow.width() / visibleBoundsRect.width * scale),
      log2(mapWindow.height() / visibleBoundsRect.height * scale)
)

let centerCoordinate = mapView.mapWindow.screenToWorld(with: YMKPoint( 
  x: visibleBoundsRect.midX,
  y: visibleBoundsRect.midY
))

return (centerCoordinate, zoomToFit)

И при сравнении с результатами при расчете через map.camera(for: bounds) все сходится, но только до определенного момента: Как только текущий zoom карты становится 12>, zoomToFit не совпадает с тем, что отдает map.camera(for: bounds). zoomToFit получается немного больше, и при попытке узнать visibleRegion при таком зуме, границы действительно меньше, чем visibleCoordinateBounds под который этот зум вычислялся.

Начиная с zoom 12 и выше, разница между ожидаемым и вычисленным зумом составляет около 1 (единицы)

Что тут упускается?

Ernest0-Production avatar Aug 16 '22 08:08 Ernest0-Production

Проверил этот алгоритм в GoogleMaps и там таких траблов нет 🤔

Ernest0-Production avatar Aug 16 '22 12:08 Ernest0-Production