すべてのプロダクト
Search
ドキュメントセンター

PolarDB:表面メッシュモデル

最終更新日:Oct 18, 2024

このトピックでは、表面メッシュモデルの詳細と使用方法について説明します。

概要

概要

表面メッシュモデリングは、隣接する表面のメッシュとして3Dオブジェクトを表すために使用される一般的な3Dモデリング技術です。 テクスチャとマテリアルをサーフェスに適用して、オブジェクトの3Dモデルの視覚的な詳細を強調できます。

標準SQLを使用して、サーフェスメッシュモデルのデータ型のデータを照会および操作できます。 データは、テキストおよびバイナリ形式で表現および交換できます。

GanosBase Sfmeshは、 PolarDB for PostgreSQL (Oracleと互換) の時空間拡張です。 ユーザーが3次元サーフェスデータを効率的に管理、取得、分析するのに役立つ一連のデータ型、関数、ストアドプロシージャを提供します。

機能

サーフェスメッシュモデルは、データの作成、アクセス、編集、処理、集計、インポート、エクスポートを行うための複数の組み込みデータ型と関数を提供し、3D空間関係、3D分析と計算、3Dインデックスの決定をサポートします。

GanosBase Utility拡張機能を使用すると、サーフェスメッシュモデルは、IFC、gITF、OBJなどの複数の形式の3Dデータのインポートをサポートします。 この拡張により、サーフェスメッシュモデルを3Dタイルに変換することもできます。

詳細については、「SfMesh SQLリファレンス」をご参照ください。

シナリオ

表面メッシュモデルは、空間データの視覚化および解析に使用することができます。

  • 3Dマップとデータの視覚化

    3Dマップは、地理空間データの分布、傾向、および関係を示し、データ内の意味やパターンを識別するのに役立ちます。 3D空間データの視覚化は、建物、パイプライン、およびケーブルなどの3次元オブジェクトを表すことができる。 素材やテクスチャなどの視覚的要素を追加することで、実際の状況を模倣して表示し、情報に基づいた意思決定を行うことができます。

  • 3D空間クエリ

    空間クエリは、空間データマイニングや都市計画などのシナリオで使用できます。 空間関係に基づいてデータをすばやくフィルタリングし、情報に基づいた決定を行うことができます。

    サーフェスメッシュモデルは、交差および包含を含む空間関係に基づいて空間データをフィルタリングするための3D空間クエリをサポートします。 空間クエリを使用して、2つのオブジェクト間の関係 (交差するかどうかなど) を判断することもできます。

  • 3D空間解析と計算

    3D空間分析および計算は、建物の面積および体積を測定するなどの多様な測定活動において有用です。

    サーフェスメッシュモデルは、面積、長さ、距離の計算、2つのオブジェクトの交差と結合など、さまざまな空間分析および計算タスクをサポートします。

次の例では、建物情報モデリング (BIM) シナリオで表面メッシュモデルを使用します。

BIMは、施設の物理的および機能的特性のデジタル表現を提供します。 BIMは、施設の設計、建設、および運用に使用されます。

BIMは、大量の3次元空間データとプロパティデータを生成します。これらは、データベースの中央ストレージ、管理、およびクエリに適しています。

GanosBase Utility拡張機能は、BIMプログラムによって生成されたIFC形式のモデルをインポートし、それをサーフェスメッシュモデルに変換することができます。

3Dビジュアライゼーション

2D図面と比較して、3Dモデルはリアリズムを高め、より直感的な方法で情報を提示し、施設内の空間的関係を鮮やかに示します。

BIMデータをサーフェスメッシュとして保存することで、視覚化技術を使用した3Dモデルの作成が可能になります。 これにより、BIMデータ、特に大きなBIMファイルの直感性が向上します。

bim.gif

属性クエリ

BIMデータは通常、特殊なファイル形式で保存されるため、他の2Dおよび3Dデータと一緒に一元管理または結合操作で使用することはできません。 ビジネスおよび空間クエリを容易にするには、BIM要素を構造化形式にセグメント化する必要があります。

データベースは、構造化された方法でBIMデータを保存し、属性と空間関係の両方を簡単に照会できるため、セグメント化されたBIMデータを管理するのに理想的です。

たとえば、標準SQLを使用して「システムパネル」タイプとして分類されたコンポーネントを照会できます。

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モデルは、物理的な施設の寸法を正確に反映します。 したがって、BIMデータは、床面積比および建物被覆率の計算、正味の床と床の高さおよび床面積の検証、他の2Dおよび3Dデータセットからの空間オブジェクトとの設計衝突の検出など、さまざまな分析タスクに使用できます。

image

コンポーネント

表面メッシュモデルとは

ソリッドモデリングおよびコンピューター支援設計では、ソリッドオブジェクトは通常、内部空間と外部空間の境界を定義する一連の接続されたサーフェス要素として表されます。

image

これらのサーフェスは、三角形、四角形、または他のポリゴンで構成されることが多く、これらを組み合わせると、ソリッドオブジェクトの形状を正確に表します。

