日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

表面網格模型

本文介紹了表面網格模型的用途、基本構成和快速入門等內容。

模型用途

簡介

表面網格模型是三維實體建模中常用的方法,通過一系列連續的面來對三維實體形狀進行刻畫。 同時,對于面信息支持可視化元素的設置,如材質,紋理等信息,使得在三維可視化時具有更好的視覺效果。

在Ganos中,使用標準的SQL語言來查詢和處理表面模型類型的數據,支持數據基于文本和二進制的表達和數據交換。

Ganos Sfmesh是對象關系型數據庫PostgreSQL兼容版本(PolarDB PostgreSQL版)的一個時空引擎擴展,提供了一組數據類型,函數和存儲過程,幫助用戶高效地管理、查詢和分析表面三維數據。

功能概述

表面網格模型包括多種數據類型,支持構建、訪問、編輯、處理、聚合、導入導出等多種方法,支持三維空間關系判斷與三維分析計算操作,支持三維索引。

表面網格模型通過Ganos Utility擴展支持多種三維數據格式的導入,如IFC、glTF、Obj等,也支持將表面網格模型轉換為三維瓦片形式(如3dtiles)。

功能詳情請參見SfMesh SQL參考。

主要業務場景

在實際應用中,表面網格類型可以用于空間數據的可視化和分析:

  • 三維地圖制作和可視化

    地圖可視化可以直觀地展現地理空間中數據的分布、趨勢和關系,有助于更好地理解空間數據的意義和背后的規律。三維空間數據可以表示三維空間中的對象,如建筑,管線等,配合材質、紋理等可視化元素,可以還原出真實的三維場景以供展示以及決策使用。

  • 三維空間關系查詢

    空間關系查詢可以用于多種場景,例如空間數據挖掘、城市規劃等。通過空間關系查詢,可以快速地找到滿足特定條件的空間實體,為決策提供有力的支持。

    表面網格類型支持三維空間關系查詢,如相交、包含等。這可以用于確定兩個對象之間的關系,例如確定兩個物體是否相交。

  • 三維空間分析和計算

    三維空間分析和計算用于各種量測場景,例如計算建筑物的面積、體積等。

    表面網格類型支持各種空間分析和計算,如計算面積、長度、距離,同樣也包括兩個對象的交集,并集等。

以下以BIM場景為例,介紹表面網格模型在BIM數據場景下的使用。

BIM數據

建筑信息模型(Building Information Modeling,簡稱BIM)是在建設工程及設施全生命期內,對其物理和功能特性進行數字化表達,并依此設計、施工、運營的過程和結果的總稱。

BIM數據中包含了大量的三維空間數據和屬性數據,適合數據庫中做統一的存儲,管理和查詢。

Ganos Utility擴展支持IFC數據格式的導入,并轉換為表面網格數據模型。

可視化

有別于以往2D圖,3D模型的真實性,直觀的表達,讓模型信息的展現更符合人的直覺,更清楚地了解建造物的空間關系。

采用表面網格存儲的BIM數據,通過三維可視化技術,可以生成場景模型進行可視化操作,解決BIM數據,特別是大文件數據直觀性差的問題。

bim.gif

屬性查詢

BIM數據往往以專業格式按文件存儲,不利于結合其他二三維數據統一管理、聯合查詢,需要對其進行結構化拆解,提供業務/空間查詢的能力。

基于數據庫的儲存和查詢能力,可以在數據庫中進行屬性和空間一體化查詢,解決數據管理的問題。

例如,可以用標準的SQL查詢類型為 'System Panel' 的部件:

SELECT project_uuid, project_name, parent_uuid, uuid, "family", "name", attrs, props_set
FROM ifc_demo_ifc_elem
WHERE
(((props_set->'Other')::json)->'Type')::text like '%System Panel: %'
空間分析

BIM模型中的尺寸與建筑物一致。利用這些信息,進行各類指標的計算,如容積率與建蔽率;各類指標檢查,如樓層凈高,面積檢測;與其他空間數據聯動檢查碰撞關系等,如與二三維的規劃紅線進行空間比對。

image

基本構成

表面網格模型概述

在實體建模和計算機輔助設計中,一個實體對象通常被表示為一組連接的表面元素,這些元素定義了內部和外部點之間的邊界。

image

這些面通常由三角形(triangle meshes)、四邊形(quads)或其他簡單的凸多邊形(n-gons)組成,可以對實體對象的輪廓邊界進行精確的描述。

這種由多個面來表示描述實體對象的模型稱為表面網格模型。

空間參考系統

空間參考系(Spatial Reference System,以下簡稱為SRS )定義了如何將Sfmesh對象關聯到地球表面上某個具體位置。

Ganos使用稱為SRID來引用SRS定義。Sfmesh對象通過其自身的SRID值與SRS關聯。

更多內容請參見空間參考

表面網格模型數據模型

Ganos表面網格模型在OGC Simple Feature標準模型的基礎上,新增以下數據模型:

INDEXSURFACE

IndexSurface用于基于索引的方式來描述多面體信息,例如以下多面體,可以分別使用頂點坐標串(p1, p2, p3, p4, p5)以及使用頂點描述的面(1,2,3),(2,4,3),(4,5,3)來進行描述。

image

TRIANGLESTRIP

TriangleStrip基于連續的點來描述多面體系統,例如以下多面體,可以分別使用頂點坐標串(p1, p2, p3, p4, p5)來描述三個三角面(p1,p2,p3),(p2,p3,p4),(p3, p4, p5)。

image

TRIANGLEFAN

