1 创建空间数据库,导入数据
1.1 在安装了 postgis 插件后,创建数据库实例,如 pg_building
1.2 将数据库扩展支持空间数据存储,在数据库实例上执行 sql,
如下:
pg_building=# CREATE EXTENSION postgis;
CREATE EXTENSION
pg_building=# CREATE EXTENSION postgis_topology;
CREATE EXTENSION
pg_building=# CREATE EXTENSION fuzzystrmatch ;
CREATE EXTENSION
pg_building=# CREATE EXTENSION postgis_tiger_geocoder;
CREATE EXTENSION
1.3 使用 PostGIS 工具,将建筑物面 shpfile 文件导入空间数据
库
1.4 在 Navicat 中修改表的属性字段类型
2 空间数据访问
2.1 使用 QGIS 预览空间数据
打开 QGIS3.4
建立空间库连接,填写如下信息
双击空间图层表,即可以实现数据可视化
2.2 使用 nodejs 访问 postgis 空间数据库,返回 geojson 格式
空间数据
注意:geojson 属性字段名称都使用小写!!!
在 SmartTileServer 工程中,postgres 基础访问类 PGUtil,使用的
是池化连接。
在 Cesium 中,使用 GeoJsonDataSource 加载网络数据。
2.3 Postgis sql 空间关系常用函数
1) 几何类型转换函数
//wkt 转 geometry:st_geomfromtext(wkt)
select ST_GeomFromText('Point(122 33)')
//geometry 转 wkt:st_astext(geometry)
select ST_AsText(ST_GeomFromText('Point(122 33)'))
//geometry 转 geojson:st_asgeojson(geometry)
select ST_AsGeoJson(ST_GeomFromText('Point(122 33)'))
//geojson 转 geometry:st_geomfromgeojson(geojson)
select
ST_GeomFromGeoJson(ST_AsGeoJson(ST_GeomFromText('Point(122
33)')))
//geometry 转 geohash:st_geohash(geometry)
select ST_GeoHash(ST_GeomFromText('Point(116 39)'))
//geohash 转 geometry:st_geomfromgeohash
select ST_GeomFromGeoHash('wwfmzesx7yvjugxr3nzv')
2) 几何关系函数
获取两个几何对象间的距离 ST_Distance(geometry, geometry)
如 果 两 个 几 何 对 象 间 距 离 在 给 定 值 范 围 内 , 则 返 回 TRUE
ST_DWithin(geometry, geometry, float)
判断两个几何对象是否相等
(比如 LINESTRING(0 0, 2 2)和 LINESTRING(0 0, 1 1, 2 2)是
相同的几何对象) ST_Equals(geometry, geometry)
判断两个几何对象是否分离 ST_Disjoint(geometry, geometry)
判 断 两 个 几 何 对 象 是 否 相 交 ST_Intersects(geometry,
geometry)
判 断 两 个 几 何 对 象 的 边 缘 是 否 接 触 ST_Touches(geometry,
geometry)
判 断 两 个 几 何 对 象 是 否 互 相 穿 过 ST_Crosses(geometry,
geometry)
判断 A 是否被 B 包含 ST_Within(geometry A, geometry B)