轨迹纠偏、逆地理编码

这篇博客介绍了地理坐标从WGS84到GCJ02的转换方法,包括changeRoad函数进行的轨迹纠偏,以及逆地理编码regeoCode函数获取地址信息。转换过程中涉及了坐标平移、缩放和偏移等步骤,适用于中国地区的地图坐标处理。
摘要由CSDN通过智能技术生成
	//轨迹纠偏
    changeRoad(lng ,lat){
        var currentP=coordtransform.wgs84togcj02(lng , lat);
        return currentP;
    },
 x_PI: 3.14159265358979324 * 3000.0 / 180.0,
    PI: 1415926535897932384626,
    a: 6378245.0,
    ee: 0.00669342162296594323,
	//火星转gps
    gcj02towgs84(lng, lat) {
        let dlat = this.transformlat(lng - 105.0, lat - 35.0),
            dlng = this.transformlng(lng - 105.0, lat - 35.0),
            radlat = lat / 180.0 * this.PI,
            magic = Math.sin(radlat);
        magic = 1 - this.ee * magic * magic;
        var sqrtmagic = Math.sqrt(magic);
        dlat = (dlat * 180.0) / ((this.a * (1 - this.ee)) / (magic * sqrtmagic) * this.PI);
        dlng = (dlng * 180.0) / (this.a / sqrtmagic * Math.cos(radlat) * this.PI);
        let mglat = lat + dlat;
        let mglng = lng + dlng;
        return [lng * 2 - mglng, lat * 2 - mglat]
    },

    //WGS84转GCj02
    wgs84togcj02(lng, lat) {
        var lat = +lat;
        var lng = +lng;
        if (this.out_of_china(lng, lat)) {
            return [lng, lat]
        } else {
            var dlat = this.transformlat(lng - 105.0, lat - 35.0);
            var dlng = this.transformlng(lng - 105.0, lat - 35.0);
            var radlat = lat / 180.0 * this.PI;
            var magic = Math.sin(radlat);
            magic = 1 - this.ee * magic * magic;
            var sqrtmagic = Math.sqrt(magic);
            dlat = (dlat * 180.0) / ((this.a * (1 - this.ee)) / (magic * sqrtmagic) * this.PI);
            dlng = (dlng * 180.0) / (this.a / sqrtmagic * Math.cos(radlat) * this.PI);
            var mglat = lat + dlat;
            var mglng = lng + dlng;
            return [mglng, mglat]
        }
    },

    transformlat(lng, lat) {
        var lat = +lat;
        var lng = +lng;
        var ret = -100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat + 0.1 * lng * lat + 0.2 * Math.sqrt(Math.abs(lng));
        ret += (20.0 * Math.sin(6.0 * lng * this.PI) + 20.0 * Math.sin(2.0 * lng * this.PI)) * 2.0 / 3.0;
        ret += (20.0 * Math.sin(lat * this.PI) + 40.0 * Math.sin(lat / 3.0 * this.PI)) * 2.0 / 3.0;
        ret += (160.0 * Math.sin(lat / 12.0 * this.PI) + 320 * Math.sin(lat * this.PI / 30.0)) * 2.0 / 3.0;
        return ret
    },

    transformlng(lng, lat) {
        var lat = +lat;
        var lng = +lng;
        var ret = 300.0 + lng + 2.0 * lat + 0.1 * lng * lng + 0.1 * lng * lat + 0.1 * Math.sqrt(Math.abs(lng));
        ret += (20.0 * Math.sin(6.0 * lng * this.PI) + 20.0 * Math.sin(2.0 * lng * this.PI)) * 2.0 / 3.0;
        ret += (20.0 * Math.sin(lng * this.PI) + 40.0 * Math.sin(lng / 3.0 * this.PI)) * 2.0 / 3.0;
        ret += (150.0 * Math.sin(lng / 12.0 * this.PI) + 300.0 * Math.sin(lng / 30.0 * this.PI)) * 2.0 / 3.0;
        return ret
    },

    out_of_china(lng, lat) {
        var lat = +lat;
        var lng = +lng;
        // 纬度3.86~53.55,经度73.66~135.05
        return !(lng > 73.66 && lng < 135.05 && lat > 3.86 && lat < 53.55);
    },

    //   逆地理编码
    regeoCode(lnglat) {
        var geocoder = new AMap.Geocoder({
            // city: "010", //城市设为北京,默认:“全国”
            radius: 1000 //范围,默认:500
        });
        var address = '';
        geocoder.getAddress(lnglat, function (status, result) {
            if (status === 'complete' && result.regeocode) {
                address = result.regeocode.formattedAddress;
            } else {
                console.log('根据经纬度查询地址失败')
            }
        });
        return address;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java轨迹纠偏算法是一种用于纠偏GPS轨迹数据的算法。GPS设备采集的轨迹数据中存在一些偏差,比如信号干扰、遮挡、多路径传播等因素会导致轨迹点偏离真实路径。轨迹纠偏算法的目的就是通过一系列的计算和处理,将偏离真实路径的轨迹点修正到其真实位置。 Java轨迹纠偏算法的实现可以包括以下步骤: 1. 数据预处理:对采集的轨迹数据进行预处理,包括去除异常点、去除重复点、时间顺序排序等操作。这一步是为了减少对后续计算的干扰。 2. 轨迹分段:将轨迹数据按照一定的规则进行分段,比如按时间间隔分段或者按位置变化进行分段。每个分段都需要进行独立的纠偏计算。 3. 轨迹纠偏:对每个分段的轨迹数据进行纠偏计算。常见的纠偏算法有维特比算法、贝叶斯滤波算法、卡尔曼滤波算法等。这些算法通过建立数学模型和计算,将偏离真实路径的轨迹点修正到其真实位置。 4. 轨迹合并:将纠偏后的每个分段轨迹合并成一个完整的轨迹。合并时需要考虑分段之间的连接点,以及误差的传递和累积等问题。 5. 结果输出:将纠偏后的轨迹数据进行输出和展示,通常可以以数据文件或者地图形式来表示。同时也可以根据需求对纠偏结果进行进一步的分析和处理。 Java轨迹纠偏算法不仅可以用于个人轨迹记录和纠偏,还可以应用于地理信息系统、导航系统、智能交通等领域。通过准确的纠偏,可以提高轨迹数据的精度和可靠性,进一步提升相关应用的性能和用户体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值