PostGIS之pointcloud

瀚高数据库
目录
环境
文档用途
详细信息

环境
系统平台:Linux x86-64 Red Hat Enterprise Linux 7
版本:14
文档用途
本文详细介绍pointcloud,包括:安装配置、两个核心数据类型、功能函数、使用PDAL读写pgpoingcloud数据等。

详细信息

1.1 简介

pgPointcloud是一个强大的工具,适用于各种需要处理大规模点云数据的应用场景。pgPointcloud结合PostGIS可以用于管理和查询大型地理信息系统数据集,包括处理激光扫描数据、三维城市模型、遥感图像等地理空间数据;可用于高精度地形建模,例如数字高程模型(DEM)或数字地形模型(DTM)的生成,一般用于土地规划、水文学和环境科学中;在建筑、考古学、城市规划和基础设施管理中存储、查询和分析激光扫描和点云数据等各种场景。pgPointcloud是一个多功能的工具,适用于各种领域,无论是在地理信息领域、工程领域、环境科学、文化遗产保护还是其他领域,都可以通过pgPointcloud来更好地管理和分析点云数据,从而支持更好的决策和规划。

pgPointcloud 扩展提供了用于存储、查询和处理点云数据的功能。它将点云数据存储在 PostgreSQL 数据库中,并提供了一套 SQL 函数和操作符,以便进行点云数据的查询、分析和可视化。

通过pgPointcloud可以将LIDAR点存储在PostGIS中,并与其他地理空间数据(矢量、栅格)等很好地集成到一起。可以使用PDAL工具加载点云数据到PostGIS。

pgPointcloud主要功能包括:

1)存储点云数据

pgPointcloud 允许你将点云数据以结构化的方式存储在 PostgreSQL 数据库中。它提供了基于二进制格式的点云数据类型,并支持存储和索引多个维度的点云数据。

2)点云数据分析

pgPointcloud 扩展提供了丰富的 SQL 函数和操作符,用于执行点云数据的查询。你可以使用这些功能来过滤、聚合和分析点云数据,以满足特定的分析需求。

3)空间索引支持

为了加快点云数据的查询速度,pgPointcloud 支持使用空间索引来优化查询效率。你可以基于点云数据的坐标维度创建索引,以便快速执行空间查询操作,如范围查询、近邻查询等。

4)良好的可扩展性

作为 PostgreSQL 的数据库扩展,pgPointcloud 具有良好的扩展性和可定制性。你可以根据自己的需求扩展和定制 pgPointcloud 扩展,以满足特定的点云数据处理需求。

1.2 安装配置

1)安装要求

PostgreSQL并已安装PostGIS。

LibXML2 开发包,一个用于处理 XML 格式文件的工具库;pgPointcloud 会使用XML文件来配置一些参数或者描述数据的结构,LibXML2对XML文件的解析和处理功能,使得 pointcloud 能够轻松读取和解析这些配置文件;XML文件通常用于描述数据的结构、格式和元数据,pgPointcloud可使用LibXML2来解析这些描述信息,以便正确地读取和处理点云数据;pgPointcloud会将一些元数据与点云数据关联起来,这些元数据可以以XML格式存储,使用LibXML2可以方便地读取

和管理这些元数据;XML也是一种常用的数据交换格式,pgPointcloud会与其他系统或软件进行数据交互,LibXML2提供了强大的XML解析和生成功能,使得 pgPointcloud 能够与其他系统无缝地交换数据。

Cunit,pgPointcloud使用Cunit完成相关的单元测试、自动化测试、回归测试、性能测试等测试性工作。

laz-perf(可选安装),在 PointCloud 中的主要作用是帮助压缩和解压点云数据,以减小存储需求、提高数据传输效率和加速点云数据的处理。

2)下载地址

https://pgpointcloud.github.io/pointcloud/download.html

3)编译安装步骤

