Как автоматически масштабировать MapView, чтобы показать наложение - PullRequest
2 голосов
/ 05 ноября 2019

Я могу нарисовать многоугольник на mapView, но мне нужно найти многоугольник и увеличить его вручную. Есть ли способ сделать этот процесс автоматически, как настроить многоугольник в центре? Я просмотрел интернет и прочитал несколько статей, большинство из которых основаны на полилиниях и точках. Буду признателен за любую помощь, так как я некоторое время нахожу решение. Заранее спасибо.

Используя следующие методы для рисования многоугольника на mapView: -

func drawFence(coordinates: UnsafePointer<CLLocationCoordinate2D>, count: Int) {
        let makePoly = MKPolygon(coordinates: coordinates, count: count)
        mapview.addOverlay(makePoly)
    }

func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
    guard let polyOverlay = overlay as? MKPolygon else { return MKOverlayRenderer() }
    let polyRender = MKPolygonRenderer(polygon: polyOverlay)
    polyRender.fillColor = #colorLiteral(red: 0.9764705882, green: 0.09803921569, blue: 0.2588235294, alpha: 0.6)
    polyRender.strokeColor = #colorLiteral(red: 0.9764705882, green: 0.09803921569, blue: 0.2588235294, alpha: 1)
    polyRender.lineWidth = 2
    return polyRender
}

1 Ответ

0 голосов
/ 06 ноября 2019

Если вы пытаетесь увеличить конкретный оверлей, вы можете:

let insets = UIEdgeInsets(top: 50, left: 50, bottom: 50, right: 50)

func zoom(for overlay: MKOverlay) {
    mapView.setVisibleMapRect(overlay.boundingMapRect, edgePadding: insets, animated: true)
}

enter image description here


Если вы хотите увеличитькарту, чтобы показать все наложения, вы можете сделать:

func zoomForAllOverlays() {
    guard let initial = mapView.overlays.first?.boundingMapRect else { return }

    let mapRect = mapView.overlays
        .dropFirst()
        .reduce(initial) { $0.union($1.boundingMapRect) }

    mapView.setVisibleMapRect(mapRect, edgePadding: insets, animated: true)
}

Например, добавив два наложения (над Нью-Йорком и Стэмфордом), я вызвал эту процедуру, и это привело к:

mapview w two overlays


Кстати, я знаю, что вопрос был о Polygon оверлеях, но техника работает независимо от типа оверлея. Просто было проще создать Circle оверлеи для демонстрационных целей.

...