【问题标题】:How to draw a polygon using Apple Map by MKPolygon如何使用 MKPolygon 的 Apple Map 绘制多边形
【发布时间】:2021-08-22 14:02:42
【问题描述】:

我在以下坐标的帮助下创建了一个多边形。多边形在地图上看起来很好,但我想知道多边形的形状。在下面的代码中,我编写了一个多边形。

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
}

我在这里附上了两张图片,它们在 UI 上显示了最终结果,这不是预期的。

实际图像

预期:

我在地图属性中是否遗漏了什么?

【问题讨论】:

    标签: ios swift apple-maps mkpolygon mkpolygonrenderer


    【解决方案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)
    ]
    

    然后你会得到一个你期望的多边形:

    现在,在您的图像中,您有五个坐标,但问题是相同的,即坐标的顺序不正确(并且由于多边形与自身相交,它应用了切除中心的默认填充规则)。但是固定坐标的顺序,使它们在多边形的周长上划过,问题就会得到解决。

    【讨论】:

    • 谢谢,您的解决方案几乎节省了我的时间,但我在这里有一个查询。我怎么知道坐标数组不按顺序排列。我应该从 API 或本地获得任何关键值吗?
    • 我不知道有任何 API 可以为您做到这一点。但是一种方法是从某个中心点计算每个坐标的角度(例如,您的中心注释?几何平均值?),然后按各自的角度对坐标进行排序。见community.esri.com/t5/geoprocessing-questions/…
    • 为了全面披露,如果您的多边形不是凸的,那么这种顺时针排序算法虽然高效且简单,但可能并不理想。到那时,它可能会变成经典的(并且计算上更复杂)traveling salesman problem
    • 好的,谢谢,上面的解决方案完全符合我的要求。
    猜你喜欢
    • 1970-01-01
    • 2020-02-12
    • 1970-01-01
    • 1970-01-01
    • 2014-03-03
    • 2015-08-02
    • 2019-06-23
    • 1970-01-01
    • 2011-01-16
    相关资源
    最近更新 更多