./configure --prefix=/home/postgis/postgis/pointcloud-1.2.4--with-pgconfig=/home/postgis/pg15.4/bin/pg_config--with-xml2config=/usr/bin/xml2-configmake && make install

4)创建extension

postgis=# create extension pointcloud;CREATE EXTENSIONpostgis=# create extension pointcloud_postgis ;CREATE EXTENSION

创建EXTENSION后会在数据库中创建pgPointcloud提供的数据库对象和相关功能函数;其中表pointcloud_formats用来记录pcpoints内容的元数据;视图pointcloud_columns用来统计当前数据库下的pgPointcloud字段信息。pgPointcloud在数据库创建的两个核心数据类型详见第1.3节;pgPointcloud在数据库创建的相关功能函数详见第1.4节。

1.3 pgPointcloud中的两个核心数据类型

pgPointcloud提供了两个核心的数据类型pcpoint和pcpatch。这些数据类型是pgPointcloud扩展的一部分,它为PostgreSQL数据库添加了点云数据的支持,使之可以存储、查询和分析点云数据。这对于地理信息系统(GIS)应用、地图制图、三维建模和其他需要点云数据的领域非常有用。

1) pcpoint

pcpoint是pgPointcloud中用于表示单个点的数据类型;每个pcpoint包含点的坐标信息以及可选的附加属性信息。通常用于表示点云中的离散点;通常,点云数据由许多这样的点组成。

2) pcpatch

pcpatch是pgPointcloud中的数据类型,用于表示点云数据中一组相关点的集合;pcpatch 包含了这些集合的几何信息(通常是一个平面),以及可选的附加属性信息。在点云数据的分析和处理中可以帮助组织和描述点云中的局部结构,例如地面、建筑物等。

1.4 pgPointcloud提供的功能函数

pgPointcloud提供了大量的函数以实现点云数据的管理、分析、可视化等。这些函数帮助用户执行各种点云数据操作,包括数据导入、导出、查询、空间分析、统计和索引。还可以帮助PostgreSQL数据库实现更复杂的地理信息系统(GIS)任务,如地形建模、建筑物识别、地理空间分析等。这些函数如表1.1、1.2、1.3、1.4所示。

pcpoint相关功能函数可以用于创建、导入、拆分和合并 pcpoint 数据类型,从而方便地处理单个点云数据,包含的函数如表1.1所示。

表1.1 pcpoint相关的函数

函数名

函数含义

PC_MakePoint

创建一个pcpoint对象,需要指定 x、y 和 z 坐标。

PC_AsText

将pcpoint对象转换为可读的JSON格式。

PC_PCId

返回pcpoint对象的唯一标识符。

PC_Get

从pcpoint对象中获取指定索引位置的点。

PC_MemSize

返回pcpoint对象占用的内存大小。

pcpatch功能函数主要用于处理点云集合数据,这些函数用来创建、汇总、过滤和排序pcpatch数据,以进行点云数据的处理和分析,在地理信息系统(GIS)应用、地图制图、地形建模、建筑物识别等领域中非常有用;包含的函数如表1.2所示。
表1.2 pcpatch相关功能函数

函数名

函数含义

PC_Patch

将pcpoint聚合为pcpatch。

PC_MakePatch

创建一个pcpatch对象。

PC_NumPoints

返回pcpatch中的pcpoint个数。

PC_PCId

返回pcpatch的唯一标识符。

PC_AsText

将pcpatch对象转换为可读的JSON格式。

PC_Summary

返回pcpatch的摘要信息,包括点的数量、空间范围等。

PC_Uncompress

解压缩pcpatch数据。

PC_Union

合并pcpatch数据。

PC_Intersects

计算两个pcpatch对象是否有交点。

PC_Explode

将pcpatch分解为pcpoint的集合。

PC_PatchAvg

读取pcpatch中所有点的请求维度值,并返回这些值的平均值。

PC_PatchMax

读取pcpatch中所有点的请求维度值,并返回这些值的最大值。

PC_PatchMin

