我使用这种方法来检查用户位置是否在地图视图(mapkit)上的多边形内。我将当前用户位置 (CLLocationCoordinate2D) 传递给该方法并返回一个布尔值,以了解用户是否在多边形中。
func userInsidePolygon(userlocation: CLLocationCoordinate2D ) -> Bool{
// get every overlay on the map
let o = self.mapView.overlays
// loop every overlay on map
for overlay in o {
// handle only polygon
if overlay is MKPolygon{
let polygon:MKPolygon = overlay as! MKPolygon
let polygonPath:CGMutablePathRef = CGPathCreateMutable()
// get points of polygon
let arrPoints = polygon.points()
// create cgpath
for (var i:Int=0; i < polygon.pointCount; i++){
let mp:MKMapPoint = arrPoints[i]
if (i == 0){
CGPathMoveToPoint(polygonPath, nil, CGFloat(mp.x), CGFloat(mp.y))
}
else{
CGPathAddLineToPoint(polygonPath, nil, CGFloat(mp.x), CGFloat(mp.y))
}
}
let mapPointAsCGP:CGPoint = self.mapView.convertCoordinate(userlocation, toPointToView: self.mapView)
return CGPathContainsPoint(polygonPath , nil, mapPointAsCGP, false)
}
}
return false
}
我真的不明白为什么,但在这个测试之后,用户永远不会在多边形内。(我很确定他是)
我认为我可能对 x,y 的 lat/long 有逻辑问题。
有人已经有过这样的工作吗?
提前感谢所有建议。
干杯