PostGIS之空间连接
2024-09-18 15:08:35
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)
最新文章
- ASP.NET在不同情况下实现单点登陆(SSO)的方法
- sqlite3把字段为int32(用c++的time(nullptr)获取的)的秒数显示为年月日时分秒
- [前端JS学习笔记]JavaScript CallBack
- 怎样修改Windows7环境变量
- jquery 关于event.target使用的几点说明介绍
- 如何彻底解决jsp页面中文乱码及数据库乱码
- 怎样查看修改sqlserver数据库的编码格式
- c/c++ 基金会(七) 功能覆盖,虚函数,纯虚函数控制
- Struts2拦截器介绍
- SEO页面优化以及如何对单页面应用进行SEO优化
- ios和android适配问题总结
- darknet集成遇到的问题以及解决方法
- 将 nginx 安装成 windows 的方法
- C++代码复习笔记:第三章
- 在C语言中除法运算为什么没有小数部分?
- SharePoint 2013 Backup Farm Automatically With a Powershell and Windows Task Schedule
- Linux装python3
- [转]jQuery 读取 xml
- SQL判断NULL的几种常见方式
- VMware 15.0下载及安装教程
热门文章
- 【Java SE】Day09 继承、super、this、抽象类
- 【每日一题】【双端降序队列Deque】2021年12月28日-239. 滑动窗口最大值
- python读入中文文本编码错误
- 可视化编排的数据集成和分发开源框架Nifi轻松入门-上
- 异常处理语法结构、yield生成器及其表达式
- Django 之swagger中尝试调试post请求时返回 ";detail";: ";JSON parse error - Expecting value: line 1 column 1 (char)
- 分享自己亲测过的Visualstudio 2019中开发Typescript时,设置自动编译生成js,无需手工运行命令生成的方法。
- [python] Python map函数总结
- 2_cookie、session、token、sign
- HBase详解(05) - HBase优化 整合Phoenix 集成Hive