空间数据库与结构之空间连接SQL语句

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’));
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值