zoukankan      html  css  js  c++  java
  • 计算两点之间经纬度,平均点位

    // ***************** 计算点位置 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 *************/
    虚心学习、丰富自己
  • 相关阅读:
    华为交换机LACP模式(动态)链路聚合配置示例
    H3C交换机配置链路聚合
    ODBC数据源的作用及配置
    SQL Server Management Studio与SQL Server Configuration Manager
    SQL Server 2008 允许远程连接的解决方法
    多实例并存的技术限制,与原因
    多个SQL server实例
    SQL Server实例
    Oracle
    Burp Suite Professional更换闪退日记
  • 原文地址:https://www.cnblogs.com/tkqq000/p/14815433.html
Copyright © 2011-2022 走看看