[译文] 基于PostGIS3.1 生成格网数据

news2024/10/2 6:27:15

根据格网进行数据统计与分析是一种常用的方法,相比自然地理边界与行政管理边界而言,使用格网有如下特点:

  • 每个格网之间地位相等,没有上下级之分。

  • 每个格网的面积都相等。

  • 相邻两个格网单元中心点之间距离相等。

  • 适用于将数据从“空间”计算领域转换到“非空间”领域。

生成格网数据的方法其实有很多,例如在之前的PostGIS中可以写一个plpgsql function根据起点,终点,cell分辨率快速生成格网等,由于格网数据比较常用,所以PostGIS3.1直接提供了ST_SquareGrid()(正方形网格)与ST_HexagonGrid()(蜂窝网格)两种格网方法。

稍微不同的是,PostGIS3.1中生成的网格是具有统一的特征的:

  • 生成网格的原点是固定的,指向平面坐标(0,0)。注意:这个原点是根据实际数据来的,生成网格一般要指定一个地理范围,在该范围内生成所定义的网格,那么如果输入的地理范围是epsg:4326坐标系,则指向经纬度0 0,如果输入是epsg:3857,则指向墨卡托的0 0。

  • 指定网格单元的size,即可固定该网格的地理坐标,使用时只使用cell编号而不需要使用真实地理边界。

ST_SquareGrid()

ST_SquareGrid(size,bounds)方法以墨卡托坐标0 0为原点,以size声明网格大小,以bounds指定地理范围。

示例sql:

SELECT (ST_SquareGrid(400000, ST_Transform(a.geom, 3857))).* FROMadmin a  WHERE name = 'Brazil';

该示例获取巴西的国界,并转平面墨卡托坐标,以0 0为边界,以巴西国界的bbox为生成网格地理边界,生成一些列网格,结果如下:

ST_HexagonGrid()

ST_HexagonGrid(size,bounds)方法的参数与ST_SquareGrid(size,bounds)参数定义完全一致。

蜂窝网格目前非常流行,在某些制图表达和统计建模上具有一些特定场景的优势,一开始应该出现在Uber提出的H3格式:

H3: Uber’s Hexagonal Hierarchical Spatial Index
https://eng.uber.com/h3/

示例sql:

SELECT (ST_HexagonGrid(100000, ST_Transform(a.geom, 3857))).* FROMadmin a  WHEREname = 'Germany';

结果可视化如下:

格网统计

生成格网一般用于进行统计分析然后汇总可视化的,使用PostGIS时,不需要实际生成网格并存储,而是通过生成器动态创建网格然后与其他空间数据做叠加统计分析。

示例:假设有点数据集places,geom是geometry(Point,4326)类型,该数据集有字段pop_max定义每个palces点的最大人口数,根据蜂窝网格统计汇总每个格网的最大人口数:

SELECTsum(pop_max) as pop_max, hexes.geomFROM    ST_HexagonGrid(4.0,        ST_SetSRID(ST_EstimatedExtent('places', 'geom'), 4326)    ) AS hexesINNERJOIN    places AS pON ST_Intersects(p.geom, hexes.geom)GROUP BY hexes.geom;

可视化结果如下:

