分类目录归档:postgis

火星坐标矢量地理文件纠偏方法

一、问题描述

大家都知道,国内的高德、百度等地理信息都是偏移过的,在日常处理过程中有诸多不便,网上有不少给坐标点(有经纬度X、Y坐标值)纠偏的工具或代码,虽然不能完全匹配,但是精度基本都能满足需求。

但是日常使用中还有一个很大的问题,就是我们的线、面等地理数据,是没法用那些工具处理的。怎么办呢?经过漫长的寻找终于找到一个postgis_LayerTransform。

其github地址:https://github.com/FreeGIS/postgis_LayerTransform
作者博客地址:blog.csdn.net/freeland1/article/details/50157641

二、使用方法

1、软件安装

这个代码需要配合postgis使用,因此要安装几个软件:postgresql、postgis。

首先安装postgresql

然后安装postgis(用跟postgresql版本配套的版本,可以独立安装,也可以在postgresql安装完后跳出来的附加组件安装程序里面安装,安装的时候选择创建一个地理数据库,后面可以用来作为模板)

2、创建数据库

打开pgadmin,新建一个数据库(在新建的时候可以以地理数据库为模板,也可以直接创建一个空数据库)

如果上一步创建了一个空数据库,那么还要安装postgis拓展(在拓展上面点右键-创建拓展,然后下拉菜单找到postgis)

3、导入数据

打开 插件-postgis shapefile and dbf loader(如果是pgadmin4,可能找不到插件这个选项,可以直接在系统开始菜单里面找这个插件)

点击view connection details,连上刚刚创建的数据库

点击add file,打开要导入的shp文件

(这一步比较重要)设置shp文件的属性,尤其是srid(WGS84地理坐标是4326,WGS墨卡托投影是3857),表名也可以设置一下,如果不设置默认就是shp文件名。

然后点击import就好了(注意文件路径不能太长太深,不能有中文)

4、处理数据

执行SQL查询,首先执行上面github提供的完整代码

然后执行select LayerTransform(‘tablename’,’GCJ2WGS’); (其中tablename就是导入的shp的名称,在上述第3步的设置属性里面设置。GCJ2WGS是一种纠偏方式,支持以下6种’BD2GCJ’, ‘GCJ2BD’, ‘WGS2GCJ’,’GCJ2WGS’,’BD2WGS’,’WGS2BD’,分别代表 百度转火星,火星转百度,84转火星,火星转84,百度转84,84转百度。)

5、导出数据

再次运行postgis shapefile and dbf loader导出即可

懒得截图,说的应该已经比较清楚了吧