有类似命名的问题,例如this one,但这不是我正在寻找的。 p>
基本上我在标准地图上画了一堆MKPolygon
s给他们一个笔画,一个随机颜色等等。我希望能够"命名&# 34;他们,添加标签或者带有标签的UIView,看起来不错。这可能吗?
这是我的地图的样子
这是实施
func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
if overlay is MacaronMKPolygon {
let macaronOverlay = overlay as! MacaronMKPolygon
let polygonView = MKPolygonRenderer(overlay: macaronOverlay)
polygonView.strokeColor = UIColor.gray
polygonView.lineWidth = 1
polygonView.alpha = shouldShowMacaron ? 1.0 : 0.0
polygonView.fillColor = macaronOverlay.color
return polygonView
}
return MKOverlayRenderer()
}
答案 0 :(得分:2)
1.找到多边形坐标的中心点
func getCenterCoord(_ LocationPoints: [CLLocationCoordinate2D]) -> CLLocationCoordinate2D{
var x:Float = 0.0;
var y:Float = 0.0;
var z:Float = 0.0;
for points in LocationPoints {
let lat = GLKMathDegreesToRadians(Float(points.latitude));
let long = GLKMathDegreesToRadians(Float(points.longitude));
x += cos(lat) * cos(long);
y += cos(lat) * sin(long);
z += sin(lat);
}
x = x / Float(LocationPoints.count);
y = y / Float(LocationPoints.count);
z = z / Float(LocationPoints.count);
let resultLong = atan2(y, x);
let resultHyp = sqrt(x * x + y * y);
let resultLat = atan2(z, resultHyp);
let result = CLLocationCoordinate2D(latitude: CLLocationDegrees(GLKMathRadiansToDegrees(Float(resultLat))), longitude: CLLocationDegrees(GLKMathRadiansToDegrees(Float(resultLong))));
return result;
}
2.在viewforAnnotation
中的MKAnnotationView中获取中心位置标签后 func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
if (annotation.isKind(of: MKUserLocation.self)) {
return nil
}
//annotation class
if annotation.isKind(of: ZoneNameAnnotationModal.self) {
let anView = MKAnnotationView(annotation: annotation, reuseIdentifier: "zoneNameInMiddle")
let ann = annotation as! ZoneNameAnnotationModal
let height = 30
let altitudeVw = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: height))
let lblTitle = UILabel(frame: CGRect(x: 0, y: 0, width: 100, height: height))
lblTitle.font = lblTitle.font.withSize(10)
lblTitle.text = ann.title
lblTitle.numberOfLines = 10
lblTitle.textAlignment = NSTextAlignment.center
lblTitle.textColor = UIColor.black
lblTitle.backgroundColor = UIColor.clear
altitudeVw.layer.cornerRadius = 6.0
altitudeVw.layer.borderWidth = 1.0
altitudeVw.layer.borderColor = UIColor.black.cgColor
altitudeVw.backgroundColor = UIColor(red: 255.0/255, green: 255.0/255, blue: 255.0/255, alpha: 0.70)
altitudeVw.addSubview(lblTitle)
anView.addSubview(altitudeVw)
return anView
}
return nil
}
答案 1 :(得分:0)
因此MKPolygon的一个好处是它的核心实际上是一种MKMultiPoint,它继承自MKShape,它是MKAnnotation的子类。只需按照MKPolygon下的文档进行操作。
所有这一切的最好部分是MKPolygon需要符合MKAnnotation,因此定义坐标的属性。这被定义为注释的中心。
polygonView.coordinate
因此,这将为您提供Apple定义的多边形的中心。现在不幸的是,你的多边形的奇怪形状可能不是真正的中心,但应该足够接近。当我们从Apple免费获得一些东西时很好。
使用此坐标,您可以创建MKAnnotation和MKAnnotationView以覆盖叠加层。