これらの接続面を使用して構築されたソリッドオブジェクトは、表面メッシュモデルです。

空間参照システム

空間参照システム (SRS) は、Sfmeshオブジェクトを地球の表面上の特定の場所に関連付ける方法を定義します。

GanosBaseはSRIDを使用して、SfmeshオブジェクトをそれぞれのSRS定義にリンクします。

詳細については、「空間リファレンス」をご参照ください。

データモデル

GanosBaseのサーフェスメッシュモデルは、OGCのSimple Feature Modeに加えて、次の3つの新しいデータモデルを提供します。

INDEXSURFACE

IndexSurfaceは、インデックス付きの多面体を記述するために使用されます。 例えば、以下の多面体は、頂点列 (p1, p2, p3, p4, p5) 、または (p1, p2, p3) 、(p2, p3, p4) 、(p4, p5, p3) などの頂点定義面で表すことができます。

image

トライアングルストリップ

TriangleStripは、隣接する点を持つ多面体を記述するために使用されます。 例えば、以下の多面体は、頂点列 (p1, p2, p3, p4, p5) または頂点を定義する三角形面 (p1, p2, p3) 、(p2, p3, p4) 、(p3, p4, p5) で表すことができます。

image

トライアングルファン

三角形ファンは、隣接する点を共通の中心点に接続することによって多面体を記述するために使用されます。 例えば、以下の多面体は、頂点列 (p3, p1, p2, p4, p5) または頂点を定義する三角形面 (p3, p1, p2) 、(p3, p2, p4) 、(p3, p4, p5) で表すことができます。

image

データ型

GanosBaseのサーフェスメッシュモデルでは、次のデータ型があります。

  • sfmesh: データ型のコレクション。 ジオメトリ、マテリアル、テクスチャ、テクスチャcoordiantesに関する情報が含まれています。

  • meshgeom: 幾何学的オブジェクト。 座標、形状記述、テクスチャ座標、法線ベクトルを記録するために使用されます。

  • texture: 幅、高さ、圧縮方法、およびバイナリテクスチャデータを含むテクスチャマッピング情報。

  • material: 色、テクスチャ、滑らかさ、透明度、反射率、屈折率、光度など、sfmeshオブジェクトの表面上の視覚的属性のコレクション。

サーフェスメッシュモデルは、参照型もサポートします。参照型は、データを含まず、別のデータオブジェクトのみを指す特殊なデータ型です。

交換形式

サーフェスメッシュモデルでは、2つの交換形式がサポートされています。

  • よく知られているテキスト (WKT): 読みやすいテキスト形式詳細については、「WKT」をご参照ください。

  • よく知られているバイナリ (WKB): ポータブルで精度を維持するバイナリ形式詳細については、「WKB」をご参照ください。

データ列ビュー

GanosBaseでは、sfmesh_columnsビューにサーフェスメッシュモデルに関連するすべての列が含まれ、データベースシステムのカタログテーブルからこの情報が得られます。 これは、OGCのSQL用のシンプルな機能仕様に従いながら、追加の拡張機能も組み込まれています。

ビューの構造は次のとおりです。

タイプ

説明

g_table_catalog

varchar(256)

データベースの名前。

g_table_schema

name

テーブルが属するスキーマ。

g_table_name

name

テーブルの名前。

g_sfmesh_column

name

列の名前。

g_sfmesh_type

name

sfmesh列のサブタイプ。 有効な値:

  • sfmesh

  • meshgeom

  • テクスチャ

  • 素材

現在のデータベースのサーフェスメッシュモデルのすべての列を照会します。

SELECT * FROM sfmesh_columns;

フィルター列:

SELECT * FROM sfmesh_columns
WHERE g_sfmesh_type = 'sfmesh';

インデックス

空間インデックスは、データベース全体のシーケンシャルスキャンを必要とせずに、大きな空間データセットを照会する効率を大幅に向上させます。 これは、空間データを検索ツリーに編成することによって達成され、これによりレコードの迅速な走査および検索が可能になります。

GanosBaseは、GiSTベースの3次元空間インデックスをSfmeshに提供します。

次のように空間インデックスを作成します。

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

クイックスタート

概要

このセクションでは、拡張機能のインストール、テーブルとインデックスの作成、データ挿入、データクエリ、空間クエリなど、ganos_sfmesh拡張機能を使用する基本について説明します。

構文

  • ganos_sfmesh拡張機能をインストールします。

    CREATE EXTENSION ganos_sfmesh CASCADE;
    説明

    パブリックスキーマに拡張機能をインストールして、潜在的なアクセス許可の問題を回避します。

    CREATE extension ganos_sfmesh WITH schema public cascade CASCADE;
  • sfmesh型の列を持つテーブルを作成します。

    CREATE TABLE t_mesh(
      id integer,
      mesh sfmesh
    );
  • データの挿入:

     -- Insert data into the table
    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);
  • 空間クエリを実行する:

     -- Query data that intersects with a specified 3D object
    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文

詳細については、「SfMesh SQLリファレンス」をご参照ください。