postgis 的 geometry 函数使用(二)

359 阅读4分钟

ST_NumInteriorRing

islands表

image.png

查询结果

image.png

SELECT name, st_numinteriorring (land) FROM islands 

定义:大多边形内包涵几个多边形

ST_NumPoints

numpoints_test表

image.png

查询结果

image.png

SELECT geotype, st_numpoints (g1) AS Number_of_points FROM numpoints_test;

定义:用于返回几何中的点(折点)数。

ST_OrderingEquals

定义: ST_OrderingEquals 用于比较两个 ST_Geometries 对象,如果两个对象的几何相等且坐标顺序相同,则返回 1 (Oracle) 或 t (PostgreSQL);否则,其将返回 0 (Oracle) 或 f (PostgreSQL)。

linestring_test表

image.png

查询结果

image.png


SELECT lid, st_equals (ln1,ln2) AS Equals,st_orderingequals (1n1,ln2)As OrderingEquals 
FROM linestring_test;

ST_Overlaps

定义:ST_Overlaps 将以两个几何对象作为输入参数,如果两个对象的交集生成的几何对象维度相同但不等于任一源对象,则返回 1(Oracle 和 SQLite)或 t (PostgreSQL)。否则,返回 0(Oracle 和 SQLite)或 f (PostgreSQL)。

sensitive_areas表

image.png

hazardous_sites表

image.png

查询结果

image.png

SELECT DISTINCT (hs.id) AS "Hazardous Site ID"
 FROM hazardous_sites hs, sensitive_areas sa
 WHERE st_overlaps (st_buffer (hs.site, .001), sa.shape) = 't';

ST_PointFromWKB

定义: ST_PointFromWKB 以熟知二进制 (WKB) 表示和空间参考 ID 作为输入参数返回 ST_Point 类型的对象。

sample_points表

image.png

查询结果:

image.png

SELECT id, st_astext (st_pointfromwkb(wkb, 4326)) 
 AS points
 FROM sample_points;

ST_PointN

定义: ST_PointN 采用 ST_LineString 和整型索引,并返回 ST_LineString 的路径中作为第 n 个折点的点

pointn_test表

image.png

查询结果:

image.png

SELECT gid, st_astext (st_pointn (ln1, 2)) 
 AS The_2ndvertex
 FROM pointn_test;

ST_PointOnSurface

定义: ST_PointOnSurface 以 ST_Polygon 或 ST_MultiPolygon 类型的对象为输入参数,并返回保证位于其表面上的 ST_Point

hbuildings 表

image.png

查询结果

image.png

SELECT st_astext (st_pointonsurface (footprint)) 
 AS "Historic Site"
 FROM hbuildings;

ST_PolyFromWKB

定义: ST_PolyFromWKB 以熟知二进制 (WKB) 表示和空间参考 ID 作为输入参数,返回 ST_Polygon 类型的对象。

sample_polys表

image.png

查询结果

image.png

SELECT id, st_astext (st_polyfromwkb (wkb, 4326)) 
 AS POLYS
 FROM sample_polys;

ST_Relate

定义: ST_Relate 比较两个几何,如果几何满足 DE-9IM 模式矩阵字符串指定的条件,则返回 1(Oracle 和 SQLite)或 t (PostgreSQL);否则,返回 0(Oracle 和 SQLite)或 f (PostgreSQL)。

relate_test表

image.png

查询结果

image.png

SELECT st_relate (g1, g2, 'T*F**FFF*') AS "g1=g2", 
 st_relate (g1, g3, 'T*F**FFF*') AS "g1=g3",
 st_relate (g2, g3, 'T*F**FFF*') AS "g2=g3" 
 FROM relate_test;

ST_SRID

定义: ST_SRID 以几何对象作为输入参数,并返回其空间参考 ID。

srid_test表

image.png

查询结果

image.png

SELECT st_srid (g1) 
 AS SRID_G1
 FROM srid_test;

ST_StartPoint

定义: ST_StartPoint 用于返回线串的第一个点。

startpoint_test表

image.png

查询结果

image.png

SELECT gid, st_astext (st_startpoint (ln1)) 
 AS Startpoint
 FROM startpoint_test;

ST_SymmetricDiff

定义: ST_SymmetricDiff 以两个几何对象作为输入参数,并返回由源对象的非公共部分组成的几何对象

watershed表

image.png

plumes表

image.png

查询结果:

image.png

SELECT ws.id WS_ID,
 st_area(st_symmetricdifference (st_buffer (p.site, .1), ws.shape)) AREA_NO_INT
  FROM PLUMES p, WATERSHED ws
	 WHERE p.id = 20;

ST_Touches

定义: 如果两个几何的公共点都不与两个几何的内部相交,则 ST_Touches 返回 1(Oracle 和 SQLite)或 t (PostgreSQL);否则,返回 0(Oracle 和 SQLite)或 f (PostgreSQL)。其中至少一个几何必须是 ST_LineString、ST_Polygon、ST_MultiLineString 或 ST_MultiPolygon。

sewerlines表

image.png

查询结果

image.png

SELECT s1.sewer_id, s2.sewer_id
 FROM sewerlines s1, sewerlines s2
 WHERE st_touches (s1.sewer, s2.sewer) = 't';

ST_Transform

ST_Transform 将二维 ST_Geometry 数据作为输入,并返回已转换为空间参考的值,该空间参考由您所提供的空间参考 ID (SRID) 指定。

警告:
    - 如果使用 st_register_spatial_column 函数将空间列注册到 PostgreSQL 数据库,注册时 SRID 将写入
sde_geometry_columns 表。如果在 Oracle 数据库的空间列中创建了空间索引,创建空间索引时 SRID 将写入
st_geometry_columns 表。使用 ST_Transform 更改 ST_Geometry 数据的 SRID 不会在 
sde_geometry_columns  st_geometry_columns 表中更新 SRID。

    - 如果地理坐标系不同,则 ST_Transform 将执行地理变换。地理变换是指在两个地理坐标系间进行转换。
地理变换定义为在特定转换方向上进行,例如,从 NAD 1927  NAD 1983,但不管源和目标坐标系是什么,
ST_Transform 函数都能正确执行变换。

    - 地理转换方法可以分为两类:基于方程和基于文件。基于方程的方法是独立的,不需要任何外部信息。
基于文件的方法使用磁盘上的文件计算偏移值。与基于方程的方法相比,基于文件的方法通常更加精确。
在澳大利亚、加拿大、德国、新西兰、西班牙和美国,一般使用基于文件的方法。
文件(加拿大除外)可从 ArcGIS Desktop 安装获得或直接从各种国家制图机构获得。

    - 要支持基于文件的变换,必须将文件置于数据库服务器中与 ArcGIS Desktop或 ArcGIS Pro 
安装目录中的 pedata 文件夹相同的相对文件夹结构中。

使用方式

CREATE TABLE transform_test (
 ln1 sde.st_geometry,
 ln2 sde.st_geometry);
INSERT INTO transform_test (ln1) VALUES (
 sde.st_geometry ('linestring (10.01 40.03, 92.32 29.39)', 4326)
);
UPDATE transform_test
 SET ln2 = sde.st_transform (ln1, 3857);

ST_Union

定义: ST_Union 返回两个源对象组合而成的几何对象。

sensitive_areas表

image.png

hazardous_sites表

image.png

查询结果

image.png

SELECT sa.id AS SA_ID, hs.id AS HS_ID,
 st_area (st_union (st_buffer (hs.site, .01), sa.shape)) AS UNION_AREA
 FROM hazardous_sites hs, sensitive_areas sa;

ST_Within

定义: 如果第一个 ST_Geometry 对象完全位于第二个 ST_Geometry 对象的范围内,则 ST_Within 返回 1(Oracle 和 SQLite)或 t (PostgreSQL);否则,返回 0(Oracle 和 SQLite)或 f (PostgreSQL)

squares表

image.png

zones表

image.png

查询结果

image.png

SELECT s.id
 AS sq_id
 FROM squares s, zones z
 WHERE st_intersects (s.shape, z.shape) = 't' 
 AND st_within (s.shape, z.shape) = 'f';