PostGIS系列课程之空间关系

本文详细介绍了PostGIS中的空间关系函数,如ST_Equals、ST_Intersects、ST_Disjoint、ST_Within、ST_Covers等,以及距离函数ST_Distance和ST_DWithin的使用。通过实例展示了如何利用这些函数进行空间查询,如查找相交、包含、距离内的对象,并探讨了DE-9IM模型在复杂空间关系中的应用。

本文将逐一介绍空间关系的定义及使用。

空间关系

PostGIS的强大功能是能够计算Geometry之间的空间关系。

通过比较代表自行车位置,街道和地铁线的Geometry 形状,可以回答诸如“距公园最近的自行车架在哪里?”或“地铁线与街道的交叉点在哪里?”之类的问题。

PostGIS提供了Open Geospatial Consortium / SQL-MM标准中定义的全套空间关系功能。这些功能允许测试空间(拓扑)关系和基于Geometry 之间的距离的关系。

大多数关系函数接受两个Geometry 作为输入,并以布尔值形式返回指定关系的值。 您可以使用以下查询尝试此操作:

SELECT ST_Intersects('POINT(1 1)', 'LINESTRING(1 1, 2 2)');

通常,布尔关系函数在SQL查询的“ WHERE”子句中使用(称为“空间过滤器”)。您将在本课程的稍后部分看到使用NYC示例数据集的示例。

它们还用于“ JOIN … ON”子句中,以指定“空间连接”。

ST_Equals

ST_Equals(geometry A,geometry B) 测试两个Geometry 的空间相等性。如果两个相同类型的Geometry 具有相同的形状,则 *返回TRUE。通常仅当它们具有相同的x,y坐标值时才如此。

ST_Equals

例如,让我们使用“ nyc_subway_stations”表中的点Geometry 。我们将查询Broad St站点的特征,并使用精确的数据表示形式(称为WKB)和更具可读性的文本格式(称为WKT)来显示它。 ):

SELECT name, geom, ST_AsText(geom) From nyc_subway_stations WHERE name = 'Broad St';
-----------------------------------
   name     |       geom                                         |      st_astext
   ----------+----------------------------------------------------+-----------------------
   Broad St | 0101000020266900000EEBD4CF27CF2141BC17D69516315141 | POINT(583571 4506714)

Geometry 值可以与“ ST_Equals”测试一起使用以检索原始记录:

SELECT name  From nyc_subway_stations  WHERE ST_Equals(geom, '0101000020266900000EEBD4CF27CF2141BC17D69516315141');
----------------------------------
Broad St

注意:点的WKB数据格式不是可读的,但是它是坐标值的精确表示。 对于相等性之类的测试,必须使用确切的值。

ST_Intersects, ST_Disjoint

ST_Intersects(geometry A,geometry B)
如果两个形状有共同的空间,即它们的边界或内部相交,则 *返回t(TRUE)。

ST_Intersects

让我们乘坐Broad Street地铁站,并使用 ST_Intersects 函数确定其附近地区:

SELECT name, ST_AsText(geom)  From nyc_subway_stations  WHERE name = 'Broad St';
---------------------------------------
    POINT(583571 4506714)
SELECT name, boroname  From nyc_neighborhoods  WHERE ST_Intersects(geom, ST_Geom FromText('POINT(583571 4506714)',26918));
----------------
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丷丩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值