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 *************/
    虚心学习、丰富自己
  • 相关阅读:
    不指定虚拟路径的前提下通过http访问pdf、图片等文件
    Java Service Wrapper将java程序设置为服务
    C# 上传excel文档解析出里面数据
    如何同时启动多个Tomcat服务
    struts2的action的知识点和利用action向页面注入值的操作
    IOS6 字体高亮显示
    微软安全新闻聚焦-双周刊第三十五期
    工厂三兄弟之工厂方法模式(四)
    清空文件夹里面的所有文件和文件夹
    OOP设计模式[JAVA]——03职责链模式
  • 原文地址:https://www.cnblogs.com/tkqq000/p/14815433.html
Copyright © 2011-2022 走看看