关于百度地图中坐标转换定位不准问题


在做青岛的项目时,有很多企业需要定位,但是发现部分沿海的地区定位到海上了,才发现定位不准的问题。

本人踩坑点,包括了每次加载都打乱了坐标点的信息,和定位不准问题。

解决如下:注意转换方法convertor.translate对应的参数(其中的1和5)是以下意思。我当时复制过来调用的3和5,所以定位不准,得看你是需要用哪种坐标转换哪种。

/**
* 坐标常量说明:
* COORDINATES_WGS84 = 1, WGS84坐标
* COORDINATES_WGS84_MC = 2, WGS84的平面墨卡托坐标
* COORDINATES_GCJ02 = 3,GCJ02坐标
* COORDINATES_GCJ02_MC = 4, GCJ02的平面墨卡托坐标
* COORDINATES_BD09 = 5, 百度bd09经纬度坐标
* COORDINATES_BD09_MC = 6,百度bd09墨卡托坐标
* COORDINATES_MAPBAR = 7,mapbar地图坐标
* COORDINATES_51 = 8,51地图坐标
*/

// dtu坐标点
            loadDtuOneMap() {
                this.pointDtuArr.forEach((item, index) => {
                    if (item.latitude && item.longitude) {
                        // 坐标点转换
                        let that = this
                        let pointArr = [];
                        let pt = new this.BMap.Point(item.longitude, item.latitude)
                        pointArr.push(pt);

                        var convertor = new this.BMap.Convertor();
                        convertor.translate(pointArr, 1, 5, function (data) {
                            that.pointDtuArr[index].longitude = data.points[0].lng
                            that.pointDtuArr[index].latitude = data.points[0].lat
                            if (index == (that.pointDtuArr.length - 1)) {
                                that.startDtu()
                            }
                        })
                    }
                })
            },
            //创建dtu图标
            startDtu() {
                this.pointDtuArr.forEach((item, index) => {
                    if (item.latitude && item.longitude) {
                        let pt = new this.BMap.Point(item.longitude, item.latitude)
                        // 坐标点
                        var myIcon = new this.BMap.Icon(item.state == 1 ? this.dtuMarkerActiveUrl : this
                            .dtuMarkerUrl, new this.BMap.Size(33, 33))
                        myIcon.setImageSize(new this.BMap.Size(33, 33))
                        // 创建标注点
                        var marker = new this.BMap.Marker(pt, {
                            icon: myIcon
                        })
                        this.marker3.push(marker)
                        // 创建信息窗口对象
                        let infoWindow = new this.BMap.InfoWindow(
                            `<div style="line-height:28px;">
                            <p style="font-size:18px;padding-bottom:5px;border-bottom:1px solid #ccc;color:#333;">${item.unitName}</p>
                            <p style="font-weight:700;color:#000;margin-top:10px;">dtu编号:<span style="color:#666;">${item.dtuid}</span></p>
                            <p style="font-weight:700;color:#000;">在线情况:<span style="color:${item.state==1?'#009900':'#990000'};">${item.state==1?'在线':'离线'}</span></p>
                        </div>`,
                        )
                        // 标注点击事件
                        marker.addEventListener("click", function () {
                            this.map.openInfoWindow(infoWindow, pt)
                        })
                        // 将标注添加到地图中
                        this.map.addOverlay(marker)
                    }

                })
            },


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM