ST_GeomFromText: 把几何对象从文本转为内部表达.(插入几何对象的时候需要用到, 除非直接输入的就是内部表达)
ST_AsText:把内部表达的几何转为文本形式.
- 空间参考标识符( spatial reference identifier)
ST_SetSRID:将几何图形上的SRID设置为特定的整数值。在构造查询的边界框时很有用。只针对一个几何对象.
SELECT … ST_SetSRID(geom,4326)… FROM …
还可以直接用geometry(type of geometry, SRID)定义:
CREATE TABLE town ( town_name character varying(25) PRIMARY KEY, geom geometry(Point ,4326);
或者直接用UpdateGeometrySRID(table,column,SRID)定义整张表的几何SRID:
SELECT UpdateGeometrySRID('kgr', 'geom', 4326);
ST_Transform (geometry, target-SRID):更改几何对象的SRID.
SELECT … ST_Transform(geom,4326) …
- 创建带有空间属性的表:
CREATE TABLE TabWithGeometry ( ID integer DESCRIPTION char(50), GEOMETRY geometry);
- 插入空间数据
1 插入带某个点坐标的元组
ST_MakePoint:把点转成xym坐标
INSERT INTO TabWithGeometry VALUES (1, 'A simple point', ST_MakePoint(10,11));
注意有逗号!!!
2 ST_GeomFromText
把文本转成坐标
INSERT INTO TabWithGeometry VALUES (2, 'A simple point',ST_GeomFromText('POINT(10 11)'));
注意没有逗号!!! 为什么没有? 看下一个就知道
3 ST_GeomFromText
插入多边形, 把文本转成坐标.
INSERT INTO TabWithGeometry VALUES (1, 'A polygon', ST_GeomFromText( 'POLYGON ((9 9, 12 9, 12 10, 9 10, 9 9))'));
因为插入多边形的时候,点与点的坐标间需要加逗号,所以,同一个点的坐标之间就不加了.
4 插入一个带孔的多边形.
ST_MakePolygon
geometry ST_MakePolygon(geometry linestring);
一个变量直接生成多边形
geometry ST_MakePolygon(geometry outerlinestring, geometry[] interiorlinestrings);
两个变量,生成带孔的多边形
ST_ExteriorRing:返回表示POLYGON几何图形的外环的线串。如果几何不是多边形,则返回NULL
ARRAY:创建数组,注意住方括号[].
INSERT INTO TabWithGeometry VALUES (1, 'Polygon with hole', ST_MakePolygon (ST_ExteriorRing('Polygon((3 3, 30 1, 32 28, 5 32, 3 3))'), ARRAY['Linestring(6 24, 9 29, 14 25, 11 22, 8 22, 6 24)']));
另一种方法,感觉这个更简单:
ST_BuildArea :创建由给定几何图形的组成线条形成的面几何图形。返回类型可以是Polygon或MultiPolygon,具体取决于输入。如果输入的线条没有形成多边形,则返回NULL。输入可以是LINESTRINGS,MULTILINESTRINGS,POLYGONS,MULTIPOLYGONS和GeometryCollections。
INSERT INTO myTable VALUES (2, ‘Polygon 1', ST_BuildArea (ST_Collect(('POLYGON((2 4, 4 3, 10 3, 13 5, 13 9, 11 13, 5 13, 2 11, 2 4 ))'),
('POLYGON((7 5, 7 10, 10 10, 10 5, 7 5))'))));
- 对于单个对象的操作:
1 ST_Envelope:返回几何图形的最小边界长方形.
2 ST_AsText:将几何形式转为文本形式,缺省值是WKT.
Example:
SELECT ST_AsText(ST_Envelope(geom)) FROM land WHERE name =‘bridge';
3 ST_Buffer:返回几何图形的给定距离的缓冲区.
缓冲区:地理几何的影响范围,表现为几何对象周围或里面的多边形.
Select ST_AsText(ST_Buffer((geometry), 10)) as buffer From polygon Where name= ‘island';
4 ST_ConvexHull
返回表示对象的凸包的多边形.
凸包:包含几何形状的最小凸集.
SELECT ST_AsText(ST_ConvexHull(geom)) AS convexhull FROM polygon WHERE name=‘polygon’;
5 ST_Length
返回几何图形的周长或者长度.
SELECT ST_Length(geom) AS length FROM polygon WHERE name= 'line';
6 ST_Area
返回二维多边形的面积.
SELECT name, ST_Area(geometry) AS Area FROM states WHERE name= ‘hamburg';
- 对于两个对象的操作:
1 ST_Distance:计算两个几何对象之间的距离.(两个对象最近接的一对点或者线段之间的距离.)
多边形竟然不是先求几何中心???
此处有坑, 默认距离不是米.
SELECT ST_Distance(geometry)) AS distance FROM states
2 ST_Intersects
如果几何对象在二维空间内(也就是他们的投影?)相交就返回真
SELECT ST_Intersects ((SELECT geometry FROM table WHERE name=‘object1’), (SELECT geometry FROM table WHERE name=‘object2’));
3 ST_INTERSECTION
返回两个几何对象相交的部分.
SELECT ST_Intersection ((SELECT geometry FROM table WHERE name=‘object1’), (SELECT geometry FROM table WHERE name=‘object2’));
- 对于一组几何对象的聚合:
1 ST_Collect
返回几何集合
SELECT ST_AsText(ST_Collect((SELECT geometry FROM table WHERE name=‘berlin’), (SELECT geometry FROM table WHERE name=‘hamburg’));
2 ST_Extent
返回框柱一组几何对象的矩形框.
envelope是一个几何对象.
相同点都是一次只返回一个框.
SELECT ST_Extent (geometry) FROM states WHERE country = 'Germany';
3 ST_Union
返回表示几何图形的点集的并集的几何图形.
SELECT ST_Union ((SELECT geometry FROM table WHERE name=‘object1’), (SELECT geometry FROM table WHERE name=‘object2’));