空间数据分为矢量数据和栅格数据
不可再分的最小单元现象称为空间实体
空间实体举例
一根电线杆–>点
所处的位置信息,电线杆高度及其他相关信息
一条道路–>线
道路长度、宽度、起点、终点及道路等级等相关信息
一个湖泊–>多边形
湖泊的周长、面积和水质等信息
空间坐标
和拓扑关系
PostGIS 是一个空间数据库。Oracle Spatial 和 SQL Server(2008 或更高版本)也是空间数据库
Spatial Database Management System,SDBMS
一个普通的数据库有字符串、数字和日期。而空间数据库添加了额外的数据类型来表示地理特征。这些数据类型抽象和封装了边界
和维度
等空间结构。在许多方面,空间数据类型可以简单地理解为形状geometry。
空间数据类型以分层类型组织。每个子类型都继承其父类型的结构(属性)和行为(方法或函数)。
空间数据库提供一组功能来分析几何组件、确定空间关系和操纵几何。这些空间功能作为构建任何空间项目的“工具”。
大多数空间函数可以分为以下五类之一:
geometry
(PostGIS
中存储空间信息的格式)和外部数据格式之间转换的函数。PostGIS
管理的信息的功能。PostGIS通过向PostgreSQL添加对空间数据类型、空间索引和空间函数的支持,将PostgreSQL数据库管理系统转换为空间数据库。
现有空间数据库标准主要有:
Simple Feature Access SQL, SFA SQL
(地理信息简单要素的SQL实现规范)SQL Multimedia Part3: Spatial, SQL/MM
SFA SQL是OGC制定的标准
Simple Feature Access
规范的两部分分别为:
Simple Feature Access - Part 1
: Common Architecture(https://www.ogc.org/standards/sfa) —— 定义几何对象的通用架构,描述了通用的简单要素地理集合对象模型,及集合对象的不同表达方式和空间参考系统的表达方式,具有平台独立性。Simple Feature Access - Part 2
: SQL Option(https://www.ogc.org/standards/sfs) —— 定义了第一部分定义的简单要素模型在数据库中的实现,给出了内模式下几何类型(geometry type)的定义及相关实现。SFA由OGC于1999年提出,说明了简单地理要素(点,线,多边形等)的对象模型及其发布、存储、读取操作的接口标准。
2005年进一步细化了相关内容,添加了注记文字 (Annotation Text),将其修订为简单要素访问规范 (Simple Feature Access, SFA)1.1.0版。
2006年10月,推出了SFA 1.2.0版,目前该实现规范已被ISO TC211吸纳为ISO19125系列标准。
目前最新的SFA版本为1.2.1,于2011年推出。
SQL/MM是ISO(International Standard Organization,国际标准化组织)提出的标准,SQL/MM第三部分空间定义了矢量数据存储与检索的相关标准,解释了基于这些数据类型如何使用存储、获取和处理空间数据。
SFA SQL和SQL/MM的Geometry类型总体框架比较近似
SFA SQL的Geometry类型结构图:(有空间参考系)
SQL/MM的Geometry类型结构图:
空间数据模型表达的是空间信息的一种数据组织方式,通常有对象模型
、场模型
、网络模型
等。现有空间数据库系统均是基于某种空间数据模型的。空间数据模型是数据库系统的核心和基础。
现有的空间数据库都是基于某种空间数据模型
GIS中常见的两大数据模型:矢量模型和栅格模型
geometry
)模型
object
)模型topo
)模型network
)模型几何对象模型是空间数据库中最常见、最基础的一个模型
可以理解为空间数据类型(同关系型数据库中的实体,属性之类的概念)
坐标维数与几何维数的区别:坐标维数为常见(x,y,z)坐标,而几何维数为:几何维度是在一定前提下描述一个几何对象所需的参数个数。例如:“点是零维的、线是一维的、平面是二维的、体是三维的
geometry
)、属性(attribute
)、行为(behavior
)等三类信息构成OGC
仅能表达和处理简单(Simple
)的几何对象:简单几何对象是指不自相交的几何对象任何几何模型都有其边界(boundary
)、内部(interior
)和外部(exterior
)
几何对象模型的坐标维数为3,但目前仅能描述二维几何对象
PolyhedralSuface
)类和不规则三角网(TIN)类也仅用于表达三维坐标空间中的某个曲面,并不能表达一个真正的三维的体模型M值
x, y, z
坐标外,还有一个M
坐标M
值是线性参考系统的一个重要的度量值值
表示从高速公路由于体表面违反了“多边形元素只能相交在有限数量的点上”的规则,所以体表面不是多多边形
不规则三角网格主要用来表达高程或其他状况(如浓度)的表面
用来高程、坡度、坡向的计算,等高线的提取,体积的计算,垂直剖面分析,通视分析等
在OGC的数据模型中,TIN被认为是矢量数据的一种表达方式,而ESRI的GeoDatabase则将其视为一种不同于矢
量表达的另一种空间数据表达方式
分类
12种方法,概念和方法不难理解
7种方法,基于GIS基础也不难理解
前9种与空间拓扑关系查询有关
后2种是基于线性参考的空间查询方法
8种空间关系
相离(disjoint
)
若 ∩ = ∅,则a和b相离
相交(intersects
)
若 ∩ ≠ ∅,则a和b相交
a.Intersects(b) ↔ !a.Disjoint(b)
相等(equals
)
若 ,且 ,则a和b相等
交叠(overlaps
)
如Dim(I(a)) = Dim(I(b)) = Dim(I() ∩ ())
,且 ∩ ≠
,同时 ∩ ≠
,则a和b交叠
点/点、线/线、面/面交叠关系,没有线/面等交叠关系
包含于(within
)
若 ∩ = ,且I ∩ = ∅,则a包含于b内
包含(contains
)
若b包含于a,则a包含b
a.Contains(b) ↔ b.Within(a)
相接(touches
)
若I ∩ = ∅,且 ∩ ≠ ∅
,则a和b相接
面/面、线/线、线/面、点/面、点/线相接关系
但没有点/点相接关系(为什么?)
crosses
)空间对象的拓扑关系不是非此即彼的,也有一定的分辨精度层次关系
基于概念模型,OGC提出了基于预定义数据类型和基于扩展几何类型的两种实现方法
numeric
)类型、二进制大对象(BLOB
)类型实现空间数据的存储和管理,这些数据类型的解释和维护由DBMS负责、基于numeric
和BLOB
的实现,要素表(Feature
)、几何列表(GEOMETRY_COLUMNS
)和空间参考系(SPATIAL_REF_SYS
)表的结构都一样,不同之处在于几何(Geometry
)表的结构
要素表
和几何表
是用户表,用于存储空间数据,几何列表(geometry_columns
)和空间参考系表是系统表,用于存储用户表的元数据(meta-data)
信息
下面为每个表的各字段解析
Feature表:
Geometry_Column
列是几何对象的逻辑几何数据类型,其存储的是几何对象的唯一标识(geometry ID, GID
),而几何数据实际存储在Geometry
表中,因此,可以将GID
作为指针到Geometry
表找到其空间数据(基于Numeric类型的)Geometry表:
MAX_PPR
个空间坐标Geometry
的空间坐标超过MAX_PPR则折行存储GID
是Geometry
对象的唯一标识GeometryCollection
中ESEQ
用于表示不同的元素SEQ
则用于标识统一Geometry
折行存储后的行序列号ETYPE
用于标识Geometry
表中指定的几何对象的类型(如,点、线、面、多点等)(基于BLOB类型的)Geometry表:
WKB
(Well-Known Binary Representation)形式存储在名为WKB_Geometry
的BLOB类型的字段中,Geometry
的情况Geometry
对象Geometry
对象的唯一标识YMIN
, YMAX
, XMIN
, XMAX
用于存储该对象的四至GID
GEOMETRY_COLUMNS表:
F_TABLE_CATALOG
, F_TABLE_SCHMEA
, F_TABLE_NAME
分别表示某Feature
表所在的目录名、模式名和表名F_GEOMETRY_COLUM
用于记录前3列值确定的Feature表中Geometry
列的名字STORAGE_TYPE
表示Geometry表的存储类型GEOMETRY_TYPE
表示Geometry表中几何对象的类型COORD_DIMENSION
表示几何对象的坐标维数MAX_PPR
表示每行存储的空间坐标点个数SRID
描述了Feature
表的空间参考系SPATIAL_REF_SYS表
SRID
为主码AUTH_NAME
是空间参考系的名字RTEXT
是空间参考系的文字描述
示例
基于数字类型的Geometry表:其中,1 或多个坐标值(X 坐标值)将被表达为 Geometry 表中数值类型的对,每 个几何对象用键(GID) 标识,对象中不同元素元由 ESEQ 标识,每个元素的类型用 ETYPE 标识,每个元素分布在要素表的1或多行中,它们特有的顺序用 SEQ 值标识。对于无用的坐标对应将其全集(X Y) 置为 Nil 。
基于 BOLB 类型的 Geometry 表:它仍用 GID 作为键、用 Geometry 著名二进制表示存储几何对象, Geometry 表包括几何对象的最小边界矩形。这样如有需要,允许构建无真实几何对象结构 访问的空间索引。
所谓基于扩展 Geometry 类型的实现就是利用对象关系型数据库中对抽象数据类型的支 持,定义 Geometry
类型及其相关的方法与函数,并用该扩展的 Geometry 类型实现空间数 据的存储与管理。
各表字段解释:
GEOMETRY_COLUMNS
和SPATIAL_REF_SYS
是系统表,用于存储元数据信息
Feature表是用户表,用于存储空间数据
属性数据存在用户定义的Attributes
列中
空间数据存放在扩展几何类型的Geometry_Column
中
创建扩展几何体类型数据示例:
Create Type Geometry As Object (
Private Dimension SmallInt Default -1,
Private CoordinateDimension SmallInt Default 2,
Private Is3D SmallInt Default 3,
Private IsMeasured SmallInt Default 0)
Not Instantiable
Not Final
定义Dimension函数
Method Dimension()
Return SmallInt
Language SQL
Deterministic
Contains SQL
Returns Null On Null Input
……
定义SymDifference函数
Method SymDifference(ageometry Geometry)
Return Geometry
Language SQL
Deterministic
Contains SQL
Returns Null On Null Input
……
在基千 BLOB 的实现方案中,数据库仅将其解释为一个大的二进制串,故空间数据库管理系统的设计者需要考虑此二进制串的物理意义。
SFA SQL 给出了一种较为紧凑的几何数据的二进制方式的存储格式,即 WKB(well-known binary) 。它不仅可用于BLOB中空间对象的存储,还可以用于几何数据二进制流的交换。
WKB表达
示例:出一个由两个环构成的多边形的 WKB 表达
- SFA SQL给出了一种较为紧凑的几何数据的二进制方式的存储格式
- 数字类型串行化为网络数据表示(network datarepresentation, NDR)或外部数据表示(external datarepresentation, XDR)存储在磁盘上
- NDR(按小
Endian
方式编码)和XDR
(按大Endian
方式编码)是两种标准的数字类型二进制编码方式
基于文本格式
几何数据交汇标准表 达方法,即 WKT(well-known text) 。(易读)以地理坐标系为例,在NAD83水准面(Datum)上的UTM10带被定义为:
PROJCS [“ NAD_198 3_UT M_Zon e_10M”,
< geographic cs>,
PROJECTION [“ Transverse_Mercator”],
PARAMETER [“ False_Easting”, 500000.0],
PARAMETER [“ False_Nothing”, 0.0],
PARAMETER [“ Central_Meridian”, -123.0],
PARAMETER[“ Scale_Factor”, 0.996],
PARAMETER[“ Latitude_Of_Origin”, 0.0],
UNIT [“ Meter”, 1.0]]
#对象依次为水准面、椭球体、本初子午线和测量的角度单位
示例:
WKT和WKB只支持二维几何对象的表达,并没有任何有关空间参考系的信息
WKT
或WKB
表达在转换成另一种格式时,空间参考系信息常被丢失,若想保留这些信息,需要单独对其进行处理,同时用setSRID()方法把它们添到几何体中EWKB
和EWKT
,不仅可以嵌入集合体的SRID信息,还增加了对3DZ、3DM和4D坐标的支持结构化查询语言(SQL)是关系数据库的标准语言(通用的、功能强大的关系数据库语言)
空间结构化查询语言(Spatial Structured QueryLanguage, SSQL
)
基于SQL99提供的对象扩展机制,扩充的一种用于实现空间数据的存储、管理、查询、更新与维护的结构化查询语言
由于与地理位置密切,也称为GSQL
SSQL是基于某种空间数据模型,对标准的SQL进行扩展
以PostgreSQL/PostGIS为例
PostGIS Manual Chapter 4, 6, 7http://postgis.net/docs/index.html
查找具体函数定义和说明Chapter 8-13
原生的postpresql:
难以达到GIS要求
此时便诞生了postgis
PostGIS是由Refractions Research公司研发的、对象关系型数据库系统PostgreSQL
的一个空间扩展(在某个数据库下添加扩展postgis,该库便成为了空间数据库)下面为postgis的一些好处
支持PostgreSQL/PostGIS开源GIS产品体系
PostGIS遵循OpenGIS的规范开发,支持OGC规范中的点、线、多边形、多点、多线、多多边形和集合对象集
PostGIS支持所有的对象表达方法,比如WKT
和WKB
,支持所有的数据存取和构造方法,提供空间分析函数,提供对元数据的支持及其相关的访问函
数,提供一系列用于检测空间对象之间的空间关系的二元谓词,提供空间操作符用于空间数据操作
除OGC规范要求的内容外,PostGIS提供:
- PostGIS并未严格地按照对象加方法的形式实现,而是采用对象类型加函数的形式实现
- 早起的PostGIS函数是根据OGC的SFA SQL标准开发,后来OGC为了与SQL/MM兼容,修订了SFASQL标准,形成了SFA SQL以及ISO19125
- 在后续的标准中,空间函数的参数稍有变动,且均已“ST_”(Spatial Type)开头。为此,OGC又根据SFA SQL封装了一套“ST_”开头的函数
- PostGIS常会出现两个功能基本相同的函数,一个以“ST_”开头,另一个则无“ST_”(因为SFA SQL标准的Geometry函数是无ST开头的,而SQL/MM标准的Geometry函数则是有ST开头的)
boolean
布尔类型,其值为T或Fbox2d
矩形框类型,由矩形左下角和右上角组成box3d
长方体类型,由左前下角和右后上角组成bytea
相当于BLOB类型,可变长的二进制值integer
字节为4的整数(int4)double precision
字节为8的浮点数(float8)character varying
可变长字符类型,相当于BLOC使用PostGIS 2.0 Shapefile and DBF Loader Exporter
使用QGIS连接导入
OSM网上地图协作计划,目标是创造一个内容自由且能让所有人编辑的世界地图
空间数据和属性数据
Node
定义了空间中点的位置
Ways
定义了线或区域
Open polyline
Closed polyline
Area
landuse=*
来标示区域等Relations
(可选的)定义了元素间的关系
Tags
用于描述上述矢量数据基元
osm数据格式:
OSM XML – xml-format provided by the API
PBF – highly compressed, optimized binary format similar to the API
o5m – for high-speed processing, uses PBF coding, has same structure as XML format
OSMJSON – json variant of OSM XML
osm数据下载网站:
GeoFabrik:http://www.geofabrik.de/
Metro Extracts:[http://metro.teczno.com/
)HOT Exports:http://hot.openstreetmap.org/
BBBike:http://extract.bbbike.org/
创建一个实践表
create table landuse (
landuse_id integer NOT NULL,
name varchar(20),
the_geom geometry, #也可以写成the_geom geometry(Polygon, 4326)
area double precision, #面积
perimeter double precision, #周长
constraint landuse_key primary key (landuse_id));
插入数据
例3:将一条新的土地利用数据记录(ID:12; 名称:Timberforest;几何列WKB描述:01010000001DDB93F460BB4241A84E5AC86F455441; 面
积: 47806700; 周长: 34246.2)
插入到landuse表中
insert into landuse
values(12, ‘Timber-forest’,
‘01010000001DDB93F460BB4241A84E5AC86F455441’,
47806700, 34246.2);
//等同于
insert into landuse
values(12, ‘Timber-forest’,
ST_GeomFromText(‘Polygon((10 10, 10 20, 20 20, 20 10,
10 10))’, 4326), 47806700, 34246.2);
插入子查询结果(首先建立新表 landuse_ new, 其属性列名与 landuse 相同)
例4:将landuse
表中ID号小于15的记录存入表landuse_new
中,假设landuse_new
属性列只有landuse_id
, name
,the_geom
insert into landuse_new
select landuse_id, name, the_geom
from landuse
where landuse_id < 15;
管理和操纵几何类型的数据表及其元数据
AddGeometryColumn(varchar,varchar,varchar,int4,varchar,int4)
DropGeometryColumn(varchar, varchar, varchar)
DropGeometryTable(varchar, varchar)
几何属性可以在创建关系时直接创建,也可以再创建关系后,增加几何属性
position geometry(xxx, 4326)AddGeometryColumn
Probe_Geometry_Columns()
geometry_columns
表中归档ST_SetSRID(geometry, int4)
UpdateGeometrySRID(varchar, varchar, int4)
Update_Geometry_Stats(varchar, varchar)
例5:在landuse
表中添加一个新的几何字段
Select AddGeometryColumn('public', 'landuse', 'geom', -1,'Polygon', 2)
根据给定的几何描述,构造相应几何对象
根据WKT/WKB表达,生成多几何对象
ST_GeomCollFromText(text, [])
ST_GeomCollFromWKB(bytea, [])
根据GML/WKT/WKB表达,生成几何对象
ST_GeomFromGML
ST_GeomFromText
(构造几何对象建议使用ST_GeomFromText(‘WKT’, 4326)
ST_GeomFromWKB
根据输入的多点/WKT/WKB表达,生成线串
ST_LineFromMultiPoint(geometry)
ST_LineFromText(text, [])
ST_LineFromWKB(bytea, [])
创建一个A为左下角点、B为右上角点的box2d对象
ST_MakeBox2D(geometry A, geometry B)
根据给定的两个点对象,生成一条线段
ST_MakeLine(geometry, geometry)
创建一个2D、3D或4D坐标空间中的点对象
ST_MakePoint(float8, float8, [], [])
创建一个带有x, y和M值的点对象
ST_MakePoint(float8, float8, float8)
创建一个多边形(输入参数中的几何对象必须是封闭的)
ST_MakePolygon(geometry, [])
基于WKT/WKB表达,生成多点/多线/多多边形
ST_MPoint(Line)(Poly)FromText(text, [])
根据给定的左边对,生成点
ST_Point(float, float)
根据WKT/WKB表达,生成多边形
ST_PolyFromText(text, [])
ST_PolyFromWKB(bytea, [])
根据给定的线串、SRID(空间参考) ,生成多边形
ST_Polygon(geometry, integer)
示例:构造名为aline的LineString(1 2, 3 4)几何对象
Select
ST_LineFromWKB(
ST_AsBinary(
ST_GeomFromText( 'LineString(1 2, 3 4)'))) as aline
其中, ST _ AsBinary 的作用将 Geometry 类型转换为WKB类型的函数
ST _GeomFromText
的第一个参数为文本类型,是某个几何对象的 WKT 描述;
ST_LineFrom WKB
第一个参数为长二进制类型,是某个几何对象的 WKB 述。他们的第二个参数均为可选参数,一般为空间参考 (SRID) 所对应的整数值。在缺省的 情况下, SRID 取值为-1
注意:
哪些函数适应LineString / Polygon,哪些适用MultiLineString /MultiPolygon
新版本可能对函数进行更新,增加或减少功能,例如ST_StartPoint在2.0.0之后不支持single geometryMultiLineString。函数在具体使用时查看适用版本的帮助文档
示例:用ST_IsSimple
函数判断下面几何对象是否是简单对象
Select
ST_IsSimple(ST_GeomFromText( 'LINESTRING(1 1,2 2, 1 3, 1 2, 2 1)' )) As smpl_line,
ST_IsSimple(ST_GeomFromText ('POLYGON((0 0,0 1, 1 1, 1 0, 0 0))')) As smpl_plygon
按不同格式的要求输出几何对象
WKB
, WKT
, EWKB
, EWKT
, GeoJSON
, GML
, KML
,SVG
, 用little-endian或bigendian编码的HEXEWKB等格式输出几何对象ST_AsText
/AsBinary
/AsEWKB
/AsEWKT
/AsGeoJson
/AsGML
/AsHEXEWKB
/AsKML
/AsSVG
示例:以Polygon((0 0, 0 1, 1 1, 1 0, 0 0))
为例,分别按二进制、EWKT、SVG的格式输出
SELECT ST_AsBinary(ST_GeomFromText ('POLYGON ((0 0, 0 1, 1 1, 1 0, 0 0))', 4326));
SELECT ST_AsEWKT(ST_GeomFromText('POLYGON((0 0, 0 1, 1 1, 1 0, 0 0))', 4326));
SELECT ST_AsSVG(ST_GeomFromText ('POLYGON((0 0, 0 1, 1 1, 1 0, 0 0))', 4326));
编辑函数用于增加、删除、修改几何对象的坐标信息
示例1:使用ST_Force_Collection
函数将原先的Geometry
数据类型转换为GeometryCollection
SELECT ST_AsEWKT(ST_Force_Collection('POLYGON((0 0 2, 0 5 2, 5 0 2, 0 0
2), (1 1 2, 3 1 2, 1 3 2, 1 1 2))'));
示例2:将例1中的多边形用ST_ForceRHR进行强制转换,使其坐标排列顺序符合RHR
Select ST_AsEWKT(
ST_Force_RHR(
'Polygon((0 0 2, 0 5 2, 5 0 2, 0 0 2),
(1 1 2, 3 1 2, 1 3 2, 1 1 2))'));
示例3:对三维坐标空间中的几何对象进行仿射变换的函数ST_Affine,共13个参数,图形学4X4的变换矩阵,将一条线沿Z轴方向旋转a弧度
Select ST_AsEWKT(ST_Affine(the_geom, cos(a), -
sin(a), 0, sin(a), cos(a), 0, 0, 0, 1, 0, 0, 0)) As
using_Affine
From (Select ST_GeomFromEWKT( 'LINESTRING(1
2 3, 1 4 3)') As the_geom) As HAHA
获取一些衍生的几何对象,达到不同应用所要求的数据
ST_Buffer
获取几何对象的缓冲区
ST_Boundary
获取几何对象的边界
ST_Centroid
获取几何对象的质心
ST_ConvexHull
获取几何对象的凸包
ST_Difference
获取A去除B的几何形状
ST_Intersection
获取两个几何对象相交部分
ST_MemUnion
ST_Union
相同,区别是该函数是内存友好的,即用较少的内存和较长的时间完成合并操作ST_PointOnSurface
返回曲面上的点
ST_Shift_Longitude
使经度在0-360之间
ST_SymDifference
获取A和B互补相交部分
ST_Union
返回A和B合并后的几何
示例1:获取土地利用表landuse中ID号为12的几何对象的质心
Select ST_Centroid(the_geom) From landuse Where landuse_id = 12;
示例2:为土地利用数据表landuse
中ID号为12的几何对象建立缓冲区距离为3的缓冲区(ST_Buffer(geometry, float8, [int4]) 可选参数[int4]表示生成缓冲区的一个1/4的圆弧内的点,默认为8
)
Select ST_Buffer(the_geom, 3) From Landuse Where Landuse_id = 12
正如属性数据的">"、"="、"<”等操作符一样, PostGIS 也定义了一些空间操作符。
与几何操作不同的是:操作符 进行空间操作的对象必须有空间索引才行,也就是说空间操作符是与空间索引绑定的。
示例:
Select tbla.column1, tblb.column1, tbla.column2 &&
tblb.column2 As overlaps
From (Values,
(1, ‘Linestring(0 0, 2 2)’::geometry),
(2, ‘Linestring(0 1, 0 3)’::geometry)) As tbla,
(Values,
(3, ‘Linestring(1 1, 3 5)’::geometry) As tblb
用于判断两几何对象的拓扑关系
ST_Contains
判断A是否包含B
ST_Covers
判断A是否覆盖B
ST_CoveredBY
判断B是否覆盖A
ST_Crosses
判断A和B是否相互穿过
ST_Disjoint
判断A和B是否相离
ST_DWithin
判断A和B距离是否在给定值内
ST_Equals
判断A和B是否相等
ST_Intersects
判断A和B是否相交
ST_Overlaps
判断A和B是否重叠
ST_Relate
判断A和B是否符合给定的9交模型矩阵
ST_Relate
获取A和B间的关系DE-9IM
ST_Touches
判断A和B是否相接
ST_Within
判断A是否被B包含
示例:判断两个多边形对象Polygon((1 1, 2 1, 2 3, 11)), Polygon((3 0, 3 2, 4 0, 3 0))间是否相交
Select ST_Intersects(
ST_GeomFromText('Polygon((1 1, 2 1, 2 3, 1 1))'),
ST_GeomFromText('Polygon((3 0, 3 2, 4 0, 3 0))'))
获取几何对象的各类测量值
ST_Area 计算几何对象的面积
ST_Azimuth 计算两点构成的方位角
ST_Distance 计算两个几何对象的距离
ST_Distance_Sphere计算两个几何对象的球迷距离(单位为米),地球半径取值为6370986米
ST_Distance_Spheroid计算地球曲面上两点间的最短距离,ST_Distance_Sphere
速度更快,ST_Distance_Spheroid准确度更高
ST_Length2d 计算二维坐标距离
ST_Length3d 计算三维坐标距离
ST_Length_Spheroid根据给定的地球椭球参数,计算几何对象在地球曲面上的长度
ST_Max_Distance 计算两个对象间的最大距离
ST_Perimeter 计算二维坐标空间的周长
ST_Perimeter3d 计算三维坐标空间的周长
注意:测量函数,如距离,长度,面积等,单位与空间参考系相关
示例1:求两点(0 0)和(1 1)间的方位角
Select ST_Azimuth(ST_GeomFromText('Point(0 0)'),ST_GeomFromText('Point(1 1)'));
示例2:计算两点在GRS_1980地球椭球体下的曲面距离
Select ST_Distance_Spheroid(ST_Centroid(the_geom),ST_GeomFromText('Point(-118, 38)'),'SPHERO ID["GRS_1980", 6378137, 298.257222101]') from landuse;
获取线性参考系下的部分几何对象,只对点和线数据有效
ST_Line_Interpolate_Point
插值点ST_Line_Locate_Point
计算位置参数ST_Line_Substring
计算线段ST_Locate_Along_Measre
返回与给定量测值的几何对象ST_Locate_Between_Measure
返回与给定量测值匹配的几何对象示例:点在线串30%的位置
Select ST_AsEWKT(ST_Line_Interpolate_Point
(the_line, 0.30))
From (Select ST_GeomFromEWKT(
‘Linestring (25 30, 80 100, 150 210)’) as the_line)
As HOHO
结果: (65.666222484043, 81.7570104342365)
ST_Accum 构造一个几何对象数组
ST_Box2d 获取几何对象二维中的边界
ST_Box3d 获取几何对象三维中的边界
ST_Estimated_Extent估计一个空间数据表的边界范围
ST_Expand 扩大几何对象
ST_Mem_Size 获取几何对象使用的内存大小
ST_Point_Inside_Circle判断点是否在圆内
ST_Summary获取几何对象的文本概要信息
ST_XMin, ST_XMax
ST_YMin, ST_YMax
ST_ZMin, ST_Zmax
示例:估计土地利用数据表landuse
的边界范围,以及the_geom
字段占用的内存大小的空间查询语句
Select ST_Estimate_Extent('public', 'landuse',
'the_geom')
Select SUM(ST_Mem_Size(the_geom) From landuse