这种动态统计分析是非常快速的,结果可以通过Postgis的矢量切片函数做成动态矢量切片服务,也可以使用pg_tileserv(https://github.com/crunchydata/pg_tileserv)做动态矢量切片服务,配合MapboxGL等能快速实现成果可视化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/369924.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ThreeJS加载公路GeoJson数据实现流光效果

threejs加载公路geojson数据,跟加载行政区域的原理一样,唯一不同的是geojson格式不一样,路线并不是连贯起来的,按照路段进行的拆分,在加载的时候问题不大,正常解析然后转墨卡托投影,但是在做流光效果时,需要对geojson进行重新组合. 实现效果:

Android:反编译apk踩坑/apktool/dex2jar/JDGUI

需求描述 想要反编译apk文件,搜到了这篇博客:Android APK反编译就这么简单 详解(附图),非常有参考价值~但其中的工具下载链接都已404,而本杂鱼实际操作的过程中也出现了亿点点点点点点的问题,于…

电子技术——反馈对放大器极点的影响

电子技术——反馈对放大器极点的影响 放大器的频率响应和稳定性可以直接由其极点决定。因此我们将深入反馈对放大器极点的影响。 稳定性和极点位置 我们首先讨论稳定性和极点位置的关系。首先我们给出结论,对于任何一个稳定的放大器,其极点都处在 sss …

prometheus + alterManager + 飞书通知,实现服务宕机监控告警;实测可用

架构设计图 最终效果图 项目准备 xml依赖 <!-- 监控相关 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>io.…

Elasticsearch7.8.0版本进阶——段合并

目录一、段的概述1.1、段的概念1.2、段的缺点1.3、如何解决段数量暴增问题二、段合并的流程三、段合并的注意事项一、段的概述 1.1、段的概念 每一 段 本身都是一个倒排索引。 1.2、段的缺点 由于自动刷新流程每秒会创建一个新的段 &#xff0c;这样会导致短时间内的段数量…

interrupt多线程设计模式

1. 两阶段终止-interrupt Two Phase Termination 在一个线程T1中如何“优雅”终止线程T2&#xff1f;这里的【优雅】指的是给T2一个料理后事的机会。 错误思路 ● 使用线程对象的stop()方法停止线程&#xff08;强制杀死&#xff09; —— stop&#xff08;&#xff09;方法…

Linux内核的虚拟内存(MMU、页表结构)

前言&#xff1a;内存是程序得以运行的重要物质基础。如何在有限的内存空间运行较大的应用程序&#xff0c;曾是困扰人们的一个难题。为解决这个问题&#xff0c;人们设计了许多的方案&#xff0c;其中最成功的当属虚拟内存技术。Linux作为一个以通用为目的的现代大型操作系统&…

【git】Idea中git的使用

配置git 创建git仓库 不同颜色代表的含义 红色——未加入版本控制&#xff1b;绿色——已经加入控制暂未提交&#xff1b;蓝色——加入&#xff0c;已提交&#xff0c;有改动&#xff1b;白色——加入&#xff0c;已提交&#xff0c;无改动&#xff1b;灰色——版本控制已忽略文…

8、STM32 FSMC驱动LCD(ILI93xx)

本文使用FSMC驱动LCD显示&#xff0c;关于建议先看之前的7、STM32 FSMC驱动SRAM一文 硬件连接&#xff1a; 一、CubeMx配置FSMC驱动LCD ILI93xx 此章只为快速使用LCD&#xff0c;不涉及原理、指令说明 显示屏驱动文件参考正点探索者 1、CubeMx图形配置 此处的时序还可以调…

GLOG如何清理日志

1 日志清理 其实GLOG很长时间以来都没有日志清理功能。小白对此也很震惊&#xff0c;还特意去查了GLOG的提交记录。代码的提交记录显示&#xff0c;GLOG与日志清理有关的最初代码是2019年11月1日&#xff0c;而这个开源项目的起始时间可以追溯到2008年。也就是说&#xff0c;在…

浅谈liunx init.d 和 rc.local 两种起动方式

浅谈liunx init.d 和 rc.local 两种起动方式 以rabbitmq 举例 &#xff08;一&#xff09;.init.d 方式 开机自动重启设置 1.在/etc/init.d 目录下新建一个 rabbitmq [rootlocalhost init.d]# vi rabbitmq具体脚本如下所示&#xff1a; #!/bin/bash # # chkconfig: 2345 …

【离线数仓-7-数据仓库开发DIM层设计要点-拉链表同步装载脚本】

离线数仓-7-数据仓库开发DIM层设计要点-拉链表同步&装载脚本离线数仓-7-数据仓库开发DIM层设计要点-拉链表同步&装载脚本一、DIM层 维度模型 设计要点6.用户维度表 -拉链表1.用户维度表 前期梳理2.用户维度表 DDL表设计分析3.用户维度表 加载数据分析1.拉链表首日装载数…

RocketMQ 5.x新版本部署优化一览

​ RocketMQ从2022年9月份开始推出了新的5.x大版本。相比于之前的4.x版本&#xff0c;5.x版本向云原生前进了一大步。在增强原因功能的基础上&#xff0c;更是支持多语言客户端&#xff0c;周边生态也进行了补强和完善&#xff0c;明显可以看到离Kafka老大哥又近了很大一步。 …

linux网络编程-多进程实现TCP并发服务器

服务端流程步骤socket函数创建监听套接字lfdbind函数将监听套接字绑定ip和端口listen函数设置服务器为被动监听状态&#xff0c;同时创建一条未完成连接队列&#xff08;没走完tcp三次握手流程的连接&#xff09;&#xff0c;和一条已完成连接队列&#xff08;已完成tcp三次握手…

3-虚拟机篇

一.java JVM 的内存结构 内存&#xff1a;按线程类型分两类 线程共享&#xff1a; 方法区&#xff1a;存放类的信息堆&#xff1a;存放java对象的信息 线程私有&#xff1a; java虚拟机栈&#xff1a;存放java方法、方法参数和局部变量程序计数器&#xff1a;记录程序执行…

mars3d将当前视⻆指向北⽅且加载建筑物白膜

通过 setView⽅法实现&#xff0c;可以设置heading参数控制相对旋转⻆度map.scene.camera.setView({ orientation: { heading: 0, } }) 相关示例&#xff1a;1.http://mars3d.cn/editor-vue.html?idmap/options/scene2.功能示例(Vue版) | Mars3D三维可视化平台 | 火星科技// *…

ESP32S3 SPI发送间隔频率 驱动ADS8326

ESP32S3 SPI发送间隔频率驱动ADS8326esp32s3 spi例程 代码测试用寄存器方式实现spi发送寄存器描述驱动ADS8326 ads8326驱动时序 首先CS信号拉低&#xff0c;然后clk发送6个时钟&#xff0c;ads8326开始启动转换。 最后clk发送16个时钟&#xff0c;就会读取到两个字节的数据&a…

Spring扫描逻辑原码解析(带图好理解)

先上流程图 再上类图 再上代码 public static void main(String[] args) {XsmApplicationContext applicationContextnew XsmApplicationContext(AppConfig.class);System.out.println(applicationContext.getBean("userService"));System.out.println(applicationCo…

Laravel框架学习笔记——Laravel环境配置及安装(Ubuntu20.04为例)

目录引言1、安装Nginx2、安装PHP3、安装Composer4、搭建Laravel框架项目5、修改Nginx映射6、安装MySQL引言 好久没写博客了&#xff0c;因为个人需要&#xff0c; 所以要涉及到Laravel框架的学习&#xff0c;所以会出一系列的关于PHP的Laravel框架学习笔记&#xff0c;希望能够…

【平台数仓设计——2023】

平台数仓设计——2023前言一、选取大数据平台1、CDH大数据平台2、HDP大数据平台3、CDP大数据平台4、各种云数据中台二、选取调度平台1、DolphinScheduler(海豚调度)2、AzKaban3、Oozie4、Airflow5、corntab命令三、选取数仓设计方案1、离线数仓2、实时数仓3、离线实时一体化数仓…