读取pcpatch中所有点的请求维度值,并返回这些值的最小值。

PC_FilterGreaterThan

根据条件过滤pcpatch中的点,保留大于指定值的点。

PC_FilterLessThan

根据条件过滤pcpatch中的点,保留小于指定值的点。

PC_FilterBetween

根据条件过滤pcpatch中的点,保留在指定范围内的点。

PC_FilterEquals

根据条件过滤pcpatch中的点,保留等于指定值的点。

PC_Compress

使用指定的压缩算法对pcpatch数据进行压缩。

PC_PointN

获取pcpatch中指定索引位置的点。

PC_IsSorted

检查pcpatch中的点是否已排序。

PC_Sort

对pcpatch对象中的点进行排序。

PC_Range

返回pcpatch的范围。

PC_SetPCId

设置pcpatch的唯一标识符。

PC_Transform

对pcpatch中的点进行坐标变换。

PC_MemSize

返回pcpatch占用的内存大小。

WKB相关功能函数,在pgPointcloud中可以轻松地进行WKB格式的点云数据的输入、输出和转换,以与其他地理信息系统工具和数据库系统进行交互;包含的函数如表1.3所示。

表1.3 WKB相关功能函数

函数名

函数含义

PC_AsBinary

将pcpoint数据转换为二进制格式。

PC_EnvelopeAsBinary

返回pcpatch 2D几何体边界的二进制值。

PC_BoundingDiagonalAsBinary

返回pcpatch 2D几何体边界对角线的二进制值。

PostGIS相关功能函数使pgPointcloud和PostGIS能够进行数据转换和交互,从而在地理空间查询和点云数据分析之间建立连接,这在需要同时处理地理空间数据和点云数据的应用程序中非常有用;包含的函数如表1.4所示。

表1.4 PostGIS相关功能函数

函数名

函数含义

PC_Intersects

检查pcpatch数据是否与 geometry数据相交。

PC_Intersection

计算pcpatch数据与 geometry数据的交集。

Geometry

将pcpoint数据转换为 geometry。

PC_EnvelopeGeometry

创建表示pcpatch数据边界的 geometry对象。

PC_BoundingDiagonalGeometry

创建表示pcpatch数据边界对角线的geometry对象。

1.5 如何使用PDAL读写pgpointcloud数据

PDAL(Point Data Abstraction Library)是一款用于处理点云数据的开源工具库,用于点云数据的导入、转换、处理和导出。它提供了许多功能和工具,来管理和操作点云数据。

用来处理pgPointcloud数据的工具很多,在pgPointcloud的官方指导中,建议使用PDAL。

在PDAL中,Readers是用于读取不同类型数据的模块,用于将点云数据加载到PDAL的处理管道中。支持的数据类型包括:buffer、ept、e57、gdal、las、pgpointcloud、text、tiledb等35种。

在PDAL中,Writers是用于将处理过的点云数据写入不同类型的输出文件或数据源的模块。Writers模块允许用户将经过滤波、变换和其他处理的点云数据保存到磁盘或上传到云存储中,以便进一步的分析、可视化或共享。支持的输出类型包括:las、ogr、pgpointcloud、ply、raster、text等21种。

PDAL可以用来导入各种格式的点云数据到pgPointcloud数据库中,以上支持的各种数据类型都可以将它们转换为pgPointcloud数据,用于数据库查询和分析。PDAL与PostgreSQL数据库以及pgPointcloud扩展集成,从而使用户能够更轻松地管理和分析点云数据,满足各种地理信息和地理空间分析需求。

示例1和示例2分别展示了PDAL读取pgPointcloud数据并转换成text数据的配置和读取las数据并导入pgPointcloud,存放在PostgreSQL中的配置。示例3展示了PDAL导入las数据到pgPointcloud的完整过程。

示例1:读取pgpointcloud数据转换成text数据的配置

