From a6b15483b832fc1fc27a050c93a3a6f371b57a19 Mon Sep 17 00:00:00 2001 From: 13404089107 <puwei@sinata.cn> Date: 星期五, 14 三月 2025 14:02:38 +0800 Subject: [PATCH] Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/H5/threeSide --- H5/pages/location/location.vue | 144 +++++++++--------------------------------------- 1 files changed, 27 insertions(+), 117 deletions(-) diff --git a/H5/pages/location/location.vue b/H5/pages/location/location.vue index 6da253f..d4c5c79 100644 --- a/H5/pages/location/location.vue +++ b/H5/pages/location/location.vue @@ -50,56 +50,7 @@ }; }, methods: { - outOfChina(lng, lat) { - return (lng < 72.004 || lng > 137.8347) || (lat < 0.8293 || lat > 55.8271); - }, - - // 纬度转换函数 - transformLat(x, y) { - let ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * Math.sqrt(Math.abs(x)); - ret += (20.0 * Math.sin(6.0 * x * Math.PI) + 20.0 * Math.sin(2.0 * x * Math.PI)) * 2.0 / 3.0; - ret += (20.0 * Math.sin(y * Math.PI) + 40.0 * Math.sin(y / 3.0 * Math.PI)) * 2.0 / 3.0; - ret += (160.0 * Math.sin(y / 12.0 * Math.PI) + 320 * Math.sin(y * Math.PI / 30.0)) * 2.0 / 3.0; - return ret; - }, - - // 经度转换函数 - transformLon(x, y) { - let ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * Math.sqrt(Math.abs(x)); - ret += (20.0 * Math.sin(6.0 * x * Math.PI) + 20.0 * Math.sin(2.0 * x * Math.PI)) * 2.0 / 3.0; - ret += (20.0 * Math.sin(x * Math.PI) + 40.0 * Math.sin(x / 3.0 * Math.PI)) * 2.0 / 3.0; - ret += (150.0 * Math.sin(x / 12.0 * Math.PI) + 300.0 * Math.sin(x / 30.0 * Math.PI)) * 2.0 / 3.0; - return ret; - }, - - // WGS - 84 转 GCJ - 02 - wgs84ToGcj02(lng, lat) { - if (this.outOfChina(lng, lat)) { - return [lng, lat]; - } - let dLat = this.transformLat(lng - 105.0, lat - 35.0); - let dLng = this.transformLon(lng - 105.0, lat - 35.0); - let radLat = lat / 180.0 * Math.PI; - let magic = Math.sin(radLat); - magic = 1 - 0.00669342162296594323 * magic * magic; - let sqrtMagic = Math.sqrt(magic); - dLat = (dLat * 180.0) / ((6378245.0 / (1 - magic)) * Math.cos(radLat) * Math.PI); - dLng = (dLng * 180.0) / (6378245.0 / sqrtMagic * Math.cos(radLat) * Math.PI); - let mgLat = lat + dLat; - let mgLng = lng + dLng; - return [mgLng, mgLat]; - }, - - // GCJ - 02 转 BD - 09 - gcj02ToBd09(lng, lat) { - let x = lng; - let y = lat; - let z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * 3000.0 * Math.PI / 180.0); - let theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * 3000.0 * Math.PI / 180.0); - let bdLng = z * Math.cos(theta) + 0.0065; - let bdLat = z * Math.sin(theta) + 0.006; - return [bdLng, bdLat]; - }, + clearMarkers() { // 清除所有标点 this.markers.forEach((marker) => { @@ -149,35 +100,6 @@ } }) - return - uni.request({ - url: `https://api.map.baidu.com/place/v2/search`, - method: 'GET', - data: { - query: this.keyword, - location: `${this.latitude},${this.longitude }`, - radius: 10000, // 搜索半径,单位:米 - output: 'json', - ak: '3mHKIXMArjgIkgADzOlTYp4XssNSNkwr' // 替换为你自己的 AK - }, - success: (res) => { - - if (res.data.status === 0) { - this.searchResults = res.data.results; - this.latitude = res.data.results[0].location.lat - this.longitude = res.data.results[0].location.lng - this.locationList = res.data.results.map((result, index) => { - - result.id = index + 1 - - return result - }); - } - }, - fail: (err) => { - console.error('搜索失败:', err); - } - }); }, }, onLoad() { @@ -186,42 +108,34 @@ onReady() { this.map = new BMapGL.Map("container"); // 创建地图实例 const that = this - // uni.getLocation({ - // type: 'wgs84', - // success: (res) => { - // 判断是否在中国境外 - - navigator.geolocation.getCurrentPosition(success, error, options); function success(position) { - const latitude = position.coords.latitude; - const longitude = position.coords.longitude; - let arr = that.wgs84ToGcj02(longitude, latitude); - - // 转换为 BD - 09 - let arrs = that.gcj02ToBd09(arr[0], arr[1]); - - const accuracy = position.coords.accuracy; // 精度,单位米 - // 在这里可以使用获取到的经纬度信息,例如在地图上显示位置等。 - var point = new BMapGL.Point(arrs[0], arrs[1]); // 创建点坐标 - that.map.enableScrollWheelZoom(true); - that.map.centerAndZoom(point, 12); - var marker = new BMapGL.Marker(point); - that.map.addOverlay(marker); - that.markers.push(marker); - var myGeo = new BMapGL.Geocoder(); - // 根据坐标得到地址描述 - myGeo.getLocation(new BMapGL.Point(arrs[0], arrs[1]), (result) => { - that.locationList = result.surroundingPois.map((item, index) => { - item.id = index + 1 - return item - }) - }) + uni.request({ + url: `https://api.map.baidu.com/geoconv/v2/?coords=${position.coords.longitude},${position.coords.latitude}&model=2&ak=3mHKIXMArjgIkgADzOlTYp4XssNSNkwr`, + method: 'GET', + success: (res) => { + const latitude = res.data.result[0].y; + const longitude = res.data.result[0].x; + var point = new BMapGL.Point(longitude, latitude); // 创建点坐标 + that.map.enableScrollWheelZoom(true); + that.map.centerAndZoom(point, 12); + var marker = new BMapGL.Marker(point); + that.map.addOverlay(marker); + that.markers.push(marker); + var myGeo = new BMapGL.Geocoder(); + // 根据坐标得到地址描述 + myGeo.getLocation(new BMapGL.Point(longitude, latitude), (result) => { + that.locationList = result.surroundingPois.map((item, index) => { + item.id = index + 1 + return item + }) + }) + }, + }); } function error(err) { - switch (err.code) { case err.PERMISSION_DENIED: console.error("用户拒绝了位置请求。"); @@ -242,6 +156,7 @@ timeout: 5000, // 5 秒超时 maximumAge: 0 // 不使用缓存 }; + this.map.addEventListener('click', (e) => { this.clearMarkers() var mercator = this.map.lnglatToMercator(e.latlng.lng, e.latlng.lat); @@ -252,8 +167,8 @@ var myGeo = new BMapGL.Geocoder(); // 根据坐标得到地址描述 myGeo.getLocation(new BMapGL.Point(e.latlng.lng, e.latlng.lat), (result) => { - this.city = result.addressComponents.city - if( result.surroundingPois.length>0){ + this.city = result.addressComponents.city + if (result.surroundingPois.length > 0) { this.locationList = result.surroundingPois.map((item, index) => { item.id = index + 1 return item @@ -274,12 +189,7 @@ this.map.addOverlay(marker); this.markers.push(marker); }); - // }, - // error:err=>{ - // - // } - // }); - + } } </script> -- Gitblit v1.7.1