『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 321|回复: 4

[技术探讨] 解决traccar高德地图漂移的另一种办法

[复制链接]

2

主题

20

帖子

172

积分

注册会员

Rank: 2

积分
172
金钱
152
HASS币
0
发表于 2024-10-10 11:09:24 | 显示全部楼层 |阅读模式
不赘述其他问题,解决漂移有很多种办法,可以查询到的一种是通过第三方脚本定时的读取数据库并进行修改,另一种方法是修改app在收到gps信号之后就修改,不过这两种不便捷这里推荐一种数据库触发器的方式进行修复漂移,前提是用postgresql,然后安装pg-coordtransform和postgis扩展,扩展安装办法自己百度,很简单,之后数据库中就具备了一个函数geoc_wgs84togcj02,这就是我们用来把gps经纬度转换到火星坐标。
首先把tc_positions表扩展两个列:latitude_gps和longitude_gps用于记录gps上传的经纬度,也方便以后进行其他处理使用。
之后就是先创建触发器函数
CREATE OR REPLACE FUNCTION wgs84_to_gcj02()
RETURNS TRIGGER AS $$
DECLARE
    geom_point GEOMETRY(Point, 4326);
    converted_geom GEOMETRY;
    orig_longitude DOUBLE PRECISION;
    orig_latitude DOUBLE PRECISION;
BEGIN
    orig_longitude := NEW.longitude;
    orig_latitude := NEW.latitude;
    geom_point := ST_SetSRID(ST_MakePoint(NEW.longitude, NEW.latitude), 4326);
    converted_geom := geoc_wgs84togcj02(geom_point);
    NEW.longitude := ST_X(converted_geom);
    NEW.latitude := ST_Y(converted_geom);
    NEW.latitude_gps := orig_latitude;
    NEW.longitude_gps := orig_longitude;
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

然后创建触发器和tc_positions表绑定
CREATE TRIGGER wgs84_to_gcj02_trigger
BEFORE INSERT ON tc_positions
FOR EACH ROW
EXECUTE PROCEDURE wgs84_to_gcj02();


这样每次插入gps经纬度就会先进行转换,如此就可以了,我觉得这个方案更便捷
回复

使用道具 举报

12

主题

433

帖子

2336

积分

金牌会员

Rank: 6Rank: 6

积分
2336
金钱
1903
HASS币
0
发表于 2024-10-10 11:13:25 | 显示全部楼层
看懂了不会弄,直接出个镜像
回复

使用道具 举报

1

主题

176

帖子

2266

积分

金牌会员

Rank: 6Rank: 6

积分
2266
金钱
2090
HASS币
0
发表于 2024-10-11 14:10:06 | 显示全部楼层
这个方法好,不知道有没有mysql数据库的
回复

使用道具 举报

0

主题

21

帖子

117

积分

注册会员

Rank: 2

积分
117
金钱
96
HASS币
0
发表于 2024-10-11 14:31:25 | 显示全部楼层
其实可以直接编译traccar的服务端程序,在服务端接收到客户端GPS报文是修改坐标偏移问题
回复

使用道具 举报

2

主题

20

帖子

172

积分

注册会员

Rank: 2

积分
172
金钱
152
HASS币
0
 楼主| 发表于 2024-10-11 14:43:03 | 显示全部楼层
TangKii 发表于 2024-10-11 14:31
其实可以直接编译traccar的服务端程序,在服务端接收到客户端GPS报文是修改坐标偏移问题 ...

是,不过如果作者更新就得再修改,要么试着提交到社区
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-21 23:45 , Processed in 1.369213 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表