[{"type":"readers.pgpointcloud","connection":"dbname='lidar' user='user'","table":"lidar","column":"pa","spatialreference":"EPSG:26910"},{ "type":"writers.text", "filename":"output.txt" }]

readers.pgpointcloud参数选项包括:

connection: PostgreSQL数据库连接串信息。

例如:host=ip user=user password=pwd db=db port=5432

table: 指定表名。

schema: 指定模式名,默认“public”。

column: 指定pointcloud类型的字段,默认“pa”。

where: 指定数据过滤条件。

spatialreference: 原数据的空间参考坐标系。

count: 读取的最大记录数。

还包括:override_srs、default_srs等。

示例2:读取las数据导入pgpointcloud,存放在PostgreSQL中的配置

[{"type":"readers.las","filename":"inputfile.las","spatialreference":"EPSG:26916"},{"type":"writers.pgpointcloud","connection":"host='ip' dbname='db' user='user'","table":"example","compression":"dimensional","srid":"26916"}]

writers.pgpointcloud参数选项包括:

connection: PostgreSQL数据库连接串信息。

例如:host=ip user=user password=pwd db=db port=5432

table: 指定表名。

schema: 指定模式名,默认“public”。

column: 指定pointcloud类型的字段,默认“pa”。

compression: 指定压缩格式,可选:“none”、“dimensional”和“lazperf”,默认“dimensional”。

overwrite: “true”覆盖,“false”追加,默认“false”。

srid: 指定空间参考坐标系,对应spatial_ref_sys表中的代码,默认“4326”。

还包括:pcid、pre_sql、post_sql、output_dims等。

示例3:使用PDAL导入las数据到PostGIS,步骤如步骤(1)~(3)所示

步骤(1)安装PDAL

cmake-DCMAKE_INSTALL_PREFIX=/home/postgis/PDAL-DGDAL_INCLUDE_DIR=/home/postgis/gdal-3.5.1/include-DGDAL_LIBRARY=/home/postgis/gdal-3.5.1/lib/libgdal.so -DGEOTIFF_LIBRARY=/home/postgis/libgeotiff-1.7.1/lib/libgeotiff.so-DGEOTIFF_INCLUDE_DIR=/home/postgis/postgis/libgeotiff-1.7.1/include-DPROJ_INCLUDE_DIR=/home/postgis/postgis/proj-9.0.0/include ..makemake install

步骤(2)编写导入配置文件

[root@localhost postgis]# vi pdal.json{"pipeline": [{"type": "readers.las","filename": "import.las"},{"type": "writers.pgpointcloud","connection": "dbname='postgis' host='127.0.0.1' port='7432' user='postgis' password='highgo123'","table": "tbl_las"}]}

步骤(3)导入数据

pdal pipeline -i pipeline_single.json

1.6 最佳实践

pgPointcloud提供了一种在PostgreSQL数据库中高效存储点云数据的方法。pgPointcloud将一组点(pcPoints)称为pcPatch,这种组织方式允许对数据进行高效压缩。每个pcPatch都有一个边界框,在PostGIS的空间功能中能大大提升查询性能,这样pgPointcloud使得对非常大的点云数据集进行高效查询成为可能;可以使用空间条件(哪些点位于此区域)以及点属性条件(哪些点的某个属性值在…和…之间)进行查询。

pgPointcloud已经在一个包含50亿个点的点云数据集上实现了毫秒级快速查询,特别是在将数据加载到数据库中,或启用自动数据压缩,或基于空间或其他属性的查询等场景下有较高的查询性能。但是在数据输出、数据基本转换等场景下性能较慢;数据导出时每秒只能导出约10万个点;数据基本转换时如果涉及到空间参考坐标系的转换,对性能也是很大的挑战。

1.7 卸载

pgPointcloud EXTENSION的卸载,同样遵循PostgreSQL EXTENSION卸载的一般规律,先移除EXTENSION,再将安装文件删除即可;执行drop extension会移除PostgreSQL对pgPointcloud的依赖;执行make uninstall会移除PostgreSQL安装目录下的pgPointcloud相关so库文件和sql文件等。操作命令:

