空间连接(spatial joins)是空间数据库的主要组成部分,它们允许你使用空间关系作为连接键(join key)来连接来自不同数据表的信息。
任何在两个表之间提供true/false关系的函数都可以用来驱动空间连接,但最常用的函数是:ST_Intersects、ST_Contains和ST_DWithin。
一、连接和汇总
JOIN和GROUP BY的组合支持通常在GIS系统中的某些分析。
例如:"曼哈顿行政区的各个社区的人口和种族构成是什么?",这个问题将人口普查中的人口信息与社区的几何信息结合在一起,社区信息只限制在曼哈顿的一个行政区中。
SELECT
neighborhoods.name AS neighborhood_name,
Sum(census.popn_total) AS population,
100.0 * Sum(census.popn_white) / Sum(census.popn_total) AS white_pct,
100.0 * Sum(census.popn_black) / Sum(census.popn_total) AS black_pct
FROM nyc_neighborhoods AS neighborhoods
JOIN nyc_census_blocks AS census
ON ST_Intersects(neighborhoods.geom, census.geom)
WHERE neighborhoods.boroname = 'Manhattan'
GROUP BY neighborhoods.name
ORDER BY white_pct DESC;从理论上讲(数据库在内部对实际运行机制进行了优化)发生的情况如下:
JOIN子句创建了一个虚拟表,其中包含来自neighborhoods表和census表的列。
WHERE子句将我们的虚拟表筛选为仅保留有关曼哈顿行政区的记录。
结果记录按neighborhood name分组,并通过聚合函数Sum()计算人口数
在对最后的数字进行一些算术和格式化之后,我们的查询就会输出百分比。
Comments