import { showModelMessage } from "./tools.js"; import * as api from "./api.js"; import config from "./config.js"; const imgPath = config.imgPath; export const sdkKey = 'BECBZ-EJIEQ-LUU5N-B5ISQ-3TLMZ-BXFLG'; export const getMap = (mapid, instance) => { return uni.createMapContext(mapid, { this: instance.proxy }); } //获取当前定位 export const getLoalcation = (oMap, success, fail,nomove) => { uni.getLocation({ type: 'gcj02', // 返回可以用于 wx.openLocation 的经纬度 geocode: true, success(res) { const { latitude, longitude } = res; if(!nomove){ moveToLocation(oMap, longitude, latitude); } // if (markers) { //定位 // const arrData = markers.value || []; // let index = arrData.findIndex((item) => { // return item.id == 0; // }); // index = index == -1 ? arrData.length : index; // arrData[index] = addMarker(0, longitude, latitude, "dw.png"); // markers.value = arrData; // } if (success) success({ latitude, longitude }); }, fail(res) { if (fail) fail(res); } }); } //逆解析地址 export const reverseGeocoder = (qqmapsdk, longitude, latitude, success, fail) => { qqmapsdk.reverseGeocoder({ location: { latitude: latitude, longitude: longitude }, success: (res) => { if (success) success(res.result); }, fail: (res) => { if (fail) success(fail); } }) } //添加点 export const addMarker = (id, longitude, latitude, icon) => { return { id: id, latitude, longitude, width: 40, height: 40, zIndex: "100", iconPath: imgPath + "static/map/" + icon } } //添加线 export const addLine = (scolor, arrPoint) => { // let scolor = ""; // switch (lx) { // case "add": // scolor = "#e50413"; // break; // case "edit": // scolor = "#e58b04"; // break; // default: // scolor = "#0473e5"; // break // } return { points: arrPoint, color: scolor, width: 4 } } //添加面 export const addPolygon = (scolor, fcolor, arrPolygonsPoits) => { /* let scolor = "", fcolor = ""; switch (lx) { case "add": scolor = "#e50413"; fcolor = "#f79bac73"; break; case "edit": scolor = "#e58b04"; fcolor = "#e58b0440"; break; default: scolor = "#0473e5"; fcolor = "#0473e540"; break } */ return { points: arrPolygonsPoits, fillColor: fcolor, strokeWidth: 3, strokeColor: scolor, zIndex: 11 } } //添加圆 export const addCirle = (scolor, fcolor, longitude, latitude, radius) => { /* let scolor = "", fcolor = ""; switch (lx) { case "add": scolor = "#e50413"; fcolor = "#f79bac73"; break; case "edit": scolor = "#e58b04"; fcolor = "#e58b0440"; break; default: scolor = "#0473e5"; fcolor = "#0473e540"; break } */ return { latitude, longitude, radius, color: scolor, fillColor: fcolor, strokeWidth: 3 } } //绘制多边形 export const drawPolygons = (obj, e) => { /* const { detail: { latitude, longitude } } = e; let { markers, polylines, polygons, arrPolygonsPoits, datacicle, circles } = obj if (datacicle) { //移除圆 obj.datacicle = null; obj.circles.splice(circles.length - 1, 1); } const len = arrPolygonsPoits.length; arrPolygonsPoits.push({ latitude, longitude }); switch (len) { case 0: const marker = addMarker("add", 10000, latitude, longitude); markers.push(marker); break; case 1: polylines.push(addLine("add", arrPolygonsPoits)); break; case 2: obj.polylines = []; polygons.push(addPolygon("add", arrPolygonsPoits)); break; default: polygons[polygons.length - 1] = addPolygon("add", arrPolygonsPoits); console.log("333333333333", JSON.stringify(arrPolygonsPoits)); break; } */ } //移至中心点 export const moveToLocation = (oMap, longitude, latitude) => { const point = { latitude, longitude } oMap.moveToLocation(point); } //站点、停车区 export const getRegionData = (arrRegionID, callback) => { if (!arrRegionID || arrRegionID.length == 0) return; const arrMethods = []; arrRegionID.map(regionId => { const params = { regionId }; arrMethods.push(api.callOperateApi("ebikeRegion/getRegion", params, "get")); }); Promise.all(arrMethods).then(res => { const arrCircles = []; const arrPolygons = []; const arrData = []; res.map(item => { const { code, message, data: arrRegion } = item; if (code != 200) return; arrRegion.map(data => { const { regionId, shapeType, radius, points } = data; arrData.push(data); const scolor = "#58d4c0"; const fcolor = "#c1f5f1"; if (shapeType == 1) { const { longitude: lng, latitude: lat } = points[0]; arrCircles.push(addCirle(scolor, fcolor, lng, lat, radius)); } else if (shapeType == 2) { const arrPoint = points.map(p => { return { longitude: p.longitude, latitude: p.latitude } }) arrPolygons.push(addPolygon(scolor, fcolor, arrPoint)); } }) }) if (callback) callback({ arrData, arrCircles, arrPolygons }); }) } //获取车辆数据 export const getBikeData = (arrRegionID, callback) => { if (!arrRegionID || arrRegionID.length == 0) return; const arrMethods = []; arrRegionID.map(regionId => { const params = { regionId }; arrMethods.push(api.callOperateApi("ebikeRegion/getOperationBike", params, "get")); }); Promise.all(arrMethods).then(arrRes => { const arrPoints = []; const arrData = []; let icnt = 0; let icnt_0 = 0; let icnt_2 = 0; arrRes.map(res => { const { code, message, data } = res; if (code != 200) { showModelMessage(message); } else { if (data.length > 0) arrData.push(...data); data.map(item => { const { bikeId, longitude, latitude, state, soc } = item; const id = arrPoints.length; if (soc <= 20) { icnt_0++; } else if (soc <= 60) { icnt_2++; } else { icnt++; } arrPoints.push(addMarker_Q(id, item)); }) } }); callback({ arrData, arrPoints, icnt, icnt_0, icnt_2 }); }) } //电量车辆点 export function addMarker_Q(id, data) { const { longitude, latitude, soc } = data; let icon = "bike.png"; if (soc <= 20) { icon = "bike_0.png"; } else if (soc <= 60) { icon = "bike_2.png"; } return { id: id, latitude, longitude, width: 40, height: 40, zIndex: "100", iconPath: imgPath + "static/map/" + icon, label: { content: soc + "%", color: "#FFF", anchorY: -30, fontSize: 9, textAlign: "center", } } } //导航 export function direction({ qqmapsdk, slng, slat, elng, elat, success, fail }) { const options = { from: { longitude: slng, latitude: slat }, to: { longitude: elng, latitude: elat }, success: (res) => { console.log("111111111111111111",res) const { polyline, distance } = res.result.routes[0]; let coors = polyline; for (let i = 2; i < coors.length; i++) { coors[i] = coors[i - 2] + coors[i] / 1000000 } let arrPoint = []; for (let i = 0; i < coors.length; i += 2) { arrPoint.push({ latitude: coors[i], longitude: coors[i + 1] }) } const cnt = (distance / 1000).toFixed(2); let sdistance = distance + "m"; if (cnt >= 1){ sdistance = cnt + "km"; } const data = { arrPoint, distance: sdistance } if (success) success(data); }, fail: (res) => { fail(res); } } qqmapsdk.direction(options); }