PostGIS介绍

一、相关缩写OGC—— Open Geospatial Consortium(开放地理空间联盟),负责制订GIS领域的标准

二、PostGIS的扩展
PostGIS是利用Postgresql的扩展机制,在Postgresql的基础上增加了表达地理信息的空间数据类型和操作这些类型的函数

三、PostGIS支持的数据类型
1、OpenGIS Consortium (OGC)定义了两种标准方式来表达空间对象,分别是WKT( Well-KNown Text)和WKB(Well-KNown Binary)。WKT其实等价于编程语言中的类型的字面量,而WKB是空间对象在数据库中的存储格式。常用数据类型如下:
• POINT(0 0)
• LInesTRING(0 0,1 1,1 2)
polyGON((0 0,4 0,4 4,0 4,0 0),(1 1,2 1,2 2,1 2,1 1))
• MULTIPOINT(0 0,1 2)
• MULTILInesTRING((0 0,1 2),(2 3,3 2,5 4))
• MULTIpolyGON(((0 0,1 1)),((-1 -1,-1 -2,-2 -2,-2 -1,-1 -1)))
• GEOMETRYCOLLECTION(POINT(2 3),LInesTRING(2 3,3 4))
2、OGC定义的空间对象只是2D(二维)的,这在实际使用中,并不足够。PostGIS在此基础上,定义了EWKT(Extended Well-KNown Tex)和EWKB(Extended Well-KNown Binary),以此来支持3dm、3dz和4d 等坐标类型并支持嵌入 SRID 信息。例子如下:
• POINT(0 0 0) -- XYZ
• SRID=32632;POINT(0 0) -- XY with SRID
• POINTM(0 0 0) -- XYM
• POINT(0 0 0 0) -- XYZM
• SRID=4326;MULTIPOINTM(0 0 0,1 2 1) -- XYM with SRID
• MULTILInesTRING((0 0 0,1 1 0,1 2 1),(2 3 1,3 2 1,5 4 1))
polyGON((0 0 0,4 0 0,4 4 0,0 4 0,0 0 0),(1 1 0,2 1 0,2 2 0,1 2 0,1 1 0))
• MULTIpolyGON(((0 0 0,1 1 0)),((-1 -1 0,-1 -2 0,-2 -2 0,-2 -1 0,-1 -1 0)))
• GEOMETRYCOLLECTIONM(POINTM(2 3 9),LInesTRINGM(2 3 4,3 4 5))
3、为了配合sql进行简单查询(类似select * from table),还有一种canonical格式,这个格式其实是WKB的16进制表示。这个格式其实也可以用在Insert和Update语句中。
4、geometry(几何)和geography(地理)
geometry是所有几何体的父类(记住,Postgresql一个对象数据库),简单的说,geometry是基于欧几里得几何进行计算(欧几里得几何的典型特点是是两点间最短路径是一条直线),而geography是为了基于球面几何(典型特点是,两点间最短路径是一条圆弧)执行一些更复杂的操作而创建的。
使用AddGeometryColumn函数添加geometry类型,而geography类型需要特别的语法,如下:
CREATE TABLE testgeog(gid serial PRIMARY KEY,the_geog geography(POINT,4326) );--定义一个2D的点
CREATE TABLE testgeog(gid serial PRIMARY KEY,the_geog geography(POINTZ,4326) ); --定义一个3D的点 标准的geometry类型,如果SRID设置为4326,将被自动转化为为geography类型。 一般情况,寻找一个合适的投影坐标系,比如google map使用的3857,然后使用geometry类型就够了,这样可以获得最高的性能
本文主要参考Postgis文档,下载地址:http://postgis.refractions.net/documentation/manual-1.5/

相关文章

项目需要,有个数据需要导入,拿到手一开始以为是mysql,结果...
本文小编为大家详细介绍“怎么查看PostgreSQL数据库中所有表...
错误现象问题原因这是在远程连接时pg_hba.conf文件没有配置正...
因本地资源有限,在公共测试环境搭建了PGsql环境,从数据库本...
wamp 环境 这个提示就是说你的版本低于10了。 先打印ph...
psycopg2.OperationalError: SSL SYSCALL error: EOF detect...