前言
最近用到空间数据的查询,于是学习了下postgis数据的导入及用.net检索空间数据。
安装步骤
postgis是对postgresql的空间数据扩展,因此要用postgis就要先装postgresql,然后装postgis,安装过程比较简单,就是一路next就行。需要注意的就是记录好用户名密码。
远程连接
我们在用其他程序连接数据库时候会失败报错,这可能是postgres没有开启远程连接,开启远程连接的操作:找到postgres数据库的存放目录 data文件夹
1、postgresql.conf文件
将数据库服务监听模式修改为监听所有主机发出的连接请求
定位到#listen_addresses=’localhost’,修改成listen_addresses=’*’
2、pg_hba.conf文件
在IPv4 local connections: 下面添加
host all all 0.0.0.0/0 md5
导入shp文件遇到的问题
我在用postgis导入空间数据的时候遇到了几个问题,参考这篇文章基本都解决掉了https://blog.csdn.net/freeland1/article/details/39429771,我自己这里也记录下。
1、数据库不支持空间数据。
解决方法:建立空间数据库,重新导入新建的空间库中。如,在sql或psql console中输入'create extension postgis;'
2、shp存放的位置有中文路径或者路径太深
3、提示编码有问题
解决方法:解决:打开Options 将编码改为 GBK (中文),其他语言请设置对应的编码。如果改成gbk仍然提示这种字符编码问题,options编码改成gb18030,即可不报错。
导出shp中文乱码
这个问题我还没遇到先写这里,怕找不到了
解决方法:在环境变量中添加:PGCLIENTENCODING=GBK即可。正常导出无乱码。
post获取点的经纬度
在用sql检索空间点数据坐标的时候用这个SELECT st_x(geom),st_y(geom),这个是获取点的x,y坐标,当时用.net操作postgis的时候直接select geom报错。。。
还有在进行拓扑分析的时候要指定空间数据的坐标系与数据库中的一致,不然提示参考系不一致。还是报错
我要实现的是获取一个矩形范围内的点,并将这些点按到指定点进行距离排序,取前50个要素即可,sql语句如下:
SELECT fname,admincode1,st_x(geom),st_y(geom) FROM [tableName] where ST_Contains(
ST_MakeEnvelope(122.09,30.09,122.11,30.11,4490) ,[tableName].geom) ORDER BY
[tableName].geom <->st_geometryfromtext('POINT(122.1 30.1)', 4490) LIMIT 50
将上面的[tableName]改为自己的表名(点图层),即可实现
今天就先写这些