From 97fc4a14bb6d7f4df93c4d0da415e9343f4205bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=B0=8F?= <736883394@qq.com> Date: Tue, 29 Apr 2025 16:36:28 +0800 Subject: [PATCH] =?UTF-8?q?map.js=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ebike-maintenance/utils/map.js | 109 ++++++++++++++++++++++++++++++--- 1 file changed, 102 insertions(+), 7 deletions(-) diff --git a/ebike-maintenance/utils/map.js b/ebike-maintenance/utils/map.js index 875aed0..79d6477 100644 --- a/ebike-maintenance/utils/map.js +++ b/ebike-maintenance/utils/map.js @@ -13,7 +13,7 @@ export const getMap = (mapid, instance) => { }); } //获取当前定位 -export const getLoalcation = (oMap, success, fail,nomove) => { +export const getLoalcation = (oMap, success, fail, nomove) => { uni.getLocation({ type: 'gcj02', // 返回可以用于 wx.openLocation 的经纬度 geocode: true, @@ -22,7 +22,7 @@ export const getLoalcation = (oMap, success, fail,nomove) => { latitude, longitude } = res; - if(!nomove){ + if (!nomove) { moveToLocation(oMap, longitude, latitude); } // if (markers) { //定位 @@ -203,8 +203,71 @@ export const moveToLocation = (oMap, longitude, latitude) => { oMap.moveToLocation(point); } +//运营区 +export function getOperation(zoneId, callback) { + const params = { + zoneId + } + api.callOperateApi("ebikeRegion/getOperation", params, "get").then((res) => { + const { + code, + message, + data + } = res; + if (code != 200) { + showModelMessage(message); + if(callback) callback(null); + return; + } + const arrCircles = []; + const arrPolygons = []; + const arrRegionID = []; + const arrCirclesData=[]; + const arrPolygonsData = []; + data.map((item, index) => { + const { + shapeType, + regionId, + radius, + points + } = item; + arrRegionID.push(regionId); + const scolor = "#578FD4"; + const fcolor = "rgba(192,218,245,0.3)"; + if (shapeType == 1) { + const { + longitude: lng, + latitude: lat + } = points[0]; + arrCirclesData.push(item); + arrCircles.push(addCirle(scolor, fcolor, lng, lat, radius)); + } else if (shapeType == 2) { + const arrPoint = points.map(p => { + return { + longitude: p.longitude, + latitude: p.latitude + } + }) + arrPolygonsData.push(item); + arrPolygons.push(addPolygon(scolor, fcolor, arrPoint)); + } + + }); + + if(callback) callback({ + arrRegionID, + arrCircles, + arrPolygons, + arrData: data, + arrCirclesData, + arrPolygonsData + }); + + }) +}; + //站点、停车区 -export const getRegionData = (arrRegionID, callback) => { +export function getRegionData (arrRegionID, callback) { if (!arrRegionID || arrRegionID.length == 0) return; const arrMethods = []; arrRegionID.map(regionId => { @@ -218,6 +281,8 @@ export const getRegionData = (arrRegionID, callback) => { const arrCircles = []; const arrPolygons = []; const arrData = []; + const arrCirclesData=[]; + const arrPolygonsData = []; res.map(item => { const { code, @@ -240,7 +305,8 @@ export const getRegionData = (arrRegionID, callback) => { longitude: lng, latitude: lat } = points[0]; - arrCircles.push(addCirle(scolor, fcolor, lng, lat, radius)); + arrCircles.push(addCirle(scolor, fcolor, lng, lat,radius)); + arrCirclesData.push(data); } else if (shapeType == 2) { const arrPoint = points.map(p => { return { @@ -249,6 +315,7 @@ export const getRegionData = (arrRegionID, callback) => { } }) arrPolygons.push(addPolygon(scolor, fcolor, arrPoint)); + arrPolygonsData.push(data); } }) }) @@ -368,8 +435,6 @@ export function direction({ latitude: elat }, success: (res) => { - - console.log("111111111111111111",res) const { polyline, distance @@ -387,7 +452,7 @@ export function direction({ } const cnt = (distance / 1000).toFixed(2); let sdistance = distance + "m"; - if (cnt >= 1){ + if (cnt >= 1) { sdistance = cnt + "km"; } const data = { @@ -402,4 +467,34 @@ export function direction({ } } qqmapsdk.direction(options); +} + +// 几何中心计算算法(适用于任意多边形) + export function getPolygonCenter(points) { + let X = 0, Y = 0, Z = 0; + const pointCount = points.length; + + points.forEach(point => { + const lat = point.latitude * Math.PI / 180; + const lng = point.longitude * Math.PI / 180; + const x = Math.cos(lat) * Math.cos(lng); + const y = Math.cos(lat) * Math.sin(lng); + const z = Math.sin(lat); + + X += x; + Y += y; + Z += z; + }); + + X /= pointCount; + Y /= pointCount; + Z /= pointCount; + + const lng = Math.atan2(Y, X); + const lat = Math.atan2(Z, Math.sqrt(X * X + Y * Y)); + + return { + lat: lat * 180 / Math.PI, + lng: lng * 180 / Math.PI + }; } \ No newline at end of file