postgis 栅格数据_GIS算法:10_postgresql数据库与postgis

postgresql是对空间数据支持比较好的关系型数据库,postgis是它的空间计算拓展插件。

数据库与插件都是开源的。

(加拿大是现代地理信息产业的发源地,时至今日,加拿大仍然活跃着许多GIS开源项目的开发者。)

postgresql还有一些对GIS有用的拓展插件:pgrouting,用于路径规划;postgis_topology,基于postgis的拓扑套件;fuzzystrmatch,文本模糊匹配;postgis_tiger_geocoder,tiger英文地址编码;address_standardizer,地址标准化插件;pg-trajectory,时空检索插件。

postgis由OSGeo(开放地理信息联盟)维护,它的数据结构和算法设计,完全符合OGC的规范,postgis由C语言编写,它直接移植了C语言编写的GEOS空间算法库和GDAL数据处理库,因为它也包含Proj.4,所以它可以进行坐标系转换和空间投影,它还可以解析XML和JSON。

总之,GIS开发者需要的大部分空间算法与数据转换,postgis都能在postgresql数据库中实现。

官网上关于postGIS的介绍是:关系型数据库postgresql的空间拓展程序,增加了对地理对象的支持,允许在SQL中进行位置查询。

要是连postgresql都没有,那就看postgresql官网吧:https://www.postgresql.org/

安装好了之后,新建数据库,运行“CREATE EXTENSION postgis; ”进行拓展。

postgis安装后,可支持多个GIS相关扩展,postgis是支持空间运算的,postgis_raster支持基于影像数据的运算,postgis_topology支持数据拓扑,postgis_sfcgal支持三维数据计算……。

postgis新建包含空间数据字段的表语句:

CREATE TABLE mytable (

id SERIAL PRIMARY KEY,

geom GEOMETRY(Point, 4326),

name VARCHAR(128)

);

添加空间索引的语句:

CREATE INDEX mytable_gix

ON mytable

USING GIST (geom);

插入一个点语句:

INSERT INTO mytable (geom) VALUES (

ST_GeomFromText('POINT(0 0)', 4326)

);

查询距离范围内的点语句:

SELECT id, name,st_astext(geom)

FROM mytable

WHERE ST_DWithin(

geom,

ST_GeomFromText('POINT(0 0)', 4326,

0.01

);

虽然是英文文档,但使用Chrome浏览器,一键翻译即可。

postgis函数很多,还支持聚类和轨迹处理,

一路看下来,postgis能满足大部分需求,即使有pg-trajectory专门处理时序数据的扩展,但它能实现的,用postgis也能实现,把时间戳当成m值就可以了。

剩下一个postgis没有办法实现功能的拓展就是路径规划拓展pgrouting了。用pgrouting部署一个路径规划服务,还是挺方便的,跟本文无关,先不讲了。

最好的参考资料,就是官方文档,postgis的文档写得非常详尽,有什么地方不清楚,直接查阅文档是最好的。

你可能感兴趣的:(postgis,栅格数据)