- 积分
- 172
- 金钱
- 152
- 威望
- 0
- 贡献
- 0
- HASS币
- 0
注册会员
- 积分
- 172
- 金钱
- 152
- HASS币
- 0
|
不赘述其他问题,解决漂移有很多种办法,可以查询到的一种是通过第三方脚本定时的读取数据库并进行修改,另一种方法是修改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经纬度就会先进行转换,如此就可以了,我觉得这个方案更便捷
|
|