当前位置: 首页 > news >正文

PostGIS学习教程十四:更多的空间连接

PostGIS学习教程十四:更多的空间连接

在上一节中,我们看到了ST_Centroid(geometry)和ST_Union([geometry])函数,以及一些简单的示例。在本节中,我们将用它们做一些更详细的事情。


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • PostGIS学习教程十四:更多的空间连接
  • 一、创建人口普查区域图表
    • 1.1、加载nyc_census_sociodata.sql
    • 1.2、创建人口普查区域空间表
    • 1.3、将属性数据连接到空间数据
    • 1.4、回答一个有趣的问题
    • 二、多边形 / 多边形连接
    • 2.1、那Flatbush呢?
  • 三、大的半径距离的连接


一、创建人口普查区域图表

在网盘中准备了nyc_census_sociodata.sql包含属性数据,但不包含几何图形数据。该表包含有关纽约的、有趣的社会经济数据:通勤时间、收入和教育程度。然而有一个问题:数据按"人口普查区域(census tract)"汇总,而我们没有普查区域的几何图形数据!

在本节中,我们将:

1、加载nyc_census_sociodata.sql表
2、创建人口普查区域空间表
3、将属性数据连接到几何图形数据
4、然后利用我们的新数据进行一些分析

1.1、加载nyc_census_sociodata.sql

1、在PgAdmin中打开SQL查询窗口
2、从菜单中选择File->Open,并浏览到nyc_census_sociodata.sql文件
3、按"Run Query"按钮
4、如果你在PgAdmin中按下"Refresh"按钮,那数据表的列表现在应该包含nyc_census_sociodata表。

1.2、创建人口普查区域空间表

正如我们在上一节中所看到的,我们可用通过对blkid键的子串进行汇总,从人口普查块(census block)中构建更高级别地理区划的几何图形。为了得到人口普查区域(census tract),我们需要对blkid的前11个字符进行汇总分组。

360610001001001 = 36 061 000100 1 00136     = State of New York
061    = New York County (Manhattan)
000100 = Census Tract
1      = Census Block Group
001    = Census Block

使用ST-Union创建新表:

-- Make the tracts table
CREATE TABLE nyc_census_tract_geoms AS
SELECTST_Union(geom) AS geom,SubStr(blkid,1,11) AS tractid
FROM nyc_census_blocks
GROUP BY tractid;-- Index the tractid
CREATE INDEX nyc_census_tract_geoms_tractid_idx
ON nyc_census_tract_geoms (tractid);

1.3、将属性数据连接到空间数据

使用标准属性连接将人口普查区域(census tract)几何图形表和普查区域属性表连接起来:

-- Make the tracts table
CREATE TABLE nyc_census_tracts AS
SELECTg.geom,a.*
FROM nyc_census_tract_geoms g
JOIN nyc_census_sociodata a
ON g.tractid = a.tractid;-- Index the geometries
CREATE INDEX nyc_census_tract_gidx
ON nyc_census_tracts 
USING GIST (geom);

1.4、回答一个有趣的问题

回答一个有趣的问题!“列出纽约拥有研究生学位的人所占比例排名前十的社区”。

SELECT100.0 * Sum(t.edu_graduate_dipl) / Sum(t.edu_total) AS graduate_pct,n.name, n.boroname
FROM nyc_neighborhoods n
JOIN nyc_census_tracts t
ON ST_Intersects(n.geom, t.geom)
WHERE t.edu_total > 0
GROUP BY n.name, n.boroname
ORDER BY graduate_pct DESC
LIMIT 10;

在这里插入图片描述

注意:纽约地理学家将会对Flatbush社区出现这份居民受教育程度较高社区的名单中感到惊讶。为什么呢?答案将在下一节讨论。

二、多边形 / 多边形连接

在我们上面的感兴趣查询中,我们使用ST_Intersects(geometry_a, geometry_b)函数来确定每个社区(neighborhood)包含哪些人口普查区域(census tract)多边形。这就引出了一个问题:如果一块人口普查区域位于两个社区之间的边界上,该怎么办?这块人口普查区域和这两个社区相交,因此都将会包含在这两个社区的汇总统计数据中。
为了避免这种重复计算,有两种方法:

