在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坐标是球形的,通常,中点的计算方法不应与在平面上相同。