–先删除extension

drop extension pointcloud;drop extension pointcloud_postgis;

–编译安装目录

make uninstall

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

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

相关文章

学习前端第三十四天(call,apply,函数绑定;箭头函数;对象属性配置)

一、call、apply function fn(x, y) { console.log("hello", x, y, this) }; 1.call方法 作用:调用后执行函数,可以给“this”传参数 fn.call({ a: 1 }, 1, 2,); 2.apply方法 第一个给“this”传参数,第二个参数需要是数组形式…

ElementUi中el-table组件使用row-class-name修改指定行颜色

可以通过指定 Table 组件的 row-class-name 属性来为 Table 中的某一行添加 class,表明该行处于某种状态。 注意:如果在el-table中使用了stripe这个属性,这个属性是带斑马纹的表格样式,它和row-class-name共存时是没有效果。 注…

【微信开发】微信支付前期准备工作(申请及配置)

1、申请并配置公众号或微信小程序 1.1 账户申请 通过微信公众平台,根据指引申请微信小程序或公众号,申请时需要微信认证,申请流程不在赘述 1.2 信息配置 申请通过后,需进入小程序和公众号内进行信息配置 1.2.1 小程序信息配置…

Mac YOLO V9推理测试(基于ultralytics)

环境: Mac M1 (MacOS Sonoma 14.3.1) Python 3.11PyTorch 2.1.2 一、准备工作 使用YOLO一般都会接触ultralytics这个框架,今天来试试用该框架进行YOLO V9模型的推理。 YOLOv9目前提供了四种模型下载:yolov9-c.pt、yolov9-e.pt、gelan-c.p…

lint 代码规范,手动修复,以及vscode的第三方插件eslint自动修复

ESlint代码规范 不是语法规范,是一种书写风格,加多少空格,缩进多少,加不加分号,类似于书信的写作格式 ESLint:是一个代码检查工具,用来检查你的代码是否符合指定的规则(你和你的团队可以自行约定一套规则)…

【管理篇】如何横向沟通?

目录标题 什么是横向沟通?常见沟通问题 如何处理横向沟通中的问题? 什么是横向沟通? 所谓横向沟通,就是和没有直接汇报关系的合作方之间的沟通,指的是与平级间进行的与完成工作有关的交流;横向沟通核心的挑…

mqtt定时脚本

需求描述 给mqtt的topic发送信息 对应的topic接收请求后,执行发送短信指令 信息内容 SMS,10086,102 lua的mqtt里面,截取判断即可 –>可以实现 定时任务, 每月开机一次 发短信? 或者使用开机通知? 定时消费…

Npm Install Docusaurus Demo【npm 安装 docusaurus 实践 】

文章目录 1. 简介2. 前提2.1 安装 git2.2 安装 node 3. 安装4. 项目结构5. 访问5.1 localhost 访问5.2 ip 访问 1. 简介 Docusaurus 是一个facebook的开源项目,旨在帮助开发者构建易于维护和部署的文档网站。它提供了一个简单的方法来创建专业的文档网站&#xff0…

共享旅游卡免费旅游真实反馈,有图有真相?

新伙伴体验,云南昆大丽6天5晚品质双人游,真实反馈!珠海伙伴蔡总,加入千益畅行共享旅游卡团队,自己亲自体验“云南昆大丽6天5晚品质双人游”真实反馈,分享全程内容截图,无半点虚假! …

2024-05-08 postgres-调试及分析-记录

摘要: 2024-05-08 postgres-调试及分析-记录 DDL: 创建库表及插入数据: create database d1;\c d1;create table t1( a int, b int ); create table t2( a int, b int );insert into t1(a,b) values(3,4); insert into t1(a,b) values(5,6);insert into t2(a,b) va…

MongoDB聚合运算符:$trim

MongoDB聚合运算符&#xff1a;$trim 文章目录 MongoDB聚合运算符&#xff1a;$trim语法使用空白字符 举例 $trim用来删除字符串开头和结尾的空白字符&#xff08;包括空值&#xff09;或指定字符。 语法 { $trim: { input: <string>, chars: <string> } }input&…

react经验15:拖拽排序组件dnd-kit的使用经验

应用场景 列表中的成员可鼠标拖拽改变顺序 实施步骤 前置引入 import type { DragEndEvent } from dnd-kit/core import { DndContext } from dnd-kit/core import {arrayMove,/*垂直列表使用verticalListSortingStrategy,横向列表使用horizontalListSortingStrategy*/vert…

springboot引入security,测试接口报Unauthorized

1、报错截图 2、当前项目pom文件引入security <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-security</artifactId><version>2.2.2.RELEASE</version> </dependency> 3、解决…

数据结构之图——探索图论的奥秘

前言 在这篇文章中&#xff0c;我们一起来看看我们生活中都会用到&#xff0c;但却不那么熟悉的数据结构——图&#xff08;英语&#xff1a;graph&#xff09;。我们看下百科定义&#xff1a; 在计算机科学中&#xff0c;图&#xff08;英语&#xff1a;graph&#xff09;是一…

计算机毕业设计 | vue+springboot汽车销售管理系统(附源码)

1&#xff0c;项目介绍 本项目基于spring boot以及Vue开发&#xff0c;前端实现基于PanJiaChen所提供的开源后台项目vue-element-admin改造。 针对汽车销售提供客户信息、车辆信息、订单信息、销售人员管理、财务报表等功能&#xff0c;提供经理和销售两种角色进行管理。 2&…

某MBTI性格测试系统后台Getshell

在淘宝购买了性格测试系统源代码进行环境部署,后进行渗透测试 淘宝源码链接:https://item.taobao.com/item.htm?ftt&id790798788255 (自己学习(代码审计、算法、环境搭建)知识技能提升) 环境准备 集成环境选的是小皮 phpstudy 创建网站,将源代码放入网站根目录配置好数据…

Doris【部署 01】Linux部署MPP数据库Doris稳定版(下载+安装+连接+测试)

本次安装测试的为稳定版2.0.8官方文档 https://doris.apache.org/zh-CN/docs/2.0/get-starting/quick-start 这个简短的指南将告诉你如何下载 Doris 最新稳定版本&#xff0c;在单节点上安装并运行它&#xff0c;包括创建数据库、数据表、导入数据及查询等。 Linux部署稳定版Do…

ElasticSearch的python api以及dev tool方式的基本操作

一、环境要求 根据es服务器版本&#xff0c;下载es的python api包&#xff0c;我们这里的环境为&#xff1a; python3.8, 下载的elastic search版本为7.6.0&#xff0c;安装方式&#xff1a; pip install elasticsearch7.6.0二、es操作及python代码 1、获取es实例&#xff0…

LeetCode 每日一题 2024/5/6-2024/5/12

记录了初步解题思路 以及本地实现代码&#xff1b;并不一定为最优 也希望大家能一起探讨 一起进步 目录 5/6 741. 摘樱桃5/7 1463. 摘樱桃 II5/8 2079. 给植物浇水5/9 2105. 给植物浇水 II5/10 2960. 统计已测试设备5/11 2391. 收集垃圾的最少总时间5/12 5/6 741. 摘樱桃 从起点…

当下是风口的热门兼职副业,月入3万问题不大,附保姆教程!

近年来&#xff0c;短视频行业呈现出迅猛的发展势头&#xff0c;已经成为当下最受欢迎的一种形式。甚至连曾经的电商巨头京东也开始积极布局这一领域&#xff0c;投入巨资20亿元进行深入耕耘。 周周近财&#xff1a;让网络小白少花冤枉钱&#xff0c;赚取第一桶金 不知道您是…