简单的方法是确保每个区域只落在一个社区(使用ST_Centroid(geometry))
复杂的方法是在两个社区的边界处将相交的人口普查区域(census tracts)分割(使用ST_Intersection(geometry, geometry))
以下是在我们上面的研究生教育查询中使用简单方法避免人口普查区域重复计算的示例:

SELECT100.0 * Sum(t.edu_graduate_dipl) / Sum(t.edu_total) AS graduate_pct,n.name, n.boroname
FROM nyc_neighborhoods n
JOIN nyc_census_tracts t
ON ST_Contains(n.geom, ST_Centroid(t.geom))
WHERE t.edu_total > 0
GROUP BY n.name, n.boroname
ORDER BY graduate_pct DESC
LIMIT 10;

请注意,现在运行查询需要更长的时间,因为ST_Centroid函数必须在每个人口普查区域上运行。

避免人口普查区域的重复计算改变了查询结果!
在这里插入图片描述

2.1、那Flatbush呢?

特别的是,Flatbush社区已经从名单上消失了。在我们的数据表中,我们可以更仔细地看一看Flatbush社区的地图,就能看出原因所在。
正如我们的数据源所定义的那样,Flatbush并不是传统意义上的社区,因为它只覆盖了Prospect Park(展望公园)的面积。该地区的人口普查记录自然为零居民。然而,Flatbush社区确实"刮去"了公园北侧的一块"昂贵"的人口普查区域的人口数据(位于贵族化的Park Slope社区),进行多边形相交计算时,这个人口普查区域的人口统计数据被添加到Flatbush中,导致该查询的结果比例非常高。

三、大的半径距离的连接

一个有趣的问题是:“地铁站附近(500米以内)的居民的通勤时间与远离地铁站的居民的通勤时间有什么不同?”

然而,这个问题涉及到了重复计算的一些问题:许多人周围500米范围内有多个地铁站!

纽约市的总人口:

SELECT Sum(popn_total)
FROM nyc_census_blocks;

纽约市距离地铁站周围500米范围内的人口:

SELECT Sum(popn_total)
FROM nyc_census_blocks census
JOIN nyc_subway_stations subway
ON ST_DWithin(census.geom, subway.geom, 500);

在这里插入图片描述
查询结果比纽约市的总人口还要多!显然,我们的SQL语句产生了一个很大的重复计算的错误。你可以在地铁的缓冲区图片上看到这个问题。
解决方案是在将不同的人口普查块数据传递到查询操作之前,确保只有不同的人口普查数据块。我们可以通过将查询分解为查找不同普查块的子查询来实现这一点:

WITH distinct_blocks AS (SELECT DISTINCT ON (blkid) popn_totalFROM nyc_census_blocks censusJOIN nyc_subway_stations subwayON ST_DWithin(census.geom, subway.geom, 500)
)
SELECT Sum(popn_total)
FROM distinct_blocks;

在这里插入图片描述

好多了!因此,纽约一半以上的人口离地铁站不到500m(步行约5-7分钟)。

相关文章:

PostGIS学习教程十四:更多的空间连接

PostGIS学习教程十四:更多的空间连接 在上一节中,我们看到了ST_Centroid(geometry)和ST_Union([geometry])函数,以及一些简单的示例。在本节中,我们将用它们做一些更详细的事情。 提示:写完文章后,目录可以…...

【爬虫软件】孔夫子二手书采集

