1. 概述

PostGIS 是PostgreSQL数据库一个空间数据库扩展,它添加了对地理对象的支持,允许在 SQL 中运行空间查询

PostGIS官网:About PostGIS | PostGIS

PostGIS官方教程:PostGIS 简介 — Introduction to PostGIS

PostGIS相关教程:文章目录汇总 - 知乎 (zhihu.com)

本文基于官方教程描述PostGIS中的空间连接

数据准备可参考:

数据介绍可参考:

2. 空间连接

空间连接是基于空间关系进行表连接的数据表连接操作

在简单的空间关系中我们查询Broad St地铁站所在的社区使用的sql语句为:

-- 1. 查询Broad St的位置
SELECT ST_AsEWKT(geom) FROM nyc_subway_stations WHERE name = 'Broad St';
-- 空间位置为 SRID=26918;POINT(583571.9059213118 4506714.341192182) -- 2. 查询包含这个位置的社区
SELECT name FROM nyc_neighborhoods WHERE ST_Contains(geom, ST_GeomFromText('SRID=26918;POINT(583571.9059213118 4506714.341192182)'));

使用空间连接,将表连接起来,只需一次查询即可:

SELECT nyc_subway_stations.name, nyc_neighborhoods.name
FROM nyc_subway_stations
JOIN nyc_neighborhoods
ON ST_Contains(nyc_neighborhoods.geom, nyc_subway_stations.geom)
WHERE nyc_subway_stations.name = 'Broad St';

2.1 连接与汇总

使用JOIN和GROUP BY实现空间表的连接与汇总

比如:查询Manhattan各个社区的人口和种族构成?

使用简单查询,可以这样实现:

-- 1. 查询Manhattan的社区和空间位置
SELECT name, geom FROM nyc_neighborhoods WHERE boroname = 'Manhattan';
-- 结果:East Village... -- 2. 查询每个社区的人口
SELECT SUM(nyc_census_blocks.popn_total) FROM nyc_census_blocks WHERE ST_Intersects(nyc_census_blocks.geom, '0106000020266900000100000001030000000100000008000000E94FC98149DE214196EF19D1FE3351414271D0B694E821416A36040C4E33514144C142A7CDE721410BCEE0D1A63251412D3D82D36FE72141C6594A6E713251414DA687822AE621415F9731007932514177DB296DE4DA2141B7FDD828003351412DB80BB38EDB2141C844CE8054335141E94FC98149DE214196EF19D1FE335141');
-- 结果:82266 -- 3. 查询每个社区的黑人与白人数量计算比例
SELECT SUM(nyc_census_blocks.popn_white)/82266, SUM(nyc_census_blocks.popn_black)/82266 FROM nyc_census_blocks WHERE ST_Intersects(nyc_census_blocks.geom, '0106000020266900000100000001030000000100000008000000E94FC98149DE214196EF19D1FE3351414271D0B694E821416A36040C4E33514144C142A7CDE721410BCEE0D1A63251412D3D82D36FE72141C6594A6E713251414DA687822AE621415F9731007932514177DB296DE4DA2141B7FDD828003351412DB80BB38EDB2141C844CE8054335141E94FC98149DE214196EF19D1FE335141');
-- 结果:0.63, 0.08

使用空间连接和汇总,只需查询一次即可:

SELECT nyc_neighborhoods.name, SUM(nyc_census_blocks.popn_white)/SUM(nyc_census_blocks.popn_total),
SUM(nyc_census_blocks.popn_black)/SUM(nyc_census_blocks.popn_total)
FROM nyc_census_blocks
JOIN nyc_neighborhoods
ON ST_Intersects(nyc_census_blocks.geom, nyc_neighborhoods.geom)
WHERE nyc_neighborhoods.boroname = 'Manhattan'
GROUP BY nyc_neighborhoods.name;

3. 参考资料

[1]13. Spatial Joins — Introduction to PostGIS

[2]PostGIS教程九:空间连接 - 知乎 (zhihu.com)

[3]PostGIS 3.3.3dev Manual

[4]PostGIS Cheat Sheet

最新文章

  1. ASP.NET在不同情况下实现单点登陆(SSO)的方法
  2. sqlite3把字段为int32(用c++的time(nullptr)获取的)的秒数显示为年月日时分秒
  3. [前端JS学习笔记]JavaScript CallBack
  4. 怎样修改Windows7环境变量
  5. jquery 关于event.target使用的几点说明介绍
  6. 如何彻底解决jsp页面中文乱码及数据库乱码
  7. 怎样查看修改sqlserver数据库的编码格式
  8. c/c++ 基金会(七) 功能覆盖,虚函数,纯虚函数控制
  9. Struts2拦截器介绍
  10. SEO页面优化以及如何对单页面应用进行SEO优化
  11. ios和android适配问题总结
  12. darknet集成遇到的问题以及解决方法
  13. 将 nginx 安装成 windows 的方法
  14. C++代码复习笔记:第三章
  15. 在C语言中除法运算为什么没有小数部分?
  16. SharePoint 2013 Backup Farm Automatically With a Powershell and Windows Task Schedule
  17. Linux装python3
  18. [转]jQuery 读取 xml
  19. SQL判断NULL的几种常见方式
  20. VMware 15.0下载及安装教程

热门文章

  1. 【Java SE】Day09 继承、super、this、抽象类
  2. 【每日一题】【双端降序队列Deque】2021年12月28日-239. 滑动窗口最大值
  3. python读入中文文本编码错误
  4. 可视化编排的数据集成和分发开源框架Nifi轻松入门-上
  5. 异常处理语法结构、yield生成器及其表达式
  6. Django 之swagger中尝试调试post请求时返回 "detail": "JSON parse error - Expecting value: line 1 column 1 (char)
  7. 分享自己亲测过的Visualstudio 2019中开发Typescript时,设置自动编译生成js,无需手工运行命令生成的方法。
  8. [python] Python map函数总结
  9. 2_cookie、session、token、sign
  10. HBase详解(05) - HBase优化 整合Phoenix 集成Hive