我有一个具有以下结构的表格:
几何 | 名字 | 所有权 |
---|---|---|
01031... | 富 | 楼主 |
01032... | 富 | 楼主 |
01033... | 巴兹 | 楼主 |
01034... | 酒吧 | 租户 |
01035... | 酒吧 | 租户 |
01036... | 酒吧 | 租户 |
房东拥有广阔的区域,租户拥有其中的一小部分。
因此,租户的 geom 至少会与房东的 geom 相交。
我希望能够按姓名搜索房东(
select * from table where name = 'foo' and ownership = 'landlord';
)并获取房东拥有的所有几何图形,并获取在这些几何图形中包含几何图形的租户。
同样,我想寻找一个租户,获取他们租用的所有建筑物,并找到所有封闭的房东几何图形。
从概念上讲我无法理解它。 ST_Intersects 是正确的方法吗?
ST_Intersects
通常是要走的路。
如果存在不同的空间关系,例如租户行始终位于一排且只有一排房东行内,则其他方法(如
ST_Within
)可能会更好。
一如既往,有很多种编写查询的方法。我认为这是一个可以理解的(但可能不会很高效)
WITH
tenant AS (
SELECT * from mytable WHERE ownership = 'tenant'
)
, landlord AS (
SELECT * from mytable WHERE ownership = 'landlord'
)
SELECT
tenant.name, landlord.name
FROM
landlord
LEFT OUTER JOIN
tenant
ON ST_Intersects(landlord.geom, tenant.geom)
WHERE
landlord.name = 'foo'
;