小笠原 龍司
Forge Advocate | @AutodeskForge
CS472549
BIM 360 プロジェクトとアカウントの
小笠原 龍司
2014年からオートデスクにて、Revit や Navisworks 等、デスクトップ製品 API ・アドイン開発・ API のサポート、及び Forge プラットフォーム API の
エバンジェリストとして活動中。
前職では、Webアプリケーションエンジニアとして環境制御システムやリア ルタイムコミュニケーションシステム、統合基幹業務システムの開発に従事。
アジェンダ
•
BIM 360 Document Management の横断検索サンプル
•
Amazon Elasticsearch Service
•
データベースの作成
•
検索
BIM 360 Document Management 検索機能
• Document Management の検索機能を使用すると、指定したフォルダおよびそのサブフォルダ内のドキュメ ントを簡単に検索することができます。 • ただし、検索機能はプロジェクト内のドキュメントに限られ、ファイル名が対象です。 • プロジェクトで管理されるモデルや設計ドキュメントの増加に従って、カスタム検索は必須のものになりつ つあります。Amazon Elasticsearch Service
• Elasticsearch は、オープンソースの RESTful 分散検索/分析エンジン。 • JSON ドキュメントの形式でデータを Elasticsearch に送信できます。 • Elasticsearch は自動的に JSONドキュメントを保存し、そのドキュメントへの検索可能な参照をクラスター のインデックスに追加します。 • その後、Elasticsearch API を使用してドキュメントの検索と結果の取得ができます。JSON
インデックスの作成
インデックス
(≒ RDB の DB)
Amazon
Elasticsearch
Service
REST API
クラスター
JSON
データの検索・結果取得
REST API
アプリケーション
BIM 360 横断検索サンプル
• Elasticsearch データベース(AWS サービス)にメタデータをインデックスして検索するサンプルです。
• 選択したBIM 360 アカウント(Hub)の全プロジェクトを再帰的に反復処理し、Project Filesフォルダに入り、 サブフォルダに入り、最後のバージョンのアイテムに入り、すべてのメタデータを取得し、テキスト(JSON ではない)として Elasticsearch に送信します。
• 新しいファイルがアップロードされると、Webhook がトリガーとなってインデックスを更新します。
データベースの作成
仕組みの解説
Data
Management
Derivative
Model
Elastic
Search
AWS Elastic
Search
ファイルを
見つける
メタデータを
抽出
ドキュメント
を作成
Elastic Search ドキュメントの作成
•
Hub ID
•
Project ID
•
Folder URN
•
Item URN
•
Version URN
•
File Name
•
Metadata
Data Management API
Model Derivative API
ファイルへのアクセス
– Data Management API
1. BIM 360 アカウントに紐づく Hub Id の取得
2. Hub Id に紐づく全てのプロジェクトとその Project Id を取得
3. プロジェクトの [プロジェクト ファイル]フォルダを取得
4. [プロジェクト ファイル]フォルダ配下のコンテンツを再帰的に取得してファイルを見つける
メタデータの一括取得
– Model Derivative API
オプション1 : HTTP エンドポイント
o SVF ファイルからプロパティを JSON 文字列として一括取得
メタデータの一括取得
– Model Derivative API
オプション2 : Sqlite データベース
o Model Derivative サービスは、すべてのプロパティメタデータを sqlite ファイルに保存します。
o マニフェストから mime タイプが application/autodesk-db に、role が
Autodesk.CloudPlatform.PropertyDatabase に設定さ れたアセットとして 見つけることができます。
メタデータの一括取得
– Model Derivative API
オプション3 : Viewer に最適化されたデータベース
o Forge Viewer では、モデルの属性情報は、パフォーマンスを維持するために、Sqlite データベースのテー ブル名にそれぞれ対応するよう分割された複数のアセットを使用します。
o それぞれのアセットは、JSON ファイルを圧縮した *.json.gz 形式となり、個別にダウンロードすることがで きます。
objects_ids.json.gz
• object ID (Forge Viewer で使用される "dbId")
• external ID (デザインファイルの形式によって異なる要素ID、Revit の場合は “GUID”)
objects_attrs.json.gz • プロパティ名、カテゴリ、タイプ、単位など objects_vals.json.gz • プロパティの値 https://forge.autodesk.com/blog/accessing-design-metadata-without-viewer
今回は、プロパティの値を検索対象とするため、
このアセットファイルを取得。
エンティティ
- 属性 - 値の構造
最新のデータに更新
Webhooks
Model
Derivative
Elastic
Search
AWS Elastic
Search
新しいバージョン
追加を検知
メタデータを
抽出
検索
リクエストボディ検索
"_source":[ "projectId", "folderUrn", "itemUrn", "versionUrn", "fileName" ], "query":{ "bool":{ "must":{ "match":{ “metadata.collection”: 検索文字列 } }, "filter":[ { "term":{ "hubId": Hub Id } } ] } } • 取得するフィールド • メタデータから検索文字列にマッチするか検索 • 検索結果から Hub Id が一致する結果にフィルタリング検索結果の表示
AWS Elastic
Search
検索結果
の取得
BIM 360 製品への
URL リンクを作成
BIM 360 リンク作成
Tips & Tricks
•
Rate-limit
•
インデックス作成中、インデックス済みファイルの場合に処理をスキップする際、
System.Threading.Thread.Sleep(1000); で、ElasticSearch の Rate-limit を回避。
•
バックグラウンド処理とキュー
•
Hangfire を使用して、非同期のファイル検索リクエストの再帰処理をバックグラ
ウンドジョブのキューで管理
•
Refresh-token (データベース)
What’s next?
•
Source code:
https://github.com/Autodesk-Forge/forge-bim360search
•
Support:
forge.help@autodesk.com
Autodesk およびオートデスクのロゴは、米国およびその他の国々における Autodesk, Inc. およびその子会社または関連会社の登録商標または商標です。その他のすべてのブランド名、製品名、または商標は、それぞ れの所有者に帰属します。オートデスクは、通知を行うことなくいつでも該当製品およびサービスの提供、機能および価格を変更する権利を留保し、本書中の誤植または図表の誤りについて責任を負いません。