diff --git a/src/hjm/fence.tsx b/src/hjm/fence.tsx index 3d1dece..7b4fe72 100644 --- a/src/hjm/fence.tsx +++ b/src/hjm/fence.tsx @@ -8,6 +8,8 @@ import './location.scss' import {HjmFence} from "@/api/hjm/hjmFence/model"; import {getHjmFence} from "@/api/hjm/hjmFence"; import {Market} from "../pages/index"; +// 导入GPS坐标转换工具 +import GPS from '@/utils/gpsUtil.js'; interface Where { latitude?: number; longitude?: number; @@ -42,9 +44,30 @@ const Location = () => { // 转为多边形点数组 const points = coordPairs.map(coord => { const [lat, lng] = coord.split(','); + const latitude = parseFloat(lat); + const longitude = parseFloat(lng); + + // 确保解析后的坐标是有效数字 + if (isNaN(latitude) || isNaN(longitude)) { + throw new Error(`无效坐标: ${lat}, ${lng}`); + } + + // 转换WGS84坐标到GCJ02坐标 + try { + const transformed = GPS.gcj_encrypt(latitude, longitude); + if (transformed && !isNaN(transformed.lat) && !isNaN(transformed.lng)) { + return { + latitude: transformed.lat, + longitude: transformed.lng + }; + } + } catch (error) { + console.error('围栏坐标转换错误:', error); + } + return { - latitude: parseFloat(lat), - longitude: parseFloat(lng) + latitude: latitude, + longitude: longitude } }); console.log(points,'pointspointspoints') @@ -57,30 +80,66 @@ const Location = () => { const reload = () => { setScale(11) - setLongitude(108.355702) - setLatitude(22.857968) + + // 设置初始坐标(需要转换) + const initialLat = 22.857968; + const initialLng = 108.355702; + try { + const transformed = GPS.gcj_encrypt(initialLat, initialLng); + if (transformed && !isNaN(transformed.lat) && !isNaN(transformed.lng)) { + setLongitude(transformed.lng); + setLatitude(transformed.lat); + } else { + setLongitude(initialLng); + setLatitude(initialLat); + } + } catch (error) { + console.error('初始坐标转换错误:', error); + setLongitude(initialLng); + setLatitude(initialLat); + } + getHjmFence(4).then(data => { setFence(data) const coordStr = data.points || ''; - // 使用通用函数解析坐标字符串 + // 使用通用函数解析坐标字符串(已包含坐标转换) const {points} = parseCoordinateString(coordStr); console.log('解析结果 - 多边形点:', points); setPoints(points); setShowCircles(true) console.log(fence,'fencefencefence') }) + const where: Where = {} + // 使用转换后的坐标 where.latitude = latitude where.longitude = longitude + pageByQQMap(where).then(res => { if (res?.count == 0) { const arr = [] + // 转换默认位置坐标 + const defaultLat = 22.813371; + const defaultLng = 108.323885; + let markerLat = defaultLat; + let markerLng = defaultLng; + + try { + const transformed = GPS.gcj_encrypt(defaultLat, defaultLng); + if (transformed && !isNaN(transformed.lat) && !isNaN(transformed.lng)) { + markerLat = transformed.lat; + markerLng = transformed.lng; + } + } catch (error) { + console.error('默认位置坐标转换错误:', error); + } + // @ts-ignore arr.push({ id: 10001, - latitude: 22.813371, - longitude: 108.323885, + latitude: markerLat, + longitude: markerLng, title: '当前位置', name: '当前位置' }) @@ -91,11 +150,31 @@ const Location = () => { const data = res?.list; const arr = [] data?.map((item: HjmCar) => { + // 转换WGS84坐标到GCJ02坐标 + let markerLat = item.latitude; + let markerLng = item.longitude; + + if (item.latitude && item.longitude) { + try { + const lat = Number(item.latitude); + const lng = Number(item.longitude); + if (!isNaN(lat) && !isNaN(lng) && isFinite(lat) && isFinite(lng)) { + const transformed = GPS.gcj_encrypt(lat, lng); + if (transformed && !isNaN(transformed.lat) && !isNaN(transformed.lng)) { + markerLat = transformed.lat; + markerLng = transformed.lng; + } + } + } catch (error) { + console.error('车辆坐标转换错误:', error); + } + } + // @ts-ignore arr.push({ id: item.id, - latitude: item.latitude, - longitude: item.longitude, + latitude: markerLat, + longitude: markerLng, label: { content: `${item?.code}`, color: '#000000', diff --git a/src/hjm/trajectory/trajectory.tsx b/src/hjm/trajectory/trajectory.tsx index c212061..a194a6d 100644 --- a/src/hjm/trajectory/trajectory.tsx +++ b/src/hjm/trajectory/trajectory.tsx @@ -7,6 +7,8 @@ import {HjmCar} from "@/api/hjm/hjmCar/model"; import './trajectory.scss' import {pageHjmGpsLog} from "@/api/hjm/hjmGpsLog"; import {formatCurrentDate, getCurrentHour} from "@/utils/time"; +// 导入GPS坐标转换工具 +import GPS from '@/utils/gpsUtil.js'; /** * 文章终极列表 @@ -102,14 +104,33 @@ const Location = () => { Taro.showLoading({title: '加载中...'}); pageHjmGpsLog(where).then(res => { console.log(res?.list, 'list') - // setPoints(res?.list.map(item => { - // console.log(item, 'item.') - // return { - // latitude: item.latitude, - // longitude: item.longitude - // } - // }) || []) - setHjmGpsLog(res?.list || []); + // 转换轨迹点坐标 + const transformedPoints = (res?.list || []).map(item => { + // 转换WGS84坐标到GCJ02坐标 + const lat = Number(item.latitude); + const lng = Number(item.longitude); + + if (item.latitude && item.longitude && + !isNaN(lat) && + !isNaN(lng) && + isFinite(lat) && + isFinite(lng)) { + try { + const transformed = GPS.gcj_encrypt(lat, lng); + if (transformed && !isNaN(transformed.lat) && !isNaN(transformed.lng)) { + return { + ...item, + latitude: transformed.lat, + longitude: transformed.lng + }; + } + } catch (error) { + console.error('轨迹点坐标转换错误:', error); + } + } + return item; + }); + setHjmGpsLog(transformedPoints); }).finally(() => { Taro.hideLoading(); }) @@ -123,8 +144,34 @@ const Location = () => { getHjmCarByCode(keywords).then(data => { console.log('执行搜索', data) setItem(data) - setLatitude(data.latitude) - setLongitude(data.longitude) + + // 转换WGS84坐标到GCJ02坐标 + if (data.latitude && data.longitude && + !isNaN(data.latitude) && + !isNaN(data.longitude) && + isFinite(data.latitude) && + isFinite(data.longitude)) { + try { + const lat = Number(data.latitude); + const lng = Number(data.longitude); + const transformed = GPS.gcj_encrypt(lat, lng); + if (transformed && !isNaN(transformed.lat) && !isNaN(transformed.lng)) { + setLatitude(transformed.lat); + setLongitude(transformed.lng); + } else { + setLatitude(data.latitude); + setLongitude(data.longitude); + } + } catch (error) { + console.error('坐标转换错误:', error); + setLatitude(data.latitude); + setLongitude(data.longitude); + } + } else { + setLatitude(data.latitude); + setLongitude(data.longitude); + } + setKeywords(data.code) // 获取车辆轨迹信息 getLocationRecord(data); @@ -144,8 +191,34 @@ const Location = () => { if (code) { getHjmCarByCode(code).then(data => { setItem(data) - setLatitude(data.latitude) - setLongitude(data.longitude) + + // 转换WGS84坐标到GCJ02坐标 + if (data.latitude && data.longitude && + !isNaN(data.latitude) && + !isNaN(data.longitude) && + isFinite(data.latitude) && + isFinite(data.longitude)) { + try { + const lat = Number(data.latitude); + const lng = Number(data.longitude); + const transformed = GPS.gcj_encrypt(lat, lng); + if (transformed && !isNaN(transformed.lat) && !isNaN(transformed.lng)) { + setLatitude(transformed.lat); + setLongitude(transformed.lng); + } else { + setLatitude(data.latitude); + setLongitude(data.longitude); + } + } catch (error) { + console.error('坐标转换错误:', error); + setLatitude(data.latitude); + setLongitude(data.longitude); + } + } else { + setLatitude(data.latitude); + setLongitude(data.longitude); + } + setKeywords(data.code) // 获取车辆轨迹信息 getLocationRecord(data); @@ -220,7 +293,6 @@ const Location = () => { - {/**/} { try { const res = await Taro.getLocation({ - type: 'gcj02' //返回可以用于wx.openLocation的经纬度 + type: 'wgs84' // 使用WGS84坐标系,然后手动转换为GCJ02 }) - if (res.latitude) { - setLatitude(res.latitude) - } - if (res.longitude) { - setLongitude(res.longitude) + // 转换WGS84坐标到GCJ02坐标 + if (res.latitude && res.longitude && + !isNaN(res.latitude) && + !isNaN(res.longitude) && + isFinite(res.latitude) && + isFinite(res.longitude)) { + try { + const lat = Number(res.latitude); + const lng = Number(res.longitude); + const transformed = GPS.gcj_encrypt(lat, lng); + // 确保转换结果有效 + if (transformed && !isNaN(transformed.lat) && !isNaN(transformed.lng)) { + setLatitude(transformed.lat); + setLongitude(transformed.lng); + } else { + // 如果转换结果无效,使用原始坐标 + setLatitude(res.latitude); + setLongitude(res.longitude); + } + } catch (error) { + console.error('坐标转换错误:', error); + setLatitude(res.latitude); + setLongitude(res.longitude); + } + } else { + setLatitude(res.latitude); + setLongitude(res.longitude); } // 已认证用户 @@ -185,11 +209,33 @@ function Home() { const data = res?.list; const arr = [] data?.map((item: HjmCar) => { + // 转换WGS84坐标到GCJ02坐标 + let markerLat = item.latitude; + let markerLng = item.longitude; + + if (item.latitude && item.longitude && + !isNaN(item.latitude) && + !isNaN(item.longitude) && + isFinite(item.latitude) && + isFinite(item.longitude)) { + try { + const lat = Number(item.latitude); + const lng = Number(item.longitude); + const transformed = GPS.gcj_encrypt(lat, lng); + if (transformed && !isNaN(transformed.lat) && !isNaN(transformed.lng)) { + markerLat = transformed.lat; + markerLng = transformed.lng; + } + } catch (error) { + console.error('标记点坐标转换错误:', error); + } + } + // @ts-ignore arr.push({ id: item.id, - latitude: item.latitude, - longitude: item.longitude, + latitude: markerLat, + longitude: markerLng, label: { content: `${item?.code}`, color: '#000000', @@ -232,13 +278,36 @@ function Home() { setList(res?.list || []) if (res?.list && res?.list.length > 0) { const data = res?.list[0]; - setLongitude(data?.longitude) - setLatitude(data?.latitude) + + // 转换WGS84坐标到GCJ02坐标 + let displayLat = data.latitude; + let displayLng = data.longitude; + + if (data.latitude && data.longitude && + !isNaN(data.latitude) && + !isNaN(data.longitude) && + isFinite(data.latitude) && + isFinite(data.longitude)) { + try { + const lat = Number(data.latitude); + const lng = Number(data.longitude); + const transformed = GPS.gcj_encrypt(lat, lng); + if (transformed && !isNaN(transformed.lat) && !isNaN(transformed.lng)) { + displayLat = transformed.lat; + displayLng = transformed.lng; + } + } catch (error) { + console.error('搜索结果坐标转换错误:', error); + } + } + + setLongitude(displayLng) + setLatitude(displayLat) if (isAdmin) { setMarkers([{ id: data.id, - latitude: data.latitude, - longitude: data.longitude, + latitude: displayLat, + longitude: displayLng, // @ts-ignore label: { content: `${data?.code}`,