项目演示 孔网爬取图书信息 目录结构 [ |-- api-ms-win-core-synch-l1-2-0.dll, |-- api-ms-win-core-sysinfo-l1-1-0.dll, |-- api-ms-win-core-timezone-l1-1-0.dll, |-- api-ms-win-core-util-l1-1-0.dll, |-- api-ms-win-crt-conio-l1-1-0.dll, |-- api…...

P8736 [蓝桥杯 2020 国 B] 游园安排

题目描述 L \mathrm{L} L 星球游乐园非常有趣,吸引着各个星球的游客前来游玩。小蓝是 L \mathrm{L} L 星球 游乐园的管理员。 为了更好的管理游乐园,游乐园要求所有的游客提前预约,小蓝能看到系统上所有预约游客的名字。每个游客的名字由一…...

初识Docker-什么是docker

Docker是一个快速交付应用、运行应用的技术 目录 一、Docker 二、运用场景 一、什么是Docker?它的作用是什么? Docker如何解决大型项目依赖关系复杂,不同组件依赖的兼容性问题? Docker允许开发中将应用、依赖、函数库、配置一起打包&…...

maven的pom.xml设置本地仓库

配置 在Maven项目中&#xff0c;您可以在pom.xml文件中配置本地仓库的路径。在pom.xml文件中&#xff0c;您可以添加以下配置来指定本地仓库的路径&#xff1a; <project>...<repositories><repository><id>local-repo</id><url>file://…...

Qt获取屏幕DPI缩放比

获取屏幕缩放比 网上很多代码是用 logicalDotsPerInch 除以 96 来获取屏幕缩放比&#xff1a; // Windows 除以 96&#xff0c;macOS 除以 72 qreal factor window->screen()->logicalDotsPerInch() / 96.0; 当使能了缩放适配后&#xff0c;logicalDotsPerInch 值就不…...

Spring MVC控制层框架

三、Spring MVC控制层框架 目录 一、SpringMVC简介和体验 1. 介绍2. 主要作用3. 核心组件和调用流程理解4. 快速体验 二、SpringMVC接收数据 1. 访问路径设置2. 接收参数&#xff08;重点&#xff09; 2.1 param 和 json参数比较2.2 param参数接收2.3 路径 参数接收2.4 json参…...

vmware安装银河麒麟V10高级服务器操作系统

vmware安装银河麒麟V10高级服务器操作系统 1、下载银河麒麟V10镜像2、VMware安装银河麒麟V10高级服务器操作系统2.1、新建虚拟机2.2、安装虚拟机 3、配置银河麒麟V10高级服务器操作系统3.1、安装vmware tools3.2、配置静态IP地址 和 dns3.3、查看磁盘分区3.4、查看系统版本 1、…...

掌握Jenknis基础概念

目录 任务&#xff08;Jobs&#xff09; 构建&#xff08;Builds&#xff09; 触发器&#xff08;Triggers&#xff09; 构建环境&#xff08;Build Environment&#xff09;&#xff1a; 插件&#xff08;Plugins&#xff09;&#xff1a; 参数化构建&#xff08;Paramet…...

AWS 知识二:AWS同一个VPC下的ubuntu实例通过ldapsearch命令查询目录用户信息

前言&#xff1a; 前提&#xff1a;需要完成我的AWS 知识一创建一个成功运行的目录。 主要两个重要&#xff1a;1.本地windows如何通过SSH的方式连接到Ubuntu实例 2.ldapsearch命令的构成 一 &#xff0c;启动一个新的Ubuntu实例 1.创建一个ubuntu实例 具体创建实例步骤我就不…...

Ubuntu 常用命令之 fdisk 命令用法介绍

&#x1f4d1;Linux/Ubuntu 常用命令归类整理 fdisk 是一个用于处理磁盘分区的命令行工具&#xff0c;它在 Linux 系统中广泛使用。fdisk 命令可以创建、删除、更改、复制和显示硬盘分区&#xff0c;以及更改硬盘的分区 ID。 fdisk 命令的常用参数如下 -l&#xff1a;列出所…...

论文中公式怎么降重 papergpt

大家好&#xff0c;今天来聊聊论文中公式怎么降重&#xff0c;希望能给大家提供一点参考。 以下是针对论文重复率高的情况&#xff0c;提供一些修改建议和技巧&#xff0c;可以借助此类工具&#xff1a; 论文中公式怎么降重 一、引言 在论文撰写过程中&#xff0c;公式是表达学…...

27. 过滤器

Filter(过滤器)简介 Filter 的基本功能是对 Servlet 容器调用 Servlet 的过程进行拦截&#xff0c;从而在 Servlet 进行响应处理的前后实现一些特殊的功能。在 Servlet API 中定义了三个接口类来开供开发人员编写 Filter 程序&#xff1a;Filter, FilterChain, FilterConfigFi…...

做一个wiki页面是体验HTML语义的好方法

HTML语义&#xff1a;如何运用语义类标签来呈现Wiki网页 在上一篇文章中&#xff0c;我花了大量的篇幅和你解释了正确使用语义类标签的好处和一些场景。那么&#xff0c;哪些场景适合用到语义类标签呢&#xff0c;又如何运用语义类标签呢&#xff1f; 不知道你还记不记得在大…...

金融CRM有用吗?金融行业CRM有哪些功能

市场形式波诡云谲&#xff0c;金融行业也面临着资源体系分散、竞争力后继不足、未知风险无法规避等问题。金融企业该如何解决这些问题&#xff0c;或许可以了解一下CRM管理系统&#xff0c;和其提供的金融行业CRM解决方案。 金融行业是银行业、保险业、信托业、证券业和租赁业…...

@XmlAccessorType+@XmlElement完美解决Java类到XML映射问题

前言&#xff1a; 最近项目在做静态代码扫描的时候&#xff0c;出现Java类中成员变量命名的问题&#xff0c;开头字母必须小写&#xff0c;但是这个类成员是对接其他公司的字段&#xff0c;对方提供的请求格式是XML&#xff0c;必须将Java类转化为XML的格式&#xff0c;而且这…...

软件渗透测试有哪些测试流程?权威安全测试报告的重要性

软件渗透测试也是安全测试的一种&#xff0c;是通过模拟恶意黑客的攻击方法&#xff0c;来评估计算机网络系统安全的一种评估方法。作为网络安全防范的一种新技术&#xff0c;对于网络安全组织具有实际应用价值。 一、软件渗透测试的过程   软件渗透测试的过程通常包括四个主…...

安防视频融合云平台/智慧监控平台EasyCVR如何添加验证码调用接口?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…...

浏览器输入一个url,它的解析过程

URL解析&#xff1a; 浏览器首先解析URL&#xff0c;提取其中的协议&#xff08;例如&#xff0c;HTTP、HTTPS&#xff09;、域名和路径等信息。这个过程被称为URL解析。 DNS解析&#xff1a; 浏览器会检查域名的IP地址是否已经缓存。如果没有缓存或者缓存已经过期&#xff0c;…...

第29节: Vue3 列表渲染

在UniApp中使用Vue3框架时&#xff0c;你可以使用列表渲染语法来动态地渲染一个列表。下面是一个示例&#xff0c;演示了如何在UniApp中使用Vue3框架使用列表渲染&#xff1a; <template> <view> <button click"addItem">Add Item</button&g…...

CloudPulse:一款针对AWS云环境的SSL证书搜索与分析引擎

关于CloudPulse CloudPulse是一款针对AWS云环境的SSL证书搜索与分析引擎&#xff0c;广大研究人员可以使用该工具简化并增强针对SSL证书数据的检索和分析过程。 在网络侦查阶段&#xff0c;我们往往需要收集与目标相关的信息&#xff0c;并为目标创建一个专用文档&#xff0c…...

【网络安全】学习Web安全必须知道的一本书

【文末送书】今天推荐一本网络安全领域优质书籍。 目录 正文实战案例1&#xff1a;使用Docker搭建LAMP环境实战案例2&#xff1a;使用Docker搭建LAMP环境文末送书 正文 学习Web安全离不开Web&#xff0c;那么&#xff0c;需要先来学习网站的搭建。搭建网站是每一个Web安全学习…...

千帆 AppBuilder 初体验,不仅解决解决了我筛选简历的痛苦,更是让提效10倍!

文章目录 &#x1f31f; 前言&#x1f31f; 什么是百度智能云千帆 AppBuilder&#x1f31f; 百度智能云千帆 AppBuilder 初体验&#x1f31f; 利用千帆AppBuilder搭建简历小助手&#x1f31f; 让人眼前一亮的神兵利器 - 超级助理 &#x1f31f; 前言 前两天朋友 三掌柜 去北京…...

Ubuntu 常用命令之 cal 命令用法介绍

&#x1f4d1;Linux/Ubuntu 常用命令归类整理 cal命令在Ubuntu系统下用于显示日历。它可以显示任何特定月份或整个年份的日历。 cal命令的参数如下 -1&#xff1a;只显示当前月份的日历。-3&#xff1a;显示前一个月、当前月和下一个月的日历。-s&#xff1a;指定日历的开始…...

项目中webpack优化配置(1)

项目中webpack优化配置 一. 开发效率&#xff0c; 体验 1. DLL&#xff08;开发过程中减少构建时间和增加应用程序的性能&#xff09; 使用 DllPlugin 进行分包&#xff0c;使用 DllReferencePlugin(索引链接) 对 manifest.json 引用&#xff0c;让一些基本不会改动的代码先…...

【Qt之Quick模块】5. QML基本类型及示例用法

QML格式 QML基本类型 在 QML 中&#xff0c;有以下基本类型&#xff1a; int&#xff1a;整数类型。 Rectangle {function myFunction() {// 输出 debug 信息console.log("11 " (11));}Component.onCompleted: {myFunction();} }结果&#xff1a; 2. real&…...

MySQL运维实战(1.2)安装部署:使用二进制安装部署

作者&#xff1a;俊达 引言 上一篇我们使用了RPM进行安装部署&#xff0c;这是一种安装快速、简化部署和管理过程、与操作系统提供的包管理工具紧密集成的部署方法。此外&#xff0c;当你需要更高的灵活性和自定义性&#xff0c;并且愿意承担一些额外的手动配置和管理工作&am…...

ChatGPT一周年:开源语言大模型的冲击

自2022年末发布后&#xff0c;ChatGPT给人工智能的研究和商业领域带来了巨大变革。通过有监督微调和人类反馈的强化学习&#xff0c;模型可以回答人类问题&#xff0c;并在广泛的任务范围内遵循指令。在获得这一成功之后&#xff0c;人们对LLM的兴趣不断增加&#xff0c;新的LL…...

C++ Qt开发:Charts绘图组件概述

Qt 是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&#xff0c;本章将重点介绍QCharts二维绘图组件的常用方法及灵活运用。 …...

基于Java+SpringBoot实现人脸识别搜索

基于JavaSpringBoot实现人脸识别搜索 引言 背景介绍 结合人脸识别技术&#xff0c;在工厂、学校、商场、餐厅等人流密集的场所进行监控&#xff0c;对人流进行自动统计、识别和追踪&#xff0c;同时标记存在安全隐患的行为及区域&#xff0c;并发出告警提醒&#xff0c;加强…...

福州做商城网站公司/建站企业网站

最近公司的项目很多&#xff0c;研发那里需要的测试环境很多&#xff0c;而且基本都是lnmp的测试环境&#xff08;也有apache与tomcat,但非常少&#xff09;&#xff0c;测试没有问题之后还需要上线&#xff0c;所以最近我很忙&#xff0c;而且都是重复性的工作&#xff0c;本来…...

专门做澳大利亚项目的网站/上海百度seo网站优化

通过Java API来访问HDFS 1.Windows上配置环境变量 解压Hadoop&#xff0c;然后把Hadoop的根目录配置到HADOOP_HOME环境变量里面 然后把HADOOP_HOME/lib和HADOOP_HOME/bin配置到path里面 2.替换bin目录 将官网下载的Hadoop目录下面的bin目录替换成Windows下编译的Hadoop的bin目录…...

网站设计到底做多宽/软文推广的标准类型

期刊联系地址...

怎么做独立网站/网站设计制作哪家好

c2自r120之后允许用户自己添加插件 插件的目录为 info.xml files\myplugin\common.js files\myplugin\edittime.js files\myplugin\PluginIcon.ico files\myplugin\runtime.js info.xml文件主要是插件的基本信息 <?xml version"1.0" encoding"UTF-8…...

佛山模板网站建设/免费培训seo

Scrum是一种迭代式增量软件开发过程,通常用于敏捷软件开发。Scrum在英语的意思是橄榄球里的争球虽然Scrum是为管理软件开发项目而开发的&#xff0c;它同样可以用于运行软件维护团队&#xff0c;或者作为计划管理方法 Scrum定义了许多角色&#xff0c;根据猪和鸡的笑话分为两组…...

方法网站目录/代引流推广公司

Hadoop生态圈-Hbase的Region详解 作者&#xff1a;尹正杰 版权声明&#xff1a;原创作品&#xff0c;谢绝转载&#xff01;否则将追究法律责任。 转载于:https://www.cnblogs.com/yinzhengjie/p/9158207.html...