PostGIS之空间连接
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)
PostGIS之空间连接的更多相关文章
- 建议入门-用ArcMap进行空间查询与空间连接
1.打开arcmap并导入数据(如本图导入美国地图(usa.mxd)): 2.空间查询操作,在地图上的某片区域点击右键,得到下图,点击identify,此时我在阿拉斯加上面点击的 地图会闪现一下被查询 ...
- 简述ArcGIS的空间连接(Spatial Join)与字段映射(Field Map)操作
插个广告,制作ArcGIS的Tool工具学习下面的教程就对了:零基础学习Python制作ArcGIS自定义工具 牢骚一下 在使用ArcMap进行空间连接操作的时候,往往会有两种特殊需求,其一是连接重叠 ...
- ArcGis面要素空间连接,取相交面积最大者 C#
核心代码: #region JoinWork_IntersectMax private void CreateNewFields_IntersectMax(IFeatureClass destFeat ...
- Arcgis 10.1中空间连接功能
空间链接的作用:将面上的所有点的值加起来取平均值.赋值给面属性.(我们可以定义右击——定义合并规则 连接要素的字段映射参数中指定的合并规则仅适用于连接要素中的属性,且仅适用于多个要素与目标要素匹配 ( ...
- Arcmap 空间连接,在通过面包含面的空间关系做属性关联的时候,发生关联冗余的问题。
处理过程: (1)用 空间关联 工具实现 面与面的 空间和属性关联. (2) 问题描述: 一个子面要素对应多个父面要素,出现数据冗余. 问题根源: 解决办法: 取子面要素的 中心点,在用中心点和 ...
- QSQL导出mapfile和mapfile中PostGIS连接的一点心得
昨天弄QSQL导出mapfile,一直遇到下图的错误 原因是QGIS在渲染图层时候使用了新的符号,在图层上右键-属性,如下图将符号修改就OK了 然后我尝试使用QGIS连接本机PostGIS数据,结果老 ...
- MongoDB的地埋空间数据存储、空间索引以及空间查询
一.关于MongoDB 在众多NoSQL数据库,MongoDB是一个优秀的产品.其官方介绍如下: MongoDB (from "humongous") is a scalable, ...
- geotrellis使用(三十)使用geotrellis读取PostGIS空间数据
前言 最近事情很多,各种你想不到的事情--such as singing and dancing--再加上最近又研究docker上瘾,所以geotrellis看上去似乎没有关注,其实我一直在脑中思考着 ...
- 超图supermap sdx数据库用sql实现空间查询
在此介绍用sql对超图的空间数据库(sdx)进行空间查询,优点如下: 1.超图推荐的方式是用iobject,此方法要引入iobject 2.超图另一个推荐的方式是用iserver的REST接口,但we ...
- (数据科学学习手札74)基于geopandas的空间数据分析——数据结构篇
本文对应代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 geopandas是建立在GEOS.GDAL.P ...
随机推荐
- 错误:Required request parameter 'XXX' for method parameter type String is not present
错误信息:Required request parameter 'XXX' for method parameter type String is not present 这种都是前端请求方式不同,后 ...
- CPU 和 CPU Core 有啥区别?多核 CPU?多个 CPU?
CPU 全称 Central Processing Unit,中央处理器,计算机的大脑,长这个样子: CPU 通过一个插槽安装在主板上,这个插槽也叫做 CPU Socket,它长这个样子: 而我们说的 ...
- 百倍加速IO读写!快使用Parquet和Feather格式!⛵
作者:韩信子@ShowMeAI 数据分析实战系列:https://www.showmeai.tech/tutorials/40 本文地址:https://www.showmeai.tech/artic ...
- SQL语句查询优化方法
建立索引并命中索引,在查询的时候,要尽量让数据库引擎使用索引.加入explain执行计划 1.尽量避免使用select * 2.尽量避免使用!= 3.尽量避免使用or 优化方式:可以用union代替o ...
- python Flask 操作数据库(2)
单表操作 数据准备 from flask import Flask from flask_sqlalchemy import SQLAlchemy class Config: DEBUG = True ...
- drf快速使用 CBV源码分析 drf之APIView分析 drf之Request对象分析
目录 序列化和反序列化 drf介绍和安装 使用原生django写接口 django DRF安装 drf快速使用 模型 序列化类 视图 路由 datagrip 使用postman测试接口 CBV源码分析 ...
- react 高效高质量搭建后台系统 系列 —— 请求数据
其他章节请看: react 高效高质量搭建后台系统 系列 请求数据 后续要做登录模块(主页),需要先和后端约定JSON数据格式,将 axios 进行封装,实现本地的数据模拟 mockjs. Tip:s ...
- 增强MybatisPlus拓展新功能 实战MybatisPlus大合集
mybatis-plus-max简介 MybatisPlusMax是MybatisPlus的增强包,秉承只拓展不修改的理念,对MybatisPlus做增强. 正如MybatisPlus是对MyBati ...
- Pollard_Rho算法
数论 Pollard_Rho算法 1.1作用 Pollard_Rho算法解决大数的质因数分解.又是一个玄学算法.. 2.1 试除法 我们的任务是对一个数字n进行质因数分解.可以发现,n的因数将会对称的 ...
- 通过Docker启动DB2,并在Spring Boot整合DB2
1 简介 DB2是IBM的一款优秀的关系型数据库,简单学习一下. 2 Docker安装DB2 为了快速启动,直接使用Docker来安装DB2.先下载镜像如下: docker pull ibmcom/d ...