TriangleFan基于連續的點來描述多面體系統,例如以下多面體,可以分別使用頂點坐標串(p3, p1, p2, p4, p5)來描述三個三角面(p3,p1,p2), (p3,p2,p4), (p3, p4, p5)。

image

表面網格模型數據類型

Ganos中表面模型包含以下數據類型:

  • sfmesh:包含幾何、材質、紋理、紋理坐標等相關信息的數據類型集合。

  • meshgeom:幾何對象,用于記錄坐標點信息以及如何構面描述,以及對應的紋理坐標和法向量等信息。

  • texture:紋理貼圖信息,包含寬、高、壓縮方式及紋理二進制數據等。

  • material:材質,sfmesh對象表面各可視化屬性的集合,包括模型對象表面的色彩、紋理、光滑度、透明度、反射率、折射率、發光度等。

Ganos表面模型支持引用對象。引用對象是一種特殊數據結構,該對象中不存儲實際的數據值,只存儲到另外一個對象的地址信息。

表面網格交換格式

表面網格交換格式支持文本和二進制兩種格式。

  • 方便閱讀的文本形式:Well-Known Text(以下簡稱為WKT)。詳情請參見WKT

  • 可以保留數據精度且方便傳輸的二進制形式:Well-Known Binary(以下簡稱為WKB)。詳情請參見WKB。

數據列視圖

在Ganos中,sfmesh_columns是從數據庫系統目錄表中讀取全部表面網格相關列的視圖。該視圖遵循了OGC的Simple Features Specification for SQL標準并進行可對應的擴展。

該視圖結構如下:

列名

類型

說明

g_table_catalog

varchar(256)

所在數據庫的名稱。

g_table_schema

name

該表所在的schema。

g_table_name

name

該表的表名。

g_sfmesh_column

name

該表中某個表面網格列的列名。

g_sfmesh_type

name

表面網格列的具體子類型,取值如下:

  • sfmesh

  • meshgeom

  • texture

  • material

可以通過如下語句查詢當前數據庫中全部表面模型數據列:

SELECT * FROM sfmesh_columns;

或通過如下語句篩選出模型列。

SELECT * FROM sfmesh_columns
WHERE g_sfmesh_type = 'sfmesh';

索引

空間索引使Ganos處理大型空間數據集時避免對數據庫進行全局順序掃描。索引通過將數據組織到搜索樹中來加速搜索,可以快速遍歷該搜索樹以查找特定記錄。

Ganos為Sfmesh提供了一種基于GiST的三維空間索引。

可通過以下方式進行創建。

CREATE INDEX <index_name>
ON <table_name>
USING GIST(<column_name>);

快速入門

簡介

快速入門文檔幫助用戶快速理解Ganos Sfmesh引擎的基本用法,包括擴展創建、建表、插入數據、查詢結果、創建索引、空間查詢等內容。

更多專業用法可參考SFMesh最佳實踐文章:

語法說明

  • 創建擴展。

    CREATE EXTENSION Ganos_sfmesh CASCADE;
    說明

    建議將擴展安裝在public模式下,避免權限問題。

    CREATE extension Ganos_sfmesh WITH schema public cascade CASCADE;
  • 創建具有SFMesh字段的表。

    CREATE TABLE t_mesh(
      id integer,
      mesh sfmesh
    );
  • 插入數據。

     --向表中插入數據
    INSERT INTO 
      t_mesh(id, mesh)
    VALUES 
      (1, '{   "version" : 1, "srid" : 4326, "root" : 0 , "meshgeoms" : [    "MESHGEOM(PATCH(TRIANGLESTRIP(0 0 0 ,0 10 10,10 10 10,10 0 0)))" ],  "primitives" : [    {"meshgeom": 0}],  "nodes" : [    {"primitive" : 0} ] }'::sfmesh),
      (2, '{   "version" : 1, "srid" : 4326, "root" : 0 , "meshgeoms" : [    "MESHGEOM(PATCH(INDEXSURFACE(VERTEX(0 0 1,0 10 2,10 10 3,10 0 4), INDEX((0,1,2),(1,2,3)))))" ],  "primitives" : [    {"meshgeom": 0}],  "nodes" : [    {"primitive" : 0} ] }'::sfmesh);
  • 查詢數據結果。

    SELECT id, ST_AsText(mesh)
    FROM t_mesh;
    
    -------------------------
    1 | {"version" : 1, "srid" : 4326, "root" : 0, "meshgeoms" : ["MESHGEOM(PATCH(TRIANGLESTRIP(0 0 0,0 10 10,10 10 10,10 0 0)))"], "primitives" : [{"meshgeom" : 0}], "nodes" : [{"primitive" : 0}]}
    2 | {"version" : 1, "srid" : 4326, "root" : 0, "meshgeoms" : ["MESHGEOM(PATCH(INDEXSURFACE Z (VERTEX(0 0 1,0 10 2,10 10 3,10 0 4),INDEX((0,1,2),(1,2,3)))))"], "primitives" : [{"meshgeom" : 0}], "nodes" : [{"pr
     imitive" : 0}]}
  • 創建索引。

     CREATE INDEX idx_t_mesh
     ON t_mesh
     USING GIST(mesh);
  • 空間查詢。

     -- 與某個三維空間對象相交
    SELECT id
    FROM t_mesh
    WHERE ST_3DIntersects(mesh, ST_SetSRID('BOX3D(0 0 0, 10 10 10)'::box3d::sfmesh, 4326));
  • 刪除擴展(可選)。

    DROP EXTENSION Ganos_SFMesh CASCADE;

SQL參考

詳細SQL手冊請參見SfMesh SQL參考。