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.pswp.cn/web/10219.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/10219.shtml
英文地址,請注明出處:http://en.pswp.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;賺取第一桶金 不知道您是…