fix
pyt
2025-03-13 39178ca3e51573fbcfe01339d25af14a5f944a55
fix
1个文件已修改
144 ■■■■ 已修改文件
H5/pages/location/location.vue 144 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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>