计算两点之间经纬度,平均点位

// ***************** 计算点位置 start********************//
// 1.遍历每个经纬度
for (var i = 0;i < fildData.length;i++) {
    //得到长方形四个点的经度数组,和纬度数组
    var latArr = [];
    var lonArr = [];
    for (var j = 0;j < fildData[i]["l_p"].length;j++) {
        latArr.push(fildData[i]["l_p"][j]["latitude"])
        lonArr.push(fildData[i]["l_p"][j]["longitude"])
    }
    // console.log(latArr)
    // console.log(lonArr)
    if (fildData[i]["landname"] == "白区2-4") {
        var extraParam = {
            "a": [2, 3],
            "b": [3, 2]
        }
        var pointArr = devicePoints(latArr, lonArr, 3, extraParam)
        // console.log(pointArr)
        //根据各点拼接json需要的字符串
        var forpointArr = [];
        for (var o = 0;o < pointArr.length;o++) {
            let obj = {
                "name": "电磁阀" + (o + 1),
                "ValveNo": Date.now() + Math.floor((Math.random() * 100) + 1),
                "lng": pointArr[o]["lng"].toString(),
                "lat": pointArr[o]["lat"].toString(),
            }
            forpointArr.push(obj)
        }
        // 拼接对象
        var remoteObj = {
            "fieldName": fildData[i]["landname"],
            "deviceID": Date.now() + Math.floor((Math.random() * 100) + 1),
            "deviceArr": forpointArr
        }
        // console.log(JSON.stringify(remoteObj))
    }

}
/*计算长方形 斜边上等分点的经纬度坐标
latArr、lonArr:长方形四个点的经度
num:这条边上需要多少个点(包含了长方形角上的点)
extraParam:两个点的坐标在
extraParam["a"]:处于上方的点
extraParam["b"]:处于下方的点
    latArr.sort()
    lonArr.sort()
    排序之后在数组中从小到大的的索引
*/
function devicePoints(latArr, lonArr, num, extraParam) {
    // 经纬度排序
    latArr.sort()
    lonArr.sort()
    //解构赋值a,b
    const {
        a,
        b
    } = extraParam
    // 计算两点经纬度差
    var lngDistance = (lonArr[b[0]] - lonArr[a[0]]) / (num - 1)
    var latDistance = (latArr[a[1]] - latArr[b[1]]) / (num - 1)
    //marArr:数组存储各点的坐标
    var marArr = [];
    //左点:作为数组开始点
    marArr[0] = {
        "lng": lonArr[a[0]],
        "lat": latArr[a[1]],
    }
    for (var i_ = 0;i_ < (num - 2);i_++) {
        var latlngObj = {};
        latlngObj["lng"] = lonArr[a[0]] + lngDistance
        lonArr[a[0]] += lngDistance
        latlngObj["lat"] = latArr[a[1]] - latDistance
        latArr[a[1]] -= latDistance
        marArr.push(latlngObj)
    }
    //右点:作为数组结尾点
    marArr.push({
        "lng": lonArr[b[0]],
        "lat": latArr[b[1]]
    })
    return marArr
}
/**************  计算点位置 end *************/

 

posted @ 2021-05-26 23:01  珂珂keo  阅读(359)  评论(0编辑  收藏  举报