瀚高數據庫
目錄
環境
文檔用途
詳細信息
環境
系統平臺: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