Как нарисовать многоугольник с помощью Apple Map от MKPolygon

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

      let points1 = CLLocationCoordinate2DMake(24.63743783432579,77.323397508938)
let points12 = CLLocationCoordinate2DMake(24.65085603700094,77.316960207723)

let points13 = CLLocationCoordinate2DMake(24.64453717929222,77.309578768996)
let points14 = CLLocationCoordinate2DMake(24.64640946676303,77.336872926149)

coordinates.append(points1)
coordinates.append(points12)
coordinates.append(points13)
coordinates.append(points14)
print(coordinates.count)
let polygon = MKPolygon(coordinates: &coordinates, count: coordinates.count)
polygon.title = "33"
polygon.subtitle = ""
mapView.addOverlay(polygon)

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

      func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
    let identifier = "Annotation"
    var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: identifier)
    if annotationView == nil {
        annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: identifier)
        annotationView!.image =  some_image
        annotationView!.canShowCallout = true
    }
    else {
        annotationView!.annotation = annotation
        annotationView!.image = some_image
    }
    return annotationView
}

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

Фактическое изображение

Ожидал:

Я что-то упустил в свойстве карты?

1 ответ

Вы получаете эту форму из-за порядка координат.

Например, вы дали нам четыре координаты (хотя на вашей карте их пять) в следующем порядке:

      let coordinates = [
    CLLocationCoordinate2DMake(24.63743783432579,77.323397508938),
    CLLocationCoordinate2DMake(24.65085603700094,77.316960207723),
    CLLocationCoordinate2DMake(24.64453717929222,77.309578768996),
    CLLocationCoordinate2DMake(24.64640946676303,77.336872926149)
]

Покажем это наложение (и обозначим координаты):

Если исправить порядок координат ...

      let coordinates = [
    CLLocationCoordinate2DMake(24.63743783432579,77.323397508938),
    CLLocationCoordinate2DMake(24.64453717929222,77.309578768996),
    CLLocationCoordinate2DMake(24.65085603700094,77.316960207723),
    CLLocationCoordinate2DMake(24.64640946676303,77.336872926149)
]

Тогда вы получите многоугольник, как и ожидали:

Теперь на вашем изображении есть пять координат, но проблема та же, что координаты находятся в неправильном порядке (и поскольку многоугольник пересекает сам себя, он применяет правило заливки по умолчанию, которое вырезает центр). Но исправьте порядок координат так, чтобы они касались периметра многоугольника, и проблема будет решена.

Другие вопросы по тегам