// ***************** 计算点位置 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 *************/