微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在cgPath上的两个坐标之间添加中间点

如何解决在cgPath上的两个坐标之间添加中间点

我们有一个函数,该函数基于CLLocationCoordinate2D数组创建路径,该数组包含4个坐标,并将创建具有正方形形状的路径:

func createPath(coordinates: [CLLocationCoordinate2D]) {
    for (index,coordinate) in coordinates.enumerated() {
        if index == 0 {
            path.move(to: CGPoint(x: coordinate.latitude,y:coordinate.longitude))
        } else {
            path.addLine(to: CGPoint(x: coordinate.latitude,y: coordinate.longitude))
        }
    }
}

我们还有一个函数可以计算两个CGPoint之间的中间点:

   func getMiddlePoint(firstPoint: CGPoint,secondPoint: CGPoint) -> CGPoint {
        
        var middlePoint = CGPoint()
        
        middlePoint.x = (firstPoint.x + secondPoint.x)/2
        middlePoint.y = (firstPoint.y + secondPoint.y)/2
        return middlePoint
    }

我们想要的是每侧获得4分,然后再移动到另一侧。我试过合并这样的函数,但它返回大约90点:

func createPath(coordinates: [CLLocationCoordinate2D]) {
    for (index,y: coordinate.longitude))//get the first point
            path.addLine(to:  getMiddlePoint(firstPoint: CGPoint(x: coordinate.latitude,y: coordinate.longitude),secondPoint: CGPoint(x: coordinate.latitude,y: coordinate.longitude))) // get the middle point
        }
    }
}

这是坐标经过硬编码后的样子,每边返回2点:

func createPath(){
    path.move(to: CGPoint(x: 32.7915055,y: -96.8028408))//1
    path.addLine(to: CGPoint(x: 32.79174845,y: -96.80252195))//midpoint between 1 and 2
    path.addLine(to: CGPoint(x: 32.7919914,y: -96.8022031))//2
    path.addLine(to: CGPoint(x: 32.791501100000005,y: -96.80235195))////midpoint between 2 and 3
    path.addLine(to: CGPoint(x: 32.7910108,y: -96.8025008))//3
    path.addLine(to: CGPoint(x: 32.791301700000005,y: -96.8020985))//midpoint between 3 and 4
    path.addLine(to: CGPoint(x: 32.7915926,y: -96.8016962))//4
    path.addLine(to: CGPoint(x: 32.79154905,y: -96.8022685))//midpoint between 4 and 1
    
}

任何想法如何每边只获得4分吗?

解决方法

您的A&B Test语句被倒置。首先,您必须添加中点,然后添加下一个点。同样,您的encodeURI()被同一点调用两次。

写法不同:

path.addLine

还要注意,GPS坐标是球形的,通常,中点的计算方法不应与在平面上相同。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。