gpt4 book ai didi

ios - 检查用户位置是否在形状内

转载 作者:搜寻专家 更新时间:2023-11-01 06:40:31 25 4
gpt4 key购买 nike

我使用此方法来检查用户位置是否在 map View (mapkit) 上的多边形内。我将当前用户位置 (CLLocationCoordinate2D) 传递给该方法并返回一个 bool 值,以了解用户是否在多边形中。

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
}

我真的不明白为什么,但是在这次测试之后用户永远不会在多边形内。 (我很确定他是)

我认为我可能对 lat/long 与 x,y 之间存在逻辑问题。

有没有人已经有这样的工作了?

提前感谢所有建议。

干杯

最佳答案

问题是您正在将 userLocation 从 map 坐标转换为 View 坐标,但是当您构建路径时,您没有将点转换为 View 坐标。

您需要将 MKMapPoint 转换为 CLLocationCoordinate2D,然后再转换为 CGPoint

let polygonMapPoint: MKMapPoint = arrPoints[i]
let polygonCoordinate = MKCoordinateForMapPoint(polygonPoint)
let polygonPoint self.mapView.convertCoordinate(polygonPointAsCoordinate, toPointToView: self.mapView)

然后在构建路径时使用polygonPoint

CGPathMoveToPoint(polygonPath, nil, polygonPoint.x, polygonPoint.y)

关于ios - 检查用户位置是否在形状内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36016764/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com