如何使用 MKPolygon 的 Apple Map 绘制多边形
How to draw a polygon using Apple Map by 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
}
我在这里附上了两张图片,显示了 UI 上的最终结果,这不是预期的。
实际图像
预计:
我在地图 属性 中遗漏了什么吗?
你得到那个形状是因为坐标的顺序。
例如,您按以下顺序给了我们四个坐标(虽然您的地图有五个):
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)
]
然后你会得到一个你期望的多边形:
现在,在您的图像中,您有五个坐标,但问题是相同的,即坐标的顺序不正确(并且由于多边形与自身相交,它应用了默认的填充规则,该规则切除了中心).但是固定坐标的顺序,使它们划过多边形的周长,问题就会解决。
我正在借助以下坐标创建一个多边形。多边形在地图上看起来很好,但我想知道多边形的形状。在下面的代码中,我写了一个多边形。
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 上的最终结果,这不是预期的。
实际图像
预计:
我在地图 属性 中遗漏了什么吗?
你得到那个形状是因为坐标的顺序。
例如,您按以下顺序给了我们四个坐标(虽然您的地图有五个):
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)
]
然后你会得到一个你期望的多边形:
现在,在您的图像中,您有五个坐标,但问题是相同的,即坐标的顺序不正确(并且由于多边形与自身相交,它应用了默认的填充规则,该规则切除了中心).但是固定坐标的顺序,使它们划过多边形的周长,问题就会解决。