This is the full developer documentation for Re:Earth Docs # Page not found ページが見つかりません。 / The page you’re looking for doesn’t exist. [English documentation](/en/) · [日本語ドキュメント](/ja/) # Re:Earth ドキュメント > Re:Earth の各プロダクトを学び、活用するための情報をまとめています。 # Re:Earth ドキュメント Re:Earth の各プロダクトを学び、活用するための情報をまとめています。 お手伝いできることはありますか? * [CMS をはじめる](/ja/tutorials/) * [API リファレンス](/ja/developer/plugin/api-reference/) * [プラグイン開発](/ja/developer/plugin/get-started/run-in-plugin-playground/) ## チュートリアル 手を動かしながら Re:Earth の使い方を学ぶためのチュートリアルを公開しています [一覧へ](/ja/tutorials/) ## 開発向けドキュメント プラグイン開発や API 連携など、Re:Earth を使った開発のためのドキュメント [一覧へ](/ja/developer/) ## プロダクトから探す * [ Re:Earth CMS ](/ja/cms/) * Re:Earth Visualizer 準備中 * Re:Earth Flow 準備中 * Re:Earth Dashboard 準備中 ## AI 向けドキュメント AI に渡すと、Re:Earth のドキュメントを効率よく読み込めます。 * [llms.txt サイト全体の目次 ](/llms.txt) * [llms-full.txt ドキュメント全文 ](/llms-full.txt) ## コミュニティ ご質問、ご提案、プロダクトに関するフィードバック、活用事例の共有はぜひコミュニティに投稿してください * [ Discord ドキュメントで解決しないことを質問できます ](https://discord.gg/XJhYkQQDAu) * [ GitHub ソースコードを読んだり、Issue や PR を投稿できます ](https://github.com/reearth) * [ X (Twitter) プロダクトの最新情報などを発信しています ](https://x.com/ReEarth_Eukarya) # はじめに > Re:Earth CMS でコンテンツを作成・管理する方向けのドキュメントです。API を使った開発は CMS Developer Docs をご覧ください。 はじめて Re:Earth CMS を学ぶ方へ 基本概念を読んでから始めることをおすすめします 準備中「Re:Earth CMSとはなにか」 ## 目的別 [Section titled “目的別”](#目的別) 手を動かして学ぶ [チュートリアルを始める ](/ja/tutorials/) 仕組みを理解する 準備中 特定の操作を学ぶ 準備中 詳細な仕様を調べる [リファレンスを開く ](/ja/cms/reference/modeling/field-types/) # アセット > アセット画面にアップロードしたファイルです。プレビュータイプと対応する形式、一覧の並び替えを説明します。 アセットは、**アセット**画面にアップロードしたファイルです。アップロードしたアセットは、[アイテムのフィールド型](/ja/cms/reference/modeling/field-types/)の「アセット」を通じてアイテムに紐づけられます。 ## アップロード [Section titled “アップロード”](#アップロード) アセットは、次の2つの方法でアップロードできます。 * **ローカル**:手元のファイルをアップロードする。 * **URL**:ファイルの URL を指定してアップロードする。 アップロードできるファイルの形式に制限はありません。 ## アセット情報 [Section titled “アセット情報”](#アセット情報) アセットの詳細画面の「アセット情報」には、次の項目が表示されます。 * ID * 作成日時 * 作成者 * サイズ ファイル名は、詳細画面のタイトルに表示されます。このアセットを参照しているアイテムは、「リンク先」に表示されます。 ## プレビュータイプ [Section titled “プレビュータイプ”](#プレビュータイプ) アセットを、どの形式としてプレビューするかを表す種類です。詳細画面では「アセットタイプ」、一覧では「プレビュータイプ」と表示されます。アセット1件につき、次の8種類から1つを設定します。種類ごとに対応する形式が決まっています。 | プレビュータイプ | プレビューできる拡張子 | | ----------------- | -------------------------- | | PNG/JPEG/TIFF/GIF | jpg・jpeg・png・gif・tiff・webp | | SVG | svg | | GEOJSON/KML/CZML | kml・czml・topojson・geojson | | 3Dタイル | json | | MVT | mvt | | GLTF/GLB | gltf・glb | | CSV | csv | | 不明タイプ | プレビューに対応しないファイル | 種類と拡張子が合っていないアセットは、プレビューされません。 zip・7z のアセットは、GEOJSON/KML/CZML・3Dタイル・MVT・GLTF/GLB のいずれかを選ぶとプレビューの対象になります。 アップロードのとき、プレビュータイプはファイルの種類と拡張子から自動で決まります。拡張子が json・zip・7z のファイルは自動で決まらず、「不明タイプ」になります。プレビュータイプは、詳細画面で後から変更できます。プレビュータイプの変更によって、ファイルの拡張子自体は変換されません。 ## 並び順 [Section titled “並び順”](#並び順) アセット一覧は、ファイル・サイズ・作成日時のいずれかで、昇順または降順に並び替えられます。 ## アーカイブの解凍 [Section titled “アーカイブの解凍”](#アーカイブの解凍) zip・7z の圧縮ファイルとしてアップロードしたアセットは、CMS 上で解凍できます。アップロードの際に自動で解凍するかどうかを選べ、デフォルトでは解凍が選ばれています。解凍しない設定でアップロードしたアセットは「スキップ済み」として登録されますが、後から手動で解凍できます。解凍の状態は、一覧の**ステータス**列に次のいずれかで表示されます。 | ステータス | 意味 | | ------ | --------- | | スキップ済み | 圧縮したままの状態 | | 保留中 | 解凍の待機中 | | 解凍中 | 解凍を実行中 | | 解凍完了 | 解凍が完了した状態 | | 失敗 | 解凍に失敗した状態 | # アイテムフィルター・並び替え > コンテンツ画面でアイテム一覧を絞り込む・並び替えるときに選べる条件の一覧です。フィールド型ごとに選べるフィルターの条件と、並び替えを説明します。 フィルターと並び替えは、**コンテンツ**画面のアイテム一覧に対して指定します。指定した内容は[ビュー](/ja/cms/reference/content/item-views/)として保存できます。 ## フィルターの条件 [Section titled “フィルターの条件”](#フィルターの条件) フィルターは、対象のフィールドと条件(演算子)を選んで指定します。条件には、値の入力が必要なものと、必要のないものがあります。フィルターは複数指定でき、すべてのフィルターを満たすアイテムが表示されます。選べる条件は、絞り込む対象の[アイテムのフィールド型](/ja/cms/reference/modeling/field-types/)によって決まります。 | フィールド型 | 選べる条件 | | ---------------------------- | ---------------------------------- | | テキスト・テキストエリア・マークダウン・アセット・URL | 同値・異なる・含む・含まない・始まる・始まらない・終わる・終わらない | | 整数型・浮動小数点数 | 同値・異なる・超える・以上・未満・以下 | | 日付 | 同値・異なる・後・以降・前・以前・今週・今月・今年 | | ブーリアン・チェックボックス | 同値・異なる | | 選択肢・タグ | 同値・異なる | * 上記のフィールド型で、フィールドが任意のとき、「空である」「空でない」も選べます。 * 「空である」「空でない」「今週」「今月」「今年」は、値の入力が必要ありません。 * ジオメトリオブジェクト・ジオメトリエディタは、任意のフィールドで「空である」「空でない」だけを選べます。 * 参照・グループ、および複数値を設定したフィールドは、絞り込みの対象になりません。 * 絞り込みの対象になるのは、アイテムのフィールドと、[メタデータ](/ja/cms/reference/modeling/metadata/)のフィールドです。ステータス・作成日時・作成者・更新日時・更新者の列は、絞り込みの対象になりません。 ## 並び替え [Section titled “並び替え”](#並び替え) 一覧を、選んだ列を基準に**昇順**または**降順**で並び替えます。フィールドのほか、作成日時・作成者・更新日時・更新者でも並び替えられます。ステータスでは並び替えられません。 # ビュー > アイテム一覧の並び替え・フィルター・表示する列をまとめて保存したものです。ビューの構成要素と、モデルごとに複数作れる仕組みを説明します。 ビューは、**コンテンツ**画面で、[アイテム](/ja/cms/reference/content/items/)一覧の見せ方を保存したものです。並び替え・フィルター・表示する列の設定に名前を付けて保存し、[モデル](/ja/cms/reference/modeling/models/)ごとに複数のビューを作って切り替えられます。作ったビューはモデルの設定として保存され、プロジェクトのメンバーが共通して使います。一覧の並び替え・フィルター・表示する列の変更を固定するには、ビューを保存する必要があります。 ## ビューの構成 [Section titled “ビューの構成”](#ビューの構成) ビューは次の項目で構成されます。並び替えとフィルターで指定できる条件の詳細は、[アイテムフィルター・並び替え](/ja/cms/reference/content/item-filter-sort/)を参照してください。 | 項目 | 内容 | | ----- | ---------------------- | | 名前 | ビューを識別する名前 | | 並び替え | 一覧を並べる基準と、昇順・降順 | | フィルター | 一覧に表示するアイテムを絞り込む条件 | | 表示する列 | 一覧に表示する列と、その表示・非表示・並び順 | ## ビューの変更と削除 [Section titled “ビューの変更と削除”](#ビューの変更と削除) ビューは、名前の変更と、一覧での並び順の変更ができます。削除できるのは、同じモデルにビューが2件以上あるときだけです。ビューを削除しても、一覧に表示されていたアイテムは削除されません。 # アイテム > モデルに登録する1件ごとのデータです。ドラフト・公開・レビューなど、アイテムがとる5つのステータスを説明します。 アイテムは、[モデル](/ja/cms/reference/modeling/models/)に登録する1件ごとのデータです。**コンテンツ**画面でモデルごとに登録し、モデルが持つスキーマで定めたフィールドに沿って値を入力します。ドラフトや公開などのステータスを持ちます。 ## ステータス・公開ステータス [Section titled “ステータス・公開ステータス”](#ステータス公開ステータス) アイテムのステータスは、公開されているかどうかと、最新の変更がどの段階にあるかで決まります。まだ公開していないアイテムは「ドラフト」または「レビュー」、公開済みのアイテムは「公開済み」と表示され、公開後に変更を加えると「公開済み & ドラフト」または「公開済み & レビュー」になります。 | ステータス | 意味 | | ----------- | --------------------------- | | ドラフト | まだ公開しておらず、下書きの状態 | | レビュー | まだ公開しておらず、レビューを申請している状態 | | 公開済み | 公開されている状態 | | 公開済み & ドラフト | 公開したあと、まだ公開していない下書きの変更がある状態 | | 公開済み & レビュー | 公開したあと、加えた変更をレビューに申請している状態 | ## 非公開にしたときのステータス [Section titled “非公開にしたときのステータス”](#非公開にしたときのステータス) 公開済みのアイテムを非公開にすると、ステータスから「公開済み」が外れます。レビュー待ちのリクエストに入っているアイテムは「レビュー」になり、入っていないアイテムは「ドラフト」になります。 ## 自動で記録される項目 [Section titled “自動で記録される項目”](#自動で記録される項目) アイテムには、フィールドの値とステータスのほかに、次の項目が自動で記録され、一覧に表示されます。 * 作成日時 * 作成者 * 更新日時 * 更新者 ## バージョン履歴 [Section titled “バージョン履歴”](#バージョン履歴) アイテムは、編集して保存するたびにバージョンとして記録されます。各バージョンには、そのときのステータス・日時と、作成者または更新者が記録されます。過去のバージョンの内容を確認できます。復元すると、そのバージョンの値が編集中のフォームに入り、保存した時点で新しいバージョンとして記録されます。復元しても、元のバージョンはそのまま残ります。 復元で置き換わるのは、フィールドの値だけです。[メタデータ](/ja/cms/reference/modeling/metadata/)の値は、復元しても元のままです。今の内容と同じバージョンは復元しても保存できません。 バージョン履歴が表示されるのは、バージョンが1件以上あるアイテムです。 # フィールド属性 > フィールドに設定できる属性の一覧です。入力を必須にする設定やユニーク制約など、表示や入力値のルールと、それぞれ設定できるフィールド型を説明します。 フィールドに設定できる属性の一覧です。**スキーマ**画面でフィールドを作成・編集するときに設定します。属性は、フィールドの表示や、入力できる値のルールを決めます。作成・編集のダイアログは**設定**・**検証**・**デフォルト値**の3つのタブに分かれていて、属性ごとに、設定するタブと設定できるフィールド型が決まっています。 | 属性 | 何を決めるか | 設定するタブ | 設定できるフィールド型 | | --------------- | ------------------ | ---------- | ------------------------------------------------------------------------------------------- | | 表示名 | 画面でフィールドを示す名前 | **設定** | すべてのフィールド型 | | フィールドキー | フィールドを識別するキー | **設定** | すべてのフィールド型 | | 説明 | フィールドの用途の補足 | **設定** | すべてのフィールド型 | | 複数値の設定を許可 | 複数の値を格納できるかどうか | **設定** | テキスト・テキストエリア・マークダウン・整数型・浮動小数点数・ブーリアン・チェックボックス・選択肢・タグ・日付・URL・アセット・グループ・ジオメトリオブジェクト・ジオメトリエディタ | | このフィールドを必須項目にする | 空のまま保存できるかどうか | **検証** | テキスト・テキストエリア・マークダウン・整数型・浮動小数点数・選択肢・タグ・日付・URL・アセット・参照・ジオメトリオブジェクト・ジオメトリエディタ | | ユニーク制約 | 同じ値を重複して持てるかどうか | **検証** | テキスト・テキストエリア・マークダウン・整数型・浮動小数点数・選択肢・タグ・日付・URL・アセット・参照・ジオメトリオブジェクト・ジオメトリエディタ | | タイトルとして使用 | アイテムのタイトルに使うかどうか | **設定** | テキスト・テキストエリア・マークダウン | | 最大長 | 入力できる文字数の上限 | **検証** | テキスト・テキストエリア・マークダウン | | 最小値 | 入力できる数値の下限 | **検証** | 整数型・浮動小数点数 | | 最大値 | 入力できる数値の上限 | **検証** | 整数型・浮動小数点数 | | デフォルト値を設定 | アイテム作成時にあらかじめ入る初期値 | **デフォルト値** | テキスト・テキストエリア・マークダウン・整数型・浮動小数点数・ブーリアン・チェックボックス・選択肢・タグ・日付・URL・アセット・ジオメトリオブジェクト・ジオメトリエディタ | タグ・チェックボックスは、メタデータで使えるフィールド型です。詳しくは [メタデータ](/ja/cms/reference/modeling/metadata/) を参照してください。 ## 表示名 [Section titled “表示名”](#表示名) フィールドの表示名です。画面や一覧でフィールドを示すときに使われます。必須です。 ## フィールドキー [Section titled “フィールドキー”](#フィールドキー) フィールドを識別するキーです。1〜32文字で、同じスキーマ内で一意である必要があります。使える文字は半角英数字、アンダースコア、ダッシュです。 ## 説明 [Section titled “説明”](#説明) フィールドの説明です。フィールドの用途を補足するために設定します。最大1000文字です。 ## 複数値の設定を許可 [Section titled “複数値の設定を許可”](#複数値の設定を許可) 1つの値ではなく、複数の値をリスト形式で格納できるようにする属性です。 ## このフィールドを必須項目にする [Section titled “このフィールドを必須項目にする”](#このフィールドを必須項目にする) この属性を設定すると、値が空のままではアイテムを保存できません。 ## ユニーク制約 [Section titled “ユニーク制約”](#ユニーク制約) 同じ値を持つアイテムを複数は作れないようにする属性です。1つの値は、そのフィールドで1件のアイテムにしか使えません。参照のフィールドでは、一方向の参照のときに設定できます。双方向の参照のときは設定できません。 ## タイトルとして使用 [Section titled “タイトルとして使用”](#タイトルとして使用) そのフィールドをアイテムのタイトルとして使う属性です。タイトルとして使用できるフィールドは、1つのスキーマにつき1つだけです。アイテムのフィールドと、[グループ](/ja/cms/reference/modeling/groups/)のフィールドで、それぞれ1つ設定できます。[メタデータ](/ja/cms/reference/modeling/metadata/)のフィールドには設定できません。 ## 最大長 [Section titled “最大長”](#最大長) 入力できる文字数の上限です。1以上の値を設定します。 ## 最小値 [Section titled “最小値”](#最小値) 入力できる数値の下限です。最小値は最大値以下にします。 ## 最大値 [Section titled “最大値”](#最大値) 入力できる数値の上限です。最大値は最小値以上にします。 ## デフォルト値を設定 [Section titled “デフォルト値を設定”](#デフォルト値を設定) アイテムを作成したときに、あらかじめ入る初期値です。 # アイテムのフィールド型 > アイテムのフィールドに設定できるフィールド型の一覧です。テキスト・数値・日付・位置情報など、各フィールド型が何を入れる欄かを説明します。 [アイテム](/ja/cms/reference/content/items/)のフィールドに設定できるフィールド型の一覧です。フィールドとは、アイテムの値を入れる入力欄です。フィールド型は、そのフィールドに入れられるデータを決めます。**スキーマ**画面でフィールドを作成するとき、次のフィールド型から1つを選びます。グループとメタデータで使えるフィールド型は、[グループ](/ja/cms/reference/modeling/groups/)と[メタデータ](/ja/cms/reference/modeling/metadata/)を参照してください。 | フィールド型 | 何を入れる欄か | | ----------- | ------------------ | | テキスト | 1行のテキスト | | テキストエリア | 複数行のテキスト | | マークダウン | マークダウン記法に対応したテキスト | | 整数型 | 整数 | | 浮動小数点数 | 小数を含む数値 | | ブーリアン | 真(true)/偽(false)の値 | | 選択肢 | あらかじめ用意した選択肢からの選択 | | 日付 | 日付 | | URL | http・https の URL | | アセット | アップロードしたファイル | | 参照 | 選んだモデルのアイテムへの参照 | | グループ | 定義済みのグループ | | ジオメトリオブジェクト | GeoJSON 形式のジオメトリ | | ジオメトリエディタ | 地図上で描いたジオメトリ | ## テキスト [Section titled “テキスト”](#テキスト) 1行のテキストを入れる欄です。見出しやタイトルなど、短い文字列を格納します。 ## テキストエリア [Section titled “テキストエリア”](#テキストエリア) 複数行のテキストを入れる欄です。段落のある長めの文章を格納します。 ## マークダウン [Section titled “マークダウン”](#マークダウン) マークダウン記法に対応したテキストを入れる欄です。見出しや強調などの書式を含む文章を格納します。 ## 整数型 [Section titled “整数型”](#整数型) 整数を入れる欄です。小数を含まない数値を格納します。 ## 浮動小数点数 [Section titled “浮動小数点数”](#浮動小数点数) 小数を含む数値を入れる欄です。小数点以下のある数値と、整数のどちらも入れられます。 ## ブーリアン [Section titled “ブーリアン”](#ブーリアン) 真(true)または偽(false)のどちらかを入れる欄です。スイッチのオン/オフで入力します。 ## 選択肢 [Section titled “選択肢”](#選択肢) あらかじめ用意した選択肢から1つ選ぶ欄です。[フィールド属性](/ja/cms/reference/modeling/field-attributes/)の「複数値の設定を許可」を設定すると、複数選べます。選択肢はフィールドの作成時に登録し、1つ以上が必要です。同じ値の選択肢は登録できません。 ## 日付 [Section titled “日付”](#日付) 日付を入れる欄です。日付を格納します。 ## URL [Section titled “URL”](#url) URL を入れる欄です。`http://` または `https://` で始まる URL を受け付けます。ホストは、`.com` などのトップレベルドメインを持つドメイン名か、公開 IP アドレスである必要があります。`localhost` やプライベート IP アドレス(`192.168.x.x`・`127.x.x.x` など)は受け付けません。 ## アセット [Section titled “アセット”](#アセット) アップロードしたファイルを紐づける欄です。画像や書類などのファイルを格納します。 ## 参照 [Section titled “参照”](#参照) 選んだモデルのアイテムを参照する欄です。モデルとモデルの間の関連づけに使います。フィールドの作成時に、参照するモデルを1つ選び、参照方向を次の2つから1つ選びます。参照するモデルには、別のモデルと、このフィールドを持つモデル自身のどちらも選べます。 * 一方向の参照:片方のアイテムからもう片方を参照します。 * 双方向の参照:2つのアイテムが互いに参照し合います。 参照するモデルと参照方向は、フィールドを作成するときだけ決められます。作成した後は変更できません。変えるには、フィールドを削除して作り直します。 ## グループ [Section titled “グループ”](#グループ) 定義済みの[グループ](/ja/cms/reference/modeling/groups/)を入れる欄です。複数のフィールドをまとめたグループを、フィールドとして再利用します。 ## ジオメトリオブジェクト [Section titled “ジオメトリオブジェクト”](#ジオメトリオブジェクト) GeoJSON 形式でジオメトリを入力する欄です。入力した内容はプレビューできます。このフィールドの対応タイプは、フィールドの作成時に次の7種類から選びます。複数選べます。 * Point * Linestring * Polygon * GeometryCollection * MultiPoint * MultiLinestring * MultiPolygon ## ジオメトリエディタ [Section titled “ジオメトリエディタ”](#ジオメトリエディタ) 地図上に描いてジオメトリを入力する欄です。このフィールドの対応タイプは、フィールドの作成時に次の4つから1つ選びます。 * Point * Linestring * Polygon * Any:Point・Linestring・Polygon(Polygon は円・矩形でも描けます) # グループ > 複数のフィールドをひとまとめにして、複数のモデルで再利用するための仕組みです。グループ名・グループキー・グループ概要の設定を説明します。 グループは、複数のフィールドをひとまとめにして、複数の[モデル](/ja/cms/reference/modeling/models/)で再利用するための仕組みです。**スキーマ**画面で作成し、グループごとにフィールドを定義します。[アイテムのフィールド型](/ja/cms/reference/modeling/field-types/)の「グループ」を通じて、モデルのフィールドとして組み込みます。モデルはグループのフィールドを複製せず参照するため、グループのフィールドを変更すると、そのグループを使っているすべてのモデルに反映されます。 ## グループ名 [Section titled “グループ名”](#グループ名) グループの表示名です。作成時に必ず設定します。 ## グループキー [Section titled “グループキー”](#グループキー) グループを識別するキーです。3〜32文字で、プロジェクト内で一意である必要があります。使える文字は半角英数字、アンダースコア、ダッシュです。 ## グループ概要 [Section titled “グループ概要”](#グループ概要) グループの説明です。グループの用途を補足するために設定します。 ## 設定できるフィールド型 [Section titled “設定できるフィールド型”](#設定できるフィールド型) グループには、次のフィールド型を設定できます。各フィールド型の説明は[アイテムのフィールド型](/ja/cms/reference/modeling/field-types/)を参照してください。 * テキスト * テキストエリア * マークダウン * 整数型 * 浮動小数点数 * ブーリアン * 選択肢 * 日付 * URL * アセット * ジオメトリオブジェクト * ジオメトリエディタ 「参照」と「グループ」のフィールド型は、グループには設定できません。 ## グループの複数値 [Section titled “グループの複数値”](#グループの複数値) グループのフィールドに[フィールド属性](/ja/cms/reference/modeling/field-attributes/)の「複数値の設定を許可」を設定すると、1つのアイテムに同じグループの組を複数持たせられます。これは、グループの中の個々のフィールドに同じ属性を設定するのとは別の設定です。 ## グループの削除 [Section titled “グループの削除”](#グループの削除) モデルのフィールドで使われているグループは削除できません。削除するには、先にそのグループを使っているモデルのフィールドを削除します。 # メタデータ > アイテムのフィールドとは別に、アイテムを管理するための情報を持たせる項目です。メタデータタブに表示される項目、使えるフィールド型、アイテムごとの値の持ち方を説明します。 メタデータは、[アイテム](/ja/cms/reference/content/items/)のフィールドとは別に、アイテムを管理するための情報を持たせる項目です。持たせる項目は、[モデル](/ja/cms/reference/modeling/models/)ごとに**スキーマ**画面の**メタデータ**タブで定義します。定義した項目の値は、アイテムごとに持ちます。 ## メタデータタブに表示される項目 [Section titled “メタデータタブに表示される項目”](#メタデータタブに表示される項目) **コンテンツ**画面でアイテムを開くと、**メタデータ**タブに次の3つが表示されます。 | 欄 | 項目 | 値 | | --------- | ----------------------------------- | -------------------------- | | アイテムの情報 | システムの項目(ID・作成日時・作成者・更新日時・更新者) | システムで自動で付与される | | 公開ステータス | システムの項目 | ユーザーがアイテムを公開・非公開にすると変わる | | カスタムメタデータ | **スキーマ**画面の**メタデータ**タブでモデルごとに定義する項目 | ユーザーがアイテムの**メタデータ**タブで入力する | 定義した項目が1つも無いモデルでは、「カスタムメタデータ」の欄は表示されません。 ## メタデータに使えるフィールド型 [Section titled “メタデータに使えるフィールド型”](#メタデータに使えるフィールド型) メタデータのフィールドを作成するとき、次の6つのフィールド型から1つを選びます。 | フィールド型 | 何を入れる欄か | | -------- | -------------------------------- | | タグ | あらかじめ用意したタグからの選択 | | ブーリアン | 真(true)/偽(false)の値。スイッチで入力する | | チェックボックス | 真(true)/偽(false)の値。チェックボックスで入力する | | 日付 | 日付 | | テキスト | 1行のテキスト | | URL | http/https の URL | ### タグ [Section titled “タグ”](#タグ) あらかじめ用意したタグのリストから1つ選ぶ欄です。[フィールド属性](/ja/cms/reference/modeling/field-attributes/)の「複数値の設定を許可」を設定すると、複数選べます。タグは1つにつき1色を持ち、色は次の11色から選びます。 * magenta * red * volcano * orange * gold * lime * green * cyan * blue * geekblue * purple ### ブーリアン [Section titled “ブーリアン”](#ブーリアン) 真(true)または偽(false)のどちらかを入れる欄です。スイッチのオン/オフで入力します。 ### チェックボックス [Section titled “チェックボックス”](#チェックボックス) 真(true)または偽(false)のどちらかを入れる欄です。チェックボックスのオン/オフで入力します。ブーリアンと同じ真偽値を入れる欄で、入力に使う部品が異なります。 ### 日付 [Section titled “日付”](#日付) 日付を入れる欄です。日付を格納します。 ### テキスト [Section titled “テキスト”](#テキスト) 1行のテキストを入れる欄です。見出しやタイトルなど、短い文字列を格納します。 ### URL [Section titled “URL”](#url) http または https の URL を入れる欄です。 ## フィールドに設定できる属性 [Section titled “フィールドに設定できる属性”](#フィールドに設定できる属性) メタデータのフィールドにも、通常のフィールドと同じ[フィールド属性](/ja/cms/reference/modeling/field-attributes/)を設定できます。どのフィールド型にどの属性を設定できるかは、[フィールド属性](/ja/cms/reference/modeling/field-attributes/) のフィールド型ごとの対応に従います。ただし、タイトルとして使用は設定できません。 ## 値の保存 [Section titled “値の保存”](#値の保存) 既存のアイテムでメタデータの値を変えると、自動的に保存されます。新しいアイテムを作るときは、メタデータの値もアイテムと同時に保存されます。アイテムのフィールドは手動で保存します。 # モデル > アイテムをまとめて管理するモデルについて、モデル名・モデルキー・モデル概要の設定を説明します。 モデルは、[アイテム](/ja/cms/reference/content/items/)をまとめて管理する箱のようなものです。**モデル**画面で作り、名前とキーを付けます。モデルに入るアイテムの値は、設定したフィールドとメタデータのフィールドによるスキーマで定義されます。 ## モデル名 [Section titled “モデル名”](#モデル名) モデルの表示名です。モデルの作成時に必須です。 ## モデルキー [Section titled “モデルキー”](#モデルキー) モデルを識別するキーです。3〜32文字で、プロジェクト内で一意である必要があります。使える文字は半角英数字、アンダースコア、ダッシュです。キー全体が `id`・`assets`・`schemas`・`models`・`items` のいずれかと一致する場合は使えません。これらの語を含む `item_list` のようなキーは使えます。 ## モデル概要 [Section titled “モデル概要”](#モデル概要) モデルの説明です。モデルの用途を補足するために設定します。 ## 並び順 [Section titled “並び順”](#並び順) モデル一覧は、最終更新日時・作成日時・名前のいずれかで並び替えられます。 # コメント > アイテム・アセット・リクエストに対して、メンバー同士がやり取りするための書き込みです。コメントを付けられる対象と、コメントが持つ項目を説明します。 コメントは、[アイテム](/ja/cms/reference/content/items/)・[アセット](/ja/cms/reference/content/assets/)・[リクエスト](/ja/cms/reference/operations/requests/)に対して、メンバー同士がやり取りするための書き込みです。それぞれ **コンテンツ**・**アセット**・**リクエスト** の各画面で、一覧・詳細のどちらからも表示・投稿できます。 ## コメントが持つ項目 [Section titled “コメントが持つ項目”](#コメントが持つ項目) | 項目 | 内容 | | ---- | ----------------------------------------------------------------------------------------- | | 投稿者 | コメントを書いたユーザー。Integration API から作成したコメントには、連携したインテグレーションの名前が表示されます。自分が書いたコメントには「(自分)」が付きます | | 本文 | コメントの内容。Markdown 記法で書けます | | 投稿日時 | コメントを投稿した日時 | ## 作成・編集・削除 [Section titled “作成・編集・削除”](#作成編集削除) メンバーは、コメントを作成・編集・削除できます。できる範囲は役割によって決まり、編集者は自分が作成したコメントを編集・削除できます。詳しくは [役割と権限](/ja/cms/reference/publish-permissions/roles/) を参照してください。 アイテムとアセットのコメントは、Integration API から取得・作成・編集・削除できます。リクエストのコメントは、API では扱えません。詳しくは [CMS Developer Docs](/ja/developer/cms/overview/) を参照してください。 # インポート・エクスポート > モデルのデータやスキーマ定義を、ファイルで取り込む(インポート)・書き出す(エクスポート)機能です。対応する形式、上限、形式ごとの制約を説明します。 インポート・エクスポートは、[モデル](/ja/cms/reference/modeling/models/)のアイテムのデータやスキーマ定義を、ファイルで取り込む・書き出す機能です。 ## インポート [Section titled “インポート”](#インポート) 実験的な機能 インポートは実験的な機能で、動作が不安定な場合があります。 インポートには、コンテンツのインポートとスキーマのインポートの2種類があります。 ### コンテンツのインポート [Section titled “コンテンツのインポート”](#コンテンツのインポート) **コンテンツ** 画面から、モデルにアイテムを一括でインポートします。画面からのインポートは、既存のアイテムを更新せず、新しいアイテムとして追加するだけです。 ファイルは JSON・CSV・GeoJSON のいずれかで、次の共通ルールがあります。 * ファイルの列名・キー名は、フィールドの表示名ではなく、フィールドキーと一致させます。 * モデルのスキーマに無い列・キーは、インポート時に無視されます。ファイルに無いフィールドは、デフォルト値があればその値が入ります。 * 1回にインポートできるのは、最大 50,000 件・ファイルサイズ 100 MB までです。 * 形式に合わない値が1件でもあると、インポート全体が行われません。エラーの内容はログとしてダウンロードできます。 * インポート中は進捗が表示され、途中で中止できます。失敗したインポートは再試行できます。 各フィールド型の値は、次のデータ型で記述します。 | フィールド型 | データ型 | | --------------------- | -------------------------------------------------------------------------------------------------------- | | テキスト/テキストエリア/マークダウン | 文字列 | | 整数型/浮動小数点数 | 数値 | | ブーリアン | 真偽値。`true` または `false` | | 日付 | 文字列。RFC3339 形式。例 `2025-12-01T00:00:00+09:00` | | 選択肢 | 文字列。選択肢の値 | | URL | 文字列。http または https の URL | | アセット | 文字列。アセットの ID | | ジオメトリオブジェクト/ジオメトリエディタ | オブジェクト。GeoJSON のジオメトリ。例 `{"type":"Point","coordinates":[139.69,35.69]}`。JSON・GeoJSON でのみ指定でき、CSV では扱えません | | 複数値のフィールド | 配列。JSON・GeoJSON で指定でき、CSV では扱えません | 参照・グループのフィールドは、インポートの対象外です。 形式ごとの構造は次のとおりです。 * **CSV**:1行目がヘッダー行で、各列がフィールドキーです。1列目に `id` 列を置けますが、画面からのインポートでは新規追加のため使われません。単純なフィールド向けで、ジオメトリ・複数値は扱えません。 * **JSON**:アイテムのオブジェクトを並べた配列です。各オブジェクトのキーがフィールドキーです。 * **GeoJSON**:FeatureCollection です。各 Feature の geometry は、モデルのジオメトリフィールドに入ります。ジオメトリフィールドが複数ある場合は、最初の1つが使われます。properties の各キーは、フィールドキーになります。 各形式のファイルテンプレートは、インポートの画面からダウンロードできます。 ### スキーマのインポート [Section titled “スキーマのインポート”](#スキーマのインポート) **スキーマ** 画面から、モデルのスキーマを JSON でインポートします。インポートできるのは、モデルの空のスキーマだけです。グループとメタデータはインポートの対象になりません。 インポートする JSON は JSON Schema 形式で、`properties` の下に各フィールドを並べます。`properties` の下のプロパティ名が、フィールドキーになります。各フィールドには、画面に表示される名前を表す `title` と、フィールド型を表す `x-fieldType` が必要です。フィールド型に応じて、次の項目も指定します。 * `x-required`:必須にするか * `x-multiple`:複数値にするか * `x-unique`:ユニーク制約をかけるか * `maxLength`:最大長 * `x-options`:選択肢 * `maximum`/`minimum`:最小値・最大値 * `x-defaultValue`:デフォルト値 ファイルテンプレートは、インポートの画面からダウンロードできます。 ## エクスポート [Section titled “エクスポート”](#エクスポート) エクスポートは、選んだ時点でファイルがダウンロードされます。エクスポートには、コンテンツのエクスポートとスキーマ定義のエクスポートの2種類があります。 ### コンテンツのエクスポート [Section titled “コンテンツのエクスポート”](#コンテンツのエクスポート) **コンテンツ** 画面から、モデルのアイテムを書き出します。エクスポートする形式を、JSON・CSV・GeoJSON から選びます。アイテムが1件もないモデルはエクスポートできません。 エクスポートされるのは公開済みのアイテムだけです。ステータスが「ドラフト」「レビュー」のアイテムは、一覧に並んでいてもファイルに入りません。「公開済み & ドラフト」「公開済み & レビュー」のアイテムは、公開済みの内容が書き出されます。 ファイル名は、モデル名ではなくモデルの ID を使った `〈モデルのID〉-data.json`・`-data.csv`・`-data.geojson` になります。 * **JSON**:すべてのフィールドを書き出します。各アイテムには、フィールドの値に加えて、ID・作成日時・更新日時・作成者・更新者が付きます。 * **CSV**:1列目が ID、以降がフィールドキーの列です。エクスポートされるのは、テキスト・テキストエリア・マークダウン・選択肢・タグ・URL・整数型・浮動小数点数・ブーリアン・チェックボックス・日付といった、単一値の単純なフィールドです。複数値のフィールド・アセット・参照・グループ・ジオメトリは含まれません。 * **GeoJSON**:ジオメトリフィールドを持つモデルだけで選べます。FeatureCollection として書き出され、各 Feature の geometry にジオメトリフィールド、properties にそれ以外のフィールドが入ります。ジオメトリフィールドが複数ある場合は、最初の1つが使われます。 ### スキーマのエクスポート [Section titled “スキーマのエクスポート”](#スキーマのエクスポート) **スキーマ** 画面から、モデルのスキーマ定義を JSON で書き出します。形式は、スキーマのインポートと同じ JSON Schema 形式で、`x-fieldType` などを含みます。フィールドが1つもないモデルはエクスポートできません。ファイル名は `〈モデルのID〉-schema.json` になります。 ## API からのインポート・エクスポート [Section titled “API からのインポート・エクスポート”](#api-からのインポートエクスポート) モデルのデータのインポート・エクスポートは、API からも行えます。詳しくは [CMS Developer Docs](/ja/developer/cms/overview/) を参照してください。 # リクエスト > アイテムの変更を公開する前に、レビュー・承認を経て反映する仕組みです。リクエストがとる4つのステータス、持つ項目、公開との関係を説明します。 リクエストは、[アイテム](/ja/cms/reference/content/items/)の変更を公開する前に、レビュー・承認を経て反映する仕組みです。**コンテンツ**画面でアイテムからリクエストを作成し、左メニューの **リクエスト** 画面で一覧・確認します。 ## ステータス [Section titled “ステータス”](#ステータス) リクエストは、次の4つのステータスのいずれかを持ちます。 | ステータス | 意味 | | ------ | -------------------------- | | ドラフト | 下書きの状態 | | レビュー待ち | レビュアーの承認を待っている状態 | | 承認済み | レビュアーに承認され、対象のアイテムが公開された状態 | | クローズ済み | 承認せずに閉じた状態。再開できる | リクエストは、作成した時点で「レビュー待ち」になります。「ドラフト」は作成時に選べません。 ## リクエストが持つ項目 [Section titled “リクエストが持つ項目”](#リクエストが持つ項目) | 項目 | 内容 | | ------- | ------------------------------------------------------------------- | | タイトル | リクエストを識別する名前。必須 | | 説明 | リクエストの内容の説明 | | レビュアー | 承認を行う担当者。1人以上を指定する | | 対象のアイテム | このリクエストに含めるアイテムと、そのバージョン。リクエストを作った後にアイテムを編集しても、その変更は既存のリクエストには入りません | | 状態 | 上記のいずれか | | 作成者 | リクエストを作成した人 | | 作成日時 | 作成された日時 | ## 一覧に表示される項目 [Section titled “一覧に表示される項目”](#一覧に表示される項目) **リクエスト** 画面の一覧には、次の8列が表示されます。 * 見出しなしの列:詳細画面を開くアイコン * コメント数(見出しはメッセージのアイコン) * タイトル * 状態 * 作成者 * レビュアー * 作成日時 * 更新日時 一覧を開いた時点では、状態が「レビュー待ち」でフィルターされています。一覧は、状態、作成者、レビュアーでフィルターできます。作成者とレビュアーは、自分に絞るか、すべてを表示するかを選べます。 ## レビューと承認 [Section titled “レビューと承認”](#レビューと承認) リクエストに対して、レビュアーは次のことを行えます。 * 承認:リクエストを承認します。承認すると、対象のアイテムが公開されます。 * クローズ:リクエストを閉じて終了します。クローズしたリクエストは再開できます。 リクエストを承認できるのは、承認の権限を持つ役割のユーザーのうち、そのリクエストのレビュアーに指名されている人です。クローズと再開は、承認とは別の権限で決まります。役割ごとの可否は [役割と権限](/ja/cms/reference/publish-permissions/roles/) を参照してください。 ## 公開との関係 [Section titled “公開との関係”](#公開との関係) アイテムを公開するとき、リクエストを経由するかどうかは、[プロジェクト](/ja/cms/reference/publish-permissions/project/)の設定「リクエストの要否」で決まります。 * リクエストが必須の役割のユーザーは、アイテムを直接公開せず、リクエストを作成してレビューに回します。 * リクエストが不要な役割のユーザーは、公開の権限があればアイテムを直接公開できます。公開の権限がなければ、リクエストが不要でもアイテムを公開できません。 アイテムのステータスが「レビュー」または「公開済み & レビュー」のとき、そのアイテムは公開したり、新しいリクエストを作成したりできません。リクエストが承認された時点で、対象のアイテムが公開されます。 ## コメント [Section titled “コメント”](#コメント) リクエストには、コメントを付けてやり取りできます。詳しくは [コメント](/ja/cms/reference/operations/comments/) を参照してください。 # プロジェクト > モデル・アイテム・アセットをまとめて管理する単位です。名前・エイリアス・説明・公開範囲・リクエストの要否など、プロジェクト自体に設定できる項目を説明します。 プロジェクトは、モデル・アイテム・アセットをまとめて管理する単位です。1つのプロジェクトは、1つのワークスペースに属します。プロジェクト自体の情報は、左メニューの**設定**画面で設定します。 ## 名前 [Section titled “名前”](#名前) プロジェクトを識別する名前です。必須です。 ## エイリアス [Section titled “エイリアス”](#エイリアス) プロジェクトにアクセスするための識別子です。5〜32文字で指定します。使える文字は、小文字の英数字・ハイフン(-)・アンダースコア(\_)です。同じワークスペース内で、他のプロジェクトと重複しない値にします。 ## 説明 [Section titled “説明”](#説明) プロジェクトの説明を入れる欄です。 ## 公開範囲 [Section titled “公開範囲”](#公開範囲) 公開範囲は、プロジェクトを公開するか非公開にするかの設定で、「公開」または「非公開」のどちらかです。**設定**画面の重要操作で切り替えます。 * **公開**:プロジェクトがオープンデータとして公開されます。Re:Earth Dashboard の「エクスプローラー」に掲載され、ログインしていない人を含め、誰でもプロジェクトを検索・閲覧し、データをダウンロードできます。公開・ダウンロードの対象になるのは、ステータスが「公開」の[アイテム](/ja/cms/reference/content/items/)だけです。公開範囲と、アイテムのステータス(公開・ドラフトなど)は別の設定です。 * **非公開**:プロジェクトはオープンデータとして公開されません。特定のモデル・アセットだけを配信するには、[パブリックAPI設定](/ja/cms/reference/publish-permissions/public-api-settings/)で許可します。非公開に設定できるのは、有料プランのみです。Open & Public プランでは、非公開に設定できません。 エクスプローラーでの掲載・ダウンロードは、Re:Earth Dashboard の画面で行います。詳しくは Dashboard のドキュメント(準備中)を参照してください。 ## リクエストの要否 [Section titled “リクエストの要否”](#リクエストの要否) 役割ごとに、変更を反映する前にリクエストを必須にするかどうかを設定します。所有者・管理者・編集者について設定でき、閲覧者は設定の対象外です。ここで設定した内容は、プロジェクト内のすべてのモデルに適用されます。すでに作ってあるモデルも対象です。 レビューを経て公開する仕組みは、[リクエスト](/ja/cms/reference/operations/requests/)を参照してください。 ## README とライセンス [Section titled “README とライセンス”](#readme-とライセンス) プロジェクトには、説明文書の README と、利用条件を定めるライセンスを持たせられます。詳しくは [README・ライセンス](/ja/cms/reference/publish-permissions/readme-license/) を参照してください。 # パブリックAPI設定 > プロジェクトのアイテムとアセットを外部に配信するための画面です。読み取りタブのモデルごとの配信と APIキー、書き込みタブの許可済みオリジンとモデルごとの書き込みについて、画面が持つ設定項目を説明します。API の呼び出し方は開発者向けドキュメントに委ねます。 パブリックAPI設定は、プロジェクトのアイテムとアセットを外部に配信するための画面です。左メニューの **パブリックAPI** にあります。この画面は**読み取り**と**書き込み**の2つのタブで構成されます。 ## 読み取り [Section titled “読み取り”](#読み取り) モデルのデータを外部へ配信するための設定です。モデルごとの配信の切り替えと、APIキーの2つの欄があります。 ### モデルごとの配信 [Section titled “モデルごとの配信”](#モデルごとの配信) 表には、プロジェクトのモデルが並び、末尾に「アセット」の行が付きます。アセットの行は、プロジェクトのアセットをまとめて配信するかどうかの設定です。列は次のとおりです。 | 列 | 内容 | | ------- | ------------------------------------------------------------------------------------------------------- | | 有効 | そのモデル(またはアセット)を配信するかの切り替え。[プロジェクト](/ja/cms/reference/publish-permissions/project/)の公開範囲が「非公開」のときに表示されます | | モデル | モデルの名前 | | エンドポイント | 配信先の URL。URL の前に「GET」と表示されます | * プロジェクトの公開範囲が「公開」の場合は、すべてのモデルが配信の対象になります。切り替えの列は表示されません。 * プロジェクトの公開範囲が「非公開」の場合は、モデルごとに配信するかを選びます。 配信を有効にしたモデルは、エンドポイントを知っている人が誰でもデータを読み取れます。この状態のモデルは、APIキーの権限では制限できません。配信されるのは、ステータスが「公開済み」のアイテムだけです。 ### APIキー [Section titled “APIキー”](#apiキー) APIキーは、プロジェクトの公開範囲が「非公開」の場合に、配信する範囲を制御するためのものです。プロジェクトの公開範囲が「公開」の場合は使えません。 一覧には「名前」と「キー」が表示されます。各キーが持つ項目は次のとおりです。 | 項目 | 内容 | | ----- | ------------------------------ | | 名前 | キーを識別する名前 | | 説明 | キーの用途などの説明 | | APIキー | API リクエストに使う秘密のトークン文字列。再生成できます | | 権限 | このキーで配信を許可するモデル・アセット | ## 書き込み [Section titled “書き込み”](#書き込み) 外部から匿名でデータを送信できるようにする設定です。認証なしの送信を受け付けるため、送信元のサイトを限定します。送信を受け付けると、そのモデルに新しいアイテムがドラフトの状態で作られます。公開はされず、リクエストも作られません。この設定を変更できるのは、所有者と管理者です。 ### 許可済みオリジン [Section titled “許可済みオリジン”](#許可済みオリジン) 送信を受け付けるサイトの一覧です。オリジンとは、`https://example.com` のように、通信方式とドメイン名までで Web サイトを識別する単位です。その先のページのパスは含みません。 この一覧との照合を受けるのは、Origin ヘッダーが付いた API リクエストです。受け付けるのは、一覧に登録したオリジンからのものだけで、オリジンを1つも登録していないときはすべて拒否します。サーバー上のプログラムやコマンドラインのツールのように、Origin ヘッダーが付かない API リクエストは、照合を受けません。オリジンは複数登録でき、登録済みの件数が表示されます。「すべてクリア」で全件を削除できます。 入力するのは、通信方式(`http` または `https`)とドメイン名までです。必要ならポート番号も付けられます。ページのパスやクエリを含む URL(例:`https://example.com/form`)は登録できません。サブドメインが複数ある場合は、1件ずつ登録します。形式に合わない値を入れると「有効なオリジンを入力してください(例:`https://example.com`)」と表示されます。末尾のスラッシュは、登録時に取り除かれます。 ### モデルごとの書き込み [Section titled “モデルごとの書き込み”](#モデルごとの書き込み) 表には、プロジェクトのモデルが並びます。アセットは対象外です。列は次のとおりです。 | 列 | 内容 | | ------- | ----------------------------------------------- | | 有効 | そのモデルへの書き込みを受け付けるかの切り替え | | モデル | モデルの名前 | | エンドポイント | 送信先の URL。URL の前に「POST」と表示されます | | (見出しなし) | そのモデルへの API リクエストの例を cURL コマンドとしてコピーする「コピー」のボタン | 許可済みオリジンを1つも登録していない場合、この表は操作できません。 ## API の呼び出し方 [Section titled “API の呼び出し方”](#api-の呼び出し方) エンドポイントの構造・認証・リクエストの書き方など、実際の API の使い方は、[CMS Developer Docs](/ja/developer/cms/overview/) を参照してください。 # README・ライセンス > プロジェクトに持たせられる2つの文書です。プロジェクトの説明である README と、利用条件を定めるライセンスについて、記述に使う形式と、ライセンスで選べるテンプレートを説明します。 README とライセンスは、プロジェクトに持たせられる文書です。どちらも Markdown 形式で記述します。画面を開いたときは本文の表示だけで、編集に切り替えると、記述する **Edit** と表示を確認する **Preview** のタブが出ます。 ## README [Section titled “README”](#readme) README は、プロジェクトの内容を説明する文書です。左メニューの **README** 画面で記述します。 ## ライセンス [Section titled “ライセンス”](#ライセンス) ライセンスは、プロジェクトとそのデータを他者が利用・共有できる条件を伝える文書です。左メニューの **ライセンス** 画面で記述します。用意されたテンプレートから選ぶと、本文がそのテンプレートに差し替わります。ライセンスに書いた条件によって、プロジェクトの公開範囲や API のアクセスが変わることはありません。公開の範囲は、**設定**画面で切り替えます。 ### 選べるライセンステンプレート [Section titled “選べるライセンステンプレート”](#選べるライセンステンプレート) テンプレートは次の9種類で、この中から1つを選びます。 * Open Use of Data Agreement v1.0 * European Union Public License v1.2 * GNU Lesser General Public License v3.0 * GNU General Public License v3.0 * Apache License 2.0 * MIT License * Creative Commons Attribution-NonCommercial 4.0 International * Creative Commons Attribution-ShareAlike 4.0 International * Creative Commons Attribution 4.0 International # 役割と権限 > ワークスペースのメンバーに割り当てる役割と、各役割が Re:Earth CMS でできることを説明します。役割4種と、リソースごとにできる操作を扱います。 メンバーの招待、役割(権限)の割り当て、ワークスペースの管理は、全プロダクト共通の Re:Earth Dashboard で設定します。詳しくは Dashboard のドキュメント(準備中)を参照してください。 Dashboard で割り当てられた役割によって、そのメンバーが Re:Earth CMS でできることが決まります。役割は次の4種類です。 | 役割 | CMS でできることの概要 | | --- | ------------------------------------------------------------------------- | | 所有者 | CMS 内のすべての操作ができます。プロジェクトの作成・削除と APIキーの再生成は、所有者だけが行えます | | 管理者 | プロジェクト設定の変更と、モデル・スキーマ・アイテム・アセット・リクエストの操作ができます | | 編集者 | モデル・スキーマ・ビューを作成・編集・削除できます。アイテム・アセット・リクエスト・コメントは作成でき、編集・削除できるのは自身が作成したものです | | 閲覧者 | 閲覧のみできます | ## 役割ごとにできること [Section titled “役割ごとにできること”](#役割ごとにできること) 各役割が CMS 内でできる操作は次のとおりです。✓ はできる、✕ はできないことを表します。 | リソース | 操作 | 所有者・管理者 | 編集者 | 閲覧者 | | ----- | -------- | ------- | -------------- | --- | | モデル | 閲覧 | ✓ | ✓ | ✓ | | モデル | 作成・編集・削除 | ✓ | ✓ | ✕ | | スキーマ | 閲覧 | ✓ | ✓ | ✓ | | スキーマ | 作成・編集・削除 | ✓ | ✓ | ✕ | | アイテム | 閲覧 | ✓ | ✓ | ✓ | | アイテム | 作成 | ✓ | ✓ | ✕ | | アイテム | 編集・削除 | ✓ | 自身が作成したアイテムのみ | ✕ | | アイテム | 公開 | ✓ | ✓ | ✕ | | アセット | 閲覧 | ✓ | ✓ | ✓ | | アセット | 作成 | ✓ | ✓ | ✕ | | アセット | 編集・削除 | ✓ | 自身が作成したアセットのみ | ✕ | | ビュー | 閲覧 | ✓ | ✓ | ✓ | | ビュー | 作成・編集・削除 | ✓ | ✓ | ✕ | | リクエスト | 閲覧 | ✓ | ✓ | ✓ | | リクエスト | 作成 | ✓ | ✓ | ✕ | | リクエスト | 編集・クローズ | ✓ | 自身が作成したリクエストのみ | ✕ | | リクエスト | 承認 | ✓ | ✕ | ✕ | | コメント | 閲覧 | ✓ | ✓ | ✓ | | コメント | 作成 | ✓ | ✓ | ✕ | | コメント | 編集・削除 | ✓ | 自身が作成したコメントのみ | ✕ | 表の「公開」は基本の権限です。実際にアイテムを直接公開できるかは、プロジェクトの「リクエストの要否」に左右されます。リクエストが必須の役割では、公開の代わりにリクエストの作成になります。詳しくは [リクエスト](/ja/cms/reference/operations/requests/) を参照してください。 表の「承認」も基本の権限です。実際にリクエストを承認できるのは、そのリクエストのレビュアーに指名されている人です。 名前・エイリアスなどのプロジェクト設定を変更できるのは、所有者と管理者です。公開範囲の切り替えと、[パブリックAPI設定](/ja/cms/reference/publish-permissions/public-api-settings/)の書き込みの設定の変更も、所有者と管理者です。プロジェクトの作成・削除と、APIキーの再生成は、所有者だけが行えます。 # 地理空間アセットのプレビュー設定(タイル・地形) > CMS のアセットプレビューで、地図の背景に使うタイルと地形の設定です。登録できるタイル・地形の種類、既定の決まり方、独自に追加できる項目を説明します。 CMS で 3Dタイル・MVT・GeoJSON・CZML などの地理空間の[アセット](/ja/cms/reference/content/assets/)をプレビューするとき、地図に使うタイルと地形を、この設定で選びます。タイルは地図として表示される画像で、地形は地図の起伏を表す標高の面です。 この設定は、ワークスペースの左メニューにある **設定** 画面内にあります。プロジェクトを開いている間は、左メニューに表示されません。同じ左メニューにある **ワークスペース設定** とも、[プロジェクト](/ja/cms/reference/publish-permissions/project/)ごとにある **設定** とも、別の画面です。 ## タイル [Section titled “タイル”](#タイル) 地図の背景に使うタイルです。この設定は、使うタイルの一覧を持ちます。一覧には複数のタイルを登録でき、先頭のタイルが既定のタイルとして使われます。 一覧に登録する各タイルは、次の6種類のうち1つの種類を持ちます。 * Google Satellite * Google Road Map * OpenStreetMap * NASA Black Marble * 地理院地図 標準地図 * URL 種類が **URL** のタイルは、次の項目を自分で指定します。 * 名前 * URL:タイルの URL テンプレートです。`{z}`・`{x}`・`{y}` を含む形式で指定します。Web ページや画像の URL は、タイルとして表示されません * イメージURL:この選択肢に表示するアイコンの画像です ## 地形 [Section titled “地形”](#地形) 地図の起伏を表す標高の面です。地形は、使うかどうかを切り替えられます。使う場合、この設定は、使う地形の一覧を持ちます。一覧には複数の地形を登録でき、先頭の地形が既定の地形として使われます。 一覧に登録する各地形は、次の2種類のうち1つの種類を持ちます。 * Re:Earth Terrain * Cesium Ion 種類が **Cesium Ion** の地形は、次の項目を自分で指定します。 * 名前 * Terrain Cesium IonアセットID * Terrain Cesium Ion アクセストークン * 地形URL:この URL を入れた場合は、ここから地形を読み込みます。空にした場合は、Terrain Cesium IonアセットIDとアクセストークンから読み込みます * イメージURL:この選択肢に表示するアイコンの画像です # 更新情報 — CMS > Re:Earth CMS のドキュメント更新履歴(新しい順)。 * **2026年8月24日** — [リファレンス](/ja/cms/reference/modeling/field-types/):リファレンス記事を公開しました。 # Re:Earth Dashboard ドキュメント > Re:Earth Dashboard のドキュメントは現在準備中です。 このドキュメントは現在準備中です。公開をお待ちください。 # 開発向けドキュメント > プラグイン開発や API 連携など、Re:Earth を使った開発のためのドキュメント プラグイン開発や API 連携など、Re:Earth を使った開発のためのドキュメント ### [Visualizer Plugin Docs](/ja/developer/plugin/overview/what-is-a-plugin/) [Re:Earth Visualizer へ機能を追加するプラグインの開発向けドキュメント](/ja/developer/plugin/overview/what-is-a-plugin/) ### [CMS Developer Docs](/ja/developer/cms/overview/) [外部アプリや外部システムと Re:Earth CMSを連携させるためのAPIと実装に関するドキュメント](/ja/developer/cms/overview/) # インテグレーションAPI の使い方 > インテグレーショントークンをリクエストに付与し、インテグレーションAPI で CMS のデータへ認証付きでアクセスする。 このページでは、インテグレーショントークンをリクエストに付与し、[インテグレーションAPI](/ja/developer/cms/overview/integration-api/) で CMS のデータへ認証付きでアクセスする方法を説明します。 ## インテグレーショントークンの発行 [Section titled “インテグレーショントークンの発行”](#インテグレーショントークンの発行) インテグレーションAPI は **インテグレーショントークンを使って認証**します。まずは Re:Earth CMS の管理画面で、対象プロジェクト(必要に応じてワークスペース)のインテグレーショントークンを発行してください。手順は [インテグレーションの作成](/ja/developer/cms/getting-started/integration-setup/) を参照してください。 ## アイテム一覧を取得する(GET) [Section titled “アイテム一覧を取得する(GET)”](#アイテム一覧を取得するget) 最初の動作確認として、インテグレーションAPI でアイテムの一覧を取得してみます。発行したインテグレーショントークンを `Authorization` ヘッダーに付与してリクエストします。`` などの山括弧の部分は、実際の値に置き換えてください。 * curl ```bash curl --location --request GET \ 'https://api.cms.reearth.io/api//projects//models//items' \ --header 'Authorization: Bearer ' ``` * PowerShell ```powershell $TOKEN = "" $WORKSPACE_ID = "" $PROJECT_ID = "" $MODEL_ID = "" $headers = @{ Authorization = "Bearer $TOKEN" Accept = "application/json" } $uri = "https://api.cms.reearth.io/api/$WORKSPACE_ID/projects/$PROJECT_ID/models/$MODEL_ID/items" $resp = Invoke-RestMethod -Method Get -Uri $uri -Headers $headers $resp ``` 補足 フロントエンドから直接インテグレーションAPI を呼び出すと、開発者ツールでトークンが見えてしまいます。トークンを隠すには、バックエンドサーバー側でトークンを管理し、そこから API にアクセスする構成をおすすめします。 ヒント 次は [インテグレーションAPI でアイテムをフィルタして取得する](/ja/developer/cms/guides/filter-items/) に進みましょう。 # インテグレーションの作成 > インテグレーションAPI / Webhook を利用するためのインテグレーションの作成・連携手順。 [インテグレーションAPI](/ja/developer/cms/overview/integration-api/) や [Webhook](/ja/developer/cms/overview/webhook/) を利用するには、インテグレーションを作成する必要があります。手順は次の 2 ステップです。 1. パーソナルアカウントでインテグレーションを作成します 2. 連携先ワークスペースで、作成したインテグレーションを連携します ## 1. インテグレーションを作成する [Section titled “1. インテグレーションを作成する”](#1-インテグレーションを作成する) 1. パーソナルアカウントに移動し、Re:Earth CMS の管理画面で**マイインテグレーション**タブを開きます 2. **新規インテグレーション作成**ボタンをクリックします ![My Integrations 画面。作成済みのインテグレーションがカード一覧で表示され、右下に Create new integration カードがある](/_astro/my-integrations-list.BnNchQ0E_Z2vS0r5.webp) 3. インテグレーション名を入力します(必須)。説明は任意です 4. **作成**ボタンをクリックします ![New Integration モーダル。Integration Name と Description の入力欄、Cancel・Create ボタンが表示されている](/_astro/new-integration-modal.2BsCinVp_Z14CGEW.webp) 作成が完了すると、**マイインテグレーション**画面に上で作成したインテグレーションが追加されます。インテグレーションをクリックすると、トークンを確認できます。このトークンを使って API リクエストを行い、アイテムの作成や更新が可能になります。 ![My Integration 詳細ページの General タブ。Integration Name・Description・Integration Token(Re-generate ボタン付き)・Code Example・Danger Zone が表示されている](/_astro/integration-detail-token.C-Ym-psJ_Z8OjvH.webp) ## 2. インテグレーションをワークスペースに連携する [Section titled “2. インテグレーションをワークスペースに連携する”](#2-インテグレーションをワークスペースに連携する) 作成したインテグレーションを対象のワークスペースに連携します。 1. インテグレーションを利用したいワークスペースに移動し、Re:Earth CMS の管理画面で**インテグレーション**タブを開き、**インテグレーションを連携**ボタンをクリックします ![ワークスペースの Integrations 画面。接続済みインテグレーションの一覧と、右上に Connect Integration ボタンが表示されている](/_astro/workspace-integrations-list.AjRnT41k_Z11xk1e.webp) 2. 作成したインテグレーションを選択して**連携**ボタンをクリックします ![Connect Integration モーダル。接続可能なインテグレーションの一覧から test が選択され、Connect ボタンが有効になっている](/_astro/connect-integration-modal.B1Mf0zwi_Z1EzQuG.webp) 3. 連携すると、**インテグレーション**画面に上で連携したインテグレーションが表示されます。**設定**ボタンから役割を変更します。役割については後述の「役割」を参照してください ![Integration Setting モーダル。対象インテグレーションの Role ドロップダウンと Save ボタンが表示されている](/_astro/integration-role-setting.CqDDx6CF_Z2pfGuy.webp) これにより、インテグレーショントークンを使って対象ワークスペースにアクセスできるようになります。 ## 役割 [Section titled “役割”](#役割) インテグレーションをプロジェクトに連携する際、4つの役割のいずれかを割り当てます。各役割は、そのインテグレーションがプロジェクト内で実行できる操作を定義します。 | 役割 | 説明 | | --------------- | --------------------------------------------------------------- | | owner(所有者) | プロジェクト内のすべてのリソースを作成・閲覧・更新・削除できます。最も強い権限を持つ役割です。 | | maintainer(管理者) | プロジェクト設定、モデル・スキーマ・グループ、アイテム、アセットを幅広く管理できます。owner と同等の操作権限を持ちます。 | | writer(編集者) | プロジェクトのコンテンツを作成・編集できます。アイテムの更新・削除は自身が作成したものに限られます。 | | reader(閲覧者) | 閲覧のみ可能です。関係者や外部レビュー担当者に適しています。 | 権限の内訳は次のとおりです(✅ = 許可、⚑ = 条件付きで許可、❌ = 不許可)。 | リソース | 操作 | owner | maintainer | writer | reader | | ------------- | -------- | ----- | ---------- | --------------- | ------ | | プロジェクト設定 | 作成 | ✅ | ✅ | ✅ | ❌ | | | 読み取り | ✅ | ✅ | ✅ | ✅ | | | 更新 | ✅ | ✅ | ✅ | ❌ | | | 削除 | ✅ | ✅ | ✅ | ❌ | | モデル・スキーマ・グループ | 作成 | ✅ | ✅ | ✅ | ❌ | | | 読み取り | ✅ | ✅ | ✅ | ✅ | | | 更新 | ✅ | ✅ | ✅ | ❌ | | | 削除 | ✅ | ✅ | ✅ | ❌ | | アイテム | 作成 | ✅ | ✅ | ✅ | ❌ | | | 読み取り | ✅ | ✅ | ✅ | ✅ | | | 更新 | ✅ | ✅ | ⚑ 自身が作成したアイテムのみ | ❌ | | | 削除 | ✅ | ✅ | ⚑ 自身が作成したアイテムのみ | ❌ | | | 公開 / 非公開 | ✅ | ✅ | ✅ | ❌ | | アセット | 作成 | ✅ | ✅ | ✅ | ❌ | | | 読み取り | ✅ | ✅ | ✅ | ✅ | | | 更新 | ✅ | ✅ | ✅ | ❌ | | | 削除 | ✅ | ✅ | ✅ | ❌ | ## インテグレーショントークンの再生成 [Section titled “インテグレーショントークンの再生成”](#インテグレーショントークンの再生成) トークンが漏洩した可能性がある場合やセキュリティ上の理由でリセットしたい場合は、トークンを再生成できます。 インテグレーション詳細ページから、**再生成**ボタンをクリックすると、トークンが再生成できます。 ![My Integration 詳細ページの General タブ。Integration Token 欄の Re-generate ボタン](/_astro/integration-detail-token.C-Ym-psJ_Z8OjvH.webp) 注意 再生成を行うと現在のトークンは即座に無効になります。トークンを使用している既存のシステムは、新しいトークンに更新する必要があります。 ## インテグレーションの編集 [Section titled “インテグレーションの編集”](#インテグレーションの編集) インテグレーション詳細ページから、名前や説明を編集できます。変更後は **保存**ボタンをクリックしてください。 ![My Integration 詳細ページの General タブ。Integration Name・Description の編集欄と Save ボタン](/_astro/integration-detail-token.C-Ym-psJ_Z8OjvH.webp) ## インテグレーションの削除 [Section titled “インテグレーションの削除”](#インテグレーションの削除) インテグレーション詳細ページ下部の**インテグレーションを削除**ボタンをクリックし、確認画面で **OK** をクリックすると、インテグレーションが削除されます。 ![My Integration 詳細ページ下部の Danger Zone。Remove Integration ボタン](/_astro/integration-detail-token.C-Ym-psJ_Z8OjvH.webp) 危険 インテグレーションを削除すると元に戻せません。連携済みのワークスペースからアクセスできなくなり、発行済みのトークンも無効になります。 # パブリックAPI の使い方(読み取り) > CMS のデータをパブリックAPI で取得できる状態にし、最初のリクエストを成功させる。 このページでは、CMS のデータを [パブリックAPI](/ja/developer/cms/overview/public-api/) で取得できる状態にし、最初のリクエストを成功させるまでを扱います。 ## 事前準備:アイテムを公開する [Section titled “事前準備:アイテムを公開する”](#事前準備アイテムを公開する) パブリックAPI でデータを取得するには、Re:Earth CMS の管理画面で以下の 2 つの設定が必要です。 1. アイテムを公開状態にします 2. パブリックAPI ページの **読み取り** タブでモデルを有効にします ### 1. アイテムを公開状態にする [Section titled “1. アイテムを公開状態にする”](#1-アイテムを公開状態にする) Re:Earth CMS の管理画面で、公開したいアイテムのステータスを **公開** に変更します。 ### 2. パブリックAPI を有効にする [Section titled “2. パブリックAPI を有効にする”](#2-パブリックapi-を有効にする) パブリックAPI でモデルのデータを取得できるようにするには、**パブリックAPI** ページの **読み取り** タブでそのモデルを有効にする必要があります。 1. プロジェクトの **パブリックAPI** を開きます 2. **読み取り** タブを選択します 3. 対象モデルの「**有効**」トグルをオンにします 4. **変更を保存** ボタンをクリックします ![Re:Earth CMS の Public API ページ。Reading タブが選択され、対象モデルの Enable トグルがオンになり、右上の Save Changes ボタンが有効な状態。下部に API Key の一覧・New Key ボタンも表示されている](/_astro/public-api-reading-tab.BBhLJ1c-_Z1okYp5.webp) 同じ **パブリックAPI** ページの下部に **API Key** セクションがあり、次の「APIキーを設定する」はここから行います。 ### 3. APIキーを設定する(非公開プロジェクトのみ・任意) [Section titled “3. APIキーを設定する(非公開プロジェクトのみ・任意)”](#3-apiキーを設定する非公開プロジェクトのみ任意) プロジェクトの公開範囲が非公開の場合は、APIキーを発行することでアクセスを制御できます。公開プロジェクトでは APIキーの設定は不要です。 APIキーとは? モデルの公開範囲を制限する際に活用できます。非公開プロジェクトでのみ使用可能です。 設定手順: 1. プロジェクトの **パブリックAPI** を開きます 2. **API Key** セクションの **+新しいキー** ボタンをクリックします 3. 名前や説明を入力し、対象モデルの **権限** を設定して **変更を保存** ボタンをクリックします ![Public API / New API Key ページ。Name・Description の入力欄と、モデルごとの Enable トグルを持つ Permissions テーブル、下部に Save Changes ボタン](/_astro/new-api-key-form.B4r7S8IE_Z1GpM1U.webp) 4. **API Key** セクションに、作成した APIキーが追加されます。コピーして外部アプリケーションとの連携に使用します ![API Key 一覧のコピーアイコンにカーソルを合わせ、Copy ツールチップが表示されている状態](/_astro/api-key-copy.DzYpl-FK_1hwPA1.webp) 発行した APIキーは、リクエストの `Authorization` ヘッダーに付与します。 ```bash curl 'https://api.cms.reearth.io/api/p///' \ -H 'Authorization: Bearer ' ``` ## アイテム一覧を取得する(GET) [Section titled “アイテム一覧を取得する(GET)”](#アイテム一覧を取得するget) 公開設定が完了したら、以下の URL でアイテム一覧を取得できます。公開データであれば APIキーなしで利用可能です。`` などの山括弧の部分は、実際の値に置き換えてください。 ```plaintext GET https://api.cms.reearth.io/api/p/// ``` * curl ```bash curl --location --request GET \ 'https://api.cms.reearth.io/api/p///' ``` * PowerShell ```powershell $WORKSPACE_ID = "" $PROJECT_ID = "" $MODEL_ID = "" $uri = "https://api.cms.reearth.io/api/p/$WORKSPACE_ID/$PROJECT_ID/$MODEL_ID" $resp = Invoke-RestMethod -Method Get -Uri $uri $resp ``` * JavaScript ```js const WORKSPACE_ID = ""; const PROJECT_ID = ""; const MODEL_ID = ""; const url = `https://api.cms.reearth.io/api/p/${WORKSPACE_ID}/${PROJECT_ID}/${MODEL_ID}`; const resp = await fetch(url, { method: "GET", headers: { Accept: "application/json", }, }); if (!resp.ok) { const text = await resp.text(); throw new Error(`HTTP ${resp.status}: ${text}`); } const data = await resp.json(); console.log(data); ``` ヒント 次は [パブリックAPI でアイテムを GeoJSON 形式で取得して地図に表示する](/ja/developer/cms/guides/geojson-map/) に進みましょう。 # パブリックAPI の使い方(書き込み) > パブリックAPI を使ってアイテムを作成する。 このページでは、[パブリックAPI](/ja/developer/cms/overview/public-api/) を使ってアイテムを作成(POST)する方法を説明します。 ## 事前準備:パブリックAPI を有効にする [Section titled “事前準備:パブリックAPI を有効にする”](#事前準備パブリックapi-を有効にする) パブリックAPI でモデルのデータを投稿できるようにするには、パブリックAPI ページの **書き込み** タブでそのモデルを有効にする必要があります。 1. プロジェクトの **パブリックAPI** を開きます 2. **書き込み** タブを選択します 3. 許可済みオリジンを少なくとも1つ追加します。ブラウザからのリクエストは、指定されたオリジンからのみ受け入れられます 4. 対象モデルの「**有効**」トグルをオンにします 5. **変更を保存** ボタンをクリックします ![Re:Earth CMS の Public API ページ。Posting タブが選択され、Allowed Origins に許可済みオリジンが1件登録され、対象モデルの POST API Enable トグルがオンになっている状態](/_astro/public-api-posting-tab.BxAam8K__Z2j2cdX.webp) 画面の **Copy** ボタンを押すと、curl リクエストをコピーできます。 ## アイテムを作成する(POST) [Section titled “アイテムを作成する(POST)”](#アイテムを作成するpost) `POST /{model}/items` エンドポイントに JSON でフィールドを指定すると、新しいアイテムを作成できます。認証は不要です。`` などの山括弧の部分は、実際の値に置き換えてください。`fields` のキーと値は、対象モデルのフィールド定義に応じて変わります。以下はサンプルです。 * curl ```bash curl -X POST 'https://api.cms.reearth.io/api/p////items' \ -H 'Content-Type: application/json' \ -d '{ "fields": { "": "", "": "" } }' ``` * PowerShell ```powershell $WORKSPACE_ID = "" $PROJECT_ID = "" $MODEL_ID = "" $uri = "https://api.cms.reearth.io/api/p/$WORKSPACE_ID/$PROJECT_ID/$MODEL_ID/items" $body = @{ fields = @{ "" = "" "" = "" } } | ConvertTo-Json $resp = Invoke-RestMethod -Method Post -Uri $uri -ContentType "application/json" -Body $body $resp ``` * JavaScript ```js const WORKSPACE_ID = ""; const PROJECT_ID = ""; const MODEL_ID = ""; const url = `https://api.cms.reearth.io/api/p/${WORKSPACE_ID}/${PROJECT_ID}/${MODEL_ID}/items`; const body = { fields: { "": "", "": "", }, }; const resp = await fetch(url, { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify(body), }); if (!resp.ok) { const text = await resp.text(); throw new Error(`HTTP ${resp.status}: ${text}`); } const data = await resp.json(); console.log(data); ``` 下書き状態で作成されます 作成されたアイテムは **下書き** 状態になり、公開するまでパブリックAPI(読み取り)では取得できません。公開するには、CMS の管理画面から公開操作を行うか、インテグレーションAPI を使用します。インテグレーションAPI での公開方法は [インテグレーションAPI を使ってデータを公開する](/ja/developer/cms/guides/publish-items/) を参照してください。 APIキーについて 投稿リクエストに APIキーを含める必要はありません。ただし、含める場合は有効なキーである必要があります。パブリックAPI の投稿は現在パブリックAPI(読み取り)の認証フローを共有しているため、無効な APIキーを含めるとリクエストが拒否されます。APIキーの作成方法は [パブリックAPI の使い方(読み取り)の「APIキーを設定する」](/ja/developer/cms/getting-started/public-api-quickstart-read/#3-api%E3%82%AD%E3%83%BC%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B%E9%9D%9E%E5%85%AC%E9%96%8B%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%AE%E3%81%BF%E4%BB%BB%E6%84%8F)を参照してください。 レート制限 IP アドレスごとに **100 リクエスト/分** のレート制限が設けられています。制限を超えた場合、レスポンスの `Retry-After` ヘッダーで再試行までの待機秒数が示されます。 # Webhook の使い方 > CMS の変更イベントを外部サービスへ自動通知するために Webhook を設定する。 このページでは、CMS の変更イベントを外部サービスへ自動通知するために [Webhook](/ja/developer/cms/overview/webhook/) を設定する方法を説明します。 ## インテグレーションの作成 [Section titled “インテグレーションの作成”](#インテグレーションの作成) Webhook は**インテグレーション画面から設定**します。まずは Re:Earth CMS の管理画面で、対象プロジェクト(必要に応じてワークスペース)のインテグレーションを作成してください。手順は [インテグレーションの作成](/ja/developer/cms/getting-started/integration-setup/) を参照してください。 ## 設定手順 [Section titled “設定手順”](#設定手順) 1. マイインテグレーションからインテグレーションをクリックし、詳細ページを開きます 2. **Webhook タブ**を開きます 3. **+新規 Webhook** ボタンをクリックします ![インテグレーション詳細ページの Webhook タブ。まだ Webhook が無い状態で、New Webhook ボタンが強調表示されている](/_astro/webhook-tab-empty.D3-SYlGO_1GNaUs.webp) 4. 以下の情報を埋めて、**保存**ボタンをクリックします * **名前** * **URL** — 通知先の URL。`POST` リクエストを受信できる有効な URL である必要があります * **シークレット(Secret)** — ここで設定したシークレットは Webhook のリクエストを署名する際に使用されます。受信側でその署名を検証することで、正当な送信元かどうかを確認できます * Webhook を作動させる**イベント**(複数選択可) ![New Webhook フォーム。Name・Url・Secret の入力欄と、Item・Asset ごとの Trigger Event チェックボックス](/_astro/new-webhook-form.BIbq3a3r_yPh8t.webp) テスト用 URL について テスト目的であれば、[webhook.site](https://webhook.site) で一時的な URL を発行すると、リアルタイムで通知内容を確認できます。 ## イベントの種類 [Section titled “イベントの種類”](#イベントの種類) Webhook が作動するイベントを選択します。選択したイベントが発生するたびに、指定 URL に `POST` リクエストが送信されます。複数選択可能です。 ### アイテム [Section titled “アイテム”](#アイテム) | イベント | タイミング | | ---- | ---------------- | | 作成 | 新規アイテムが作成されたとき | | 更新 | アイテムが更新されたとき | | 削除 | アイテムが削除されたとき | | 公開 | アイテムが公開されたとき | | 非公開 | アイテムが非公開に設定されたとき | ### アセット [Section titled “アセット”](#アセット) | イベント | タイミング | | ------ | ----------------------- | | アップロード | 新規アセットがアップロードされたとき | | 圧縮 | ZIP ファイルなどのアセットが解凍されたとき | | 削除 | アセットが削除されたとき | ## 動作確認 [Section titled “動作確認”](#動作確認) Webhook を保存したら、設定した対象のイベントを実行してみましょう。対象のイベントを実行すると、指定した URL へ通知が届きます。 # インテグレーションAPI を使って外部フォームの送信データで CMS のアイテムを更新する > HTML フォームから送信されたデータで、インテグレーションAPI 経由で CMS の既存アイテムを更新する。 インテグレーションAPI を使うと、データの更新や削除など、パブリックAPI と比較して複雑な操作が可能です。登録情報の変更フォームなど、HTML フォームから送信されたデータで Re:Earth CMS の既存アイテムを更新する方法を説明します。 ## サンプルコード [Section titled “サンプルコード”](#サンプルコード) 以下は、更新フォームのサンプルコードです。アイテム ID、名前、コメントを送信して、指定したアイテムを更新します。`WORKSPACE_ID` などの値や、`fields` の `key`(フィールドキー)は、自分のモデルの設定に応じて変えてください。 ```html Edit your info



``` トークンをフロントエンドに直接書かないでください 上記サンプルはあくまで動作確認用です。トークンがフロントエンドに露出すると、第三者に悪用されるリスクがあります。本番環境では、バックエンドサーバーでトークンを管理し、そこからインテグレーションAPI を呼び出す構成を推奨します。 ## 実行結果 [Section titled “実行結果”](#実行結果) フォームに入力して送信すると、インテグレーションAPI 経由でアイテムが更新されます。 ![ID・name・message の入力欄と Submit ボタンを持つ更新フォーム](/_astro/external-form-update-form.Di-D58xV_ZXvRiW.webp) CMS の Content 画面を確認すると、更新した内容がアイテムに反映されています。 ![Re:Earth CMS の Content 画面。フォームから送信された内容がアイテムに反映されている](/_astro/external-form-item-created.hZ2H0TVv_1t1SYB.webp) エンドポイントの詳細な仕様については、[インテグレーションAPIリファレンス](/ja/developer/cms/integration-api-reference/) を参照してください。 # パブリックAPI を使って外部フォームの送信データを CMS に保存する > HTML フォームから送信されたデータをパブリックAPI 経由で CMS にアイテムとして保存する。 お問い合わせフォームやアンケートフォームなど、HTML フォームから送信されたデータを Re:Earth CMS に保存する方法を説明します。パブリックAPI を使うと、APIキーやインテグレーショントークンなしでフォームの内容を CMS に投稿できます。 ## サンプルコード [Section titled “サンプルコード”](#サンプルコード) 以下は、お問い合わせフォームのサンプルコードです。名前、コメントを CMS に送信して保存します。`WORKSPACE_ID` などの値や、`fields` のキーは、自分のモデルの設定に応じて変えてください。 ```html Contact


``` ## 実行結果 [Section titled “実行結果”](#実行結果) フォームに入力して送信すると、パブリックAPI 経由でアイテムが作成されます。 ![name・message の入力欄と Submit ボタンを持つお問い合わせフォーム](/_astro/external-form-create-form.CdD-rs9T_sj8dh.webp) CMS の Content 画面を確認すると、送信内容が下書きステータスのアイテムとして保存されています。 ![Re:Earth CMS の Content 画面。フォームから送信された内容が下書きステータスのアイテムとして表示されている](/_astro/external-form-item-created.hZ2H0TVv_1t1SYB.webp) アイテムを公開したい場合は、CMS の管理画面から公開操作を行うか、[インテグレーションAPI を使ってデータを公開する](/ja/developer/cms/guides/publish-items/) を参照してください。 エンドポイントの詳細な仕様については、[パブリックAPIリファレンス](/ja/developer/cms/public-api-reference/) を参照してください。 # インテグレーションAPI でアイテムをフィルタして取得する > キーワード検索や条件フィルタを使って、必要なアイテムだけを絞り込んで取得する。 インテグレーションAPI でアイテムを取得する際は、条件を指定してフィルタできます。フィルタの方法は2つあります。 補足 パブリックAPI にはフィルタ機能がありません。アイテムの絞り込みが必要な場合はインテグレーションAPI を使用してください。 ## 方法 1:キーワード検索 [Section titled “方法 1:キーワード検索”](#方法-1キーワード検索) `GET /items` エンドポイントに `keyword` パラメータを付与すると、アイテムをキーワードで絞り込めます。利用可能なパラメータについては [インテグレーションAPIリファレンス](/ja/developer/cms/integration-api-reference/) を参照してください。 * curl ```bash curl -X GET \ 'https://api.cms.reearth.io/api//projects//models//items?keyword=Tokyo' \ --header 'Authorization: Bearer ' ``` * JavaScript ```js const TOKEN = ""; const url = new URL("https://api.cms.reearth.io/api//projects//models//items"); url.searchParams.set("keyword", "Tokyo"); const resp = await fetch(url, { headers: { Authorization: `Bearer ${TOKEN}`, Accept: "application/json", }, }); if (!resp.ok) throw new Error(`HTTP ${resp.status}`); const data = await resp.json(); console.log(data); ``` トークンをフロントエンドに直接書かないでください 上記サンプルはあくまで動作確認用です。トークンがフロントエンドに露出すると、第三者に悪用されるリスクがあります。本番環境では、バックエンドサーバーでトークンを管理し、そこからインテグレーションAPI を呼び出す構成を推奨します。 ## 方法 2:条件フィルタ(詳細な絞り込み) [Section titled “方法 2:条件フィルタ(詳細な絞り込み)”](#方法-2条件フィルタ詳細な絞り込み) より複雑な条件で絞り込む場合は、`POST /items/filter` エンドポイントに JSON で条件を指定します。 ### フィルタ条件の構造 [Section titled “フィルタ条件の構造”](#フィルタ条件の構造) 条件タイプをキーに、`fieldId`(フィールドセレクター)・`operator`・`value` を指定します。 ```json { "filter": { "<条件タイプ>": { "fieldId": { "fieldId": "", "type": "field" }, "operator": "<演算子>", "value": "<値>" } } } ``` ### 文字列フィールドを条件に指定する例 [Section titled “文字列フィールドを条件に指定する例”](#文字列フィールドを条件に指定する例) `string` 条件タイプの `contains` 演算子を使うと、指定したフィールドの値に特定の文字列が含まれるアイテムだけを絞り込めます。以下は、フィールドの値に「Tokyo」を含むアイテムを取得する例です。 ```bash curl -X POST \ 'https://api.cms.reearth.io/api//projects//models//items/filter' \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{ "filter": { "string": { "fieldId": { "fieldId": "", "type": "field" }, "operator": "contains", "value": "Tokyo" } } }' ``` ### AND / OR 条件の組み合わせ [Section titled “AND / OR 条件の組み合わせ”](#and--or-条件の組み合わせ) 複数条件を組み合わせる場合は `and` / `or` を使います。 ```bash curl -X POST \ 'https://api.cms.reearth.io/api//projects//models//items/filter' \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data '{ "filter": { "and": [ { "basic": { "fieldId": { "fieldId": "", "type": "field" }, "operator": "equals", "value": "high" } }, { "string": { "fieldId": { "fieldId": "", "type": "field" }, "operator": "contains", "value": "Tokyo" } } ] } }' ``` 利用可能な条件タイプや演算子の詳細については、[インテグレーションAPIリファレンス](/ja/developer/cms/integration-api-reference/) を参照してください。 # パブリックAPI でアイテムを GeoJSON 形式で取得して地図に表示する > ジオメトリフィールドを持つモデルのアイテムを GeoJSON で取得し、地図ライブラリで表示する。 パブリックAPI を使うと、ジオメトリフィールドを持つモデルのアイテムを GeoJSON 形式で取得できます。取得した GeoJSON はそのまま MapLibre GL JS・Leaflet などの地図ライブラリや、Re:Earth Visualizer に渡して表示できます。 前提 モデルに **GeoJSON Geometry 型**のフィールドが定義されていること。このフィールドがないモデルでは `.geojson` エンドポイントを呼び出しても `features` が空になります。公開設定がまだの場合は、先に [パブリックAPI の使い方(読み取り)](/ja/developer/cms/getting-started/public-api-quickstart-read/) を参照してください。 ## サンプルコード [Section titled “サンプルコード”](#サンプルコード) パブリックAPI からアイテムを GeoJSON 形式で取得して MapLibre GL JS で地図に表示する HTML のサンプルです。`WORKSPACE_ID`・`PROJECT_ID`・`MODEL_ID` は、実際の値に置き換えてください。 ```html Re:Earth CMS パブリックAPI + MapLibre GL JS
``` ## 実行結果 [Section titled “実行結果”](#実行結果) 地図上に CMS から取得したデータが表示されます。 ![パブリックAPI から取得した GeoJSON を MapLibre GL JS で表示した地図。日本各地に赤い円マーカーが表示されている](/_astro/geojson-map-result.BBwBgSKz_ZudUCO.webp) エンドポイントの詳細な仕様については、[パブリックAPIリファレンス](/ja/developer/cms/public-api-reference/) を参照してください。 # インテグレーションAPI を使ってデータを公開する > インテグレーションAPI で作成したアイテムを下書きから公開に変更し、パブリックAPI で取得できるようにする。 インテグレーションAPI からアイテムを登録した直後は、ステータスが **下書き** の状態になっています。パブリックAPI などで公開データとして取得できるようにするには、ステータスを **公開** に変更する必要があります。 ## 公開の流れ [Section titled “公開の流れ”](#公開の流れ) 1. 作成したアイテムの ID を取得します 2. 公開エンドポイントにリクエストを送り、ステータスを公開に変更します ## 指定した ID のアイテムを公開するサンプルコード [Section titled “指定した ID のアイテムを公開するサンプルコード”](#指定した-id-のアイテムを公開するサンプルコード) * curl ```bash curl -X POST \ 'https://api.cms.reearth.io/api//projects//models//items//publish' \ --header 'Authorization: Bearer ' ``` * JavaScript ```js const WORKSPACE_ID = ""; const PROJECT_ID = ""; const MODEL_ID = ""; const ITEM_ID = ""; const TOKEN = ""; const url = `https://api.cms.reearth.io/api/${WORKSPACE_ID}/projects/${PROJECT_ID}/models/${MODEL_ID}/items/${ITEM_ID}/publish`; const resp = await fetch(url, { method: "POST", headers: { Authorization: `Bearer ${TOKEN}`, Accept: "application/json", }, }); if (!resp.ok) { const text = await resp.text(); throw new Error(`HTTP ${resp.status}: ${text}`); } console.log("公開しました"); ``` トークンをフロントエンドに直接書かないでください 上記サンプルはあくまで動作確認用です。トークンがフロントエンドに露出すると、第三者に悪用されるリスクがあります。本番環境では、バックエンドサーバーでトークンを管理し、そこからインテグレーションAPI を呼び出す構成を推奨します。 ## アイテムの作成から公開まで一括で行うサンプルコード [Section titled “アイテムの作成から公開まで一括で行うサンプルコード”](#アイテムの作成から公開まで一括で行うサンプルコード) アイテムの作成と公開を続けて行う場合は、作成時に返ってくるアイテム ID をそのまま公開リクエストに使います。 ```js const WORKSPACE_ID = ""; const PROJECT_ID = ""; const MODEL_ID = ""; const TOKEN = ""; const baseUrl = `https://api.cms.reearth.io/api/${WORKSPACE_ID}/projects/${PROJECT_ID}`; // 1. アイテムを作成する const createResp = await fetch(`${baseUrl}/models/${MODEL_ID}/items`, { method: "POST", headers: { Authorization: `Bearer ${TOKEN}`, "Content-Type": "application/json", Accept: "application/json", }, body: JSON.stringify({ fields: [ { key: "name", type: "text", value: "サンプル" }, ], }), }); if (!createResp.ok) throw new Error(`作成失敗: HTTP ${createResp.status}`); const item = await createResp.json(); // 2. 作成したアイテムを公開する const publishResp = await fetch(`${baseUrl}/models/${MODEL_ID}/items/${item.id}/publish`, { method: "POST", headers: { Authorization: `Bearer ${TOKEN}`, Accept: "application/json", }, }); if (!publishResp.ok) throw new Error(`公開失敗: HTTP ${publishResp.status}`); console.log("作成・公開が完了しました"); ``` トークンをフロントエンドに直接書かないでください 上記サンプルはあくまで動作確認用です。トークンがフロントエンドに露出すると、第三者に悪用されるリスクがあります。本番環境では、バックエンドサーバーでトークンを管理し、そこからインテグレーションAPI を呼び出す構成を推奨します。 ## 実行結果 [Section titled “実行結果”](#実行結果) 公開前は、ステータスが **下書き** になっています。 ![公開前のアイテム。ステータスが下書きになっている](/_astro/item-before-publish.CIi_WURN_Z1Hv32a.webp) 公開エンドポイントを呼び出すと、ステータスが **公開** に変わり、パブリックAPI から取得できるようになります。 ![インテグレーションAPI で公開後のアイテム。ステータスが Published になっている](/_astro/item-after-publish.CJUAFBkc_ZmmUKS.webp) エンドポイントの詳細な仕様については、[インテグレーションAPIリファレンス](/ja/developer/cms/integration-api-reference/) を参照してください。 # インテグレーションAPI を使ってローカルファイルをアセットに登録する > ローカルにある画像やファイルを Re:Earth CMS のアセットとして登録する。 ローカルにある画像やファイルを Re:Earth CMS のアセットとして登録する方法を説明します。アセットに登録したファイルは、アイテムのフィールドから参照したり、パブリックAPI 経由で配信したりできます。 ## サンプルコード [Section titled “サンプルコード”](#サンプルコード) * curl ```bash curl -X POST \ 'https://api.cms.reearth.io/api//projects//assets' \ --header 'Authorization: Bearer ' \ --form 'file=@/path/to/file.jpg' ``` * JavaScript ブラウザのファイル選択フォームと組み合わせる例です。 ```html アセットアップロード ``` トークンをフロントエンドに直接書かないでください 上記サンプルはあくまで動作確認用です。トークンがフロントエンドに露出すると、第三者に悪用されるリスクがあります。本番環境では、バックエンドサーバーでトークンを管理し、そこからインテグレーションAPI を呼び出す構成を推奨します。 ## 実行結果 [Section titled “実行結果”](#実行結果) 簡易的なアップロードフォームでファイルを選択し、アップロードを実行します。 ![簡易的なアセットアップロードフォーム。ファイルが選択され、アップロードボタンがある](/_astro/upload-asset-form.Bdl3WBJj_Z1Jk4jJ.webp) インテグレーションAPI 経由でアセットが登録され、CMS の Asset 画面に表示されます。 ![インテグレーションAPI からアセットを登録した後の Asset 画面。アップロードしたファイルが一覧に表示されている](/_astro/asset-registered.CnMYqMjF_1D5UOY.webp) エンドポイントの詳細な仕様については、[インテグレーションAPIリファレンス](/ja/developer/cms/integration-api-reference/) を参照してください。 # 概要 > Re:Earth CMS が提供する API・Webhook の全体像と使い分け。 Re:Earth CMS は、プロジェクト単位でコンテンツ・構造・公開状態を管理し、外部アプリケーションや外部システムと連携するための**ヘッドレス CMS** です。外部からのアクセスには、公開範囲のデータを閲覧・作成するためのものと、CMS 内のリソースを管理・操作するためのものがあります。そのため Re:Earth CMS では、目的に応じて **パブリックAPI**・**インテグレーションAPI**・**Webhook** を提供しています。それぞれの特徴は次のとおりです。 | 連携方法 | 用途 | 認証 | | ---------------- | --------------------- | --------------------------------- | | **パブリックAPI** | 公開範囲のデータを外部から閲覧・投稿 | 公開プロジェクトは不要。非公開プロジェクトは APIキーで追加可能 | | **インテグレーションAPI** | 外部システムとの連携・CRUD 操作全般 | インテグレーショントークン必須 | | **Webhook** | CMS 内のイベントを指定 URL へ通知 | シークレットによる署名検証 | より詳しい技術情報は [DeepWiki](https://deepwiki.com/reearth/reearth-cms) をご覧ください。 DeepWiki について 上の DeepWiki は AI がソースコードから生成したドキュメントのため、内容に誤りが含まれる可能性があります。利用時は注意してください。 GraphQL API について Re:Earth CMS は上記 2 つの REST API のほかに GraphQL API を内部的に提供していますが、これは**内部 API** です。予告なく仕様が変更される場合があるため、**一般ユーザーは使用しないでください**。外部連携にはインテグレーションAPIまたはパブリックAPIを使用してください。 パブリックAPI Web サイトや地図アプリケーション、公開フォームから公開範囲のデータを閲覧・作成します。 [パブリックAPI とは ](/ja/developer/cms/overview/public-api/) インテグレーションAPI バックエンドサーバーからプロジェクト・モデル・スキーマ・アイテム・アセットを管理します。 [インテグレーションAPI とは ](/ja/developer/cms/overview/integration-api/) Webhook アイテムやアセットが変わった瞬間に、CMS から自分のサーバーへ通知させます。 [Webhook とは ](/ja/developer/cms/overview/webhook/) ## パブリックAPI [Section titled “パブリックAPI”](#パブリックapi) 公開範囲のデータを外部アプリケーションから閲覧・作成するための API です。Web サイトや地図アプリケーション、公開フォームなど、フロントエンドから直接利用する用途に向いています。JSON・CSV・GeoJSON 形式で取得でき、Re:Earth Visualizer などでの表示にも使えます。 ただし、既存データの更新・削除や、モデル・スキーマの変更はできません。 ## インテグレーションAPI [Section titled “インテグレーションAPI”](#インテグレーションapi) 外部システムやバックエンドサーバーから CMS 内のリソースを管理・操作するための API です。アイテムやアセットに加え、プロジェクト・モデル・スキーマなど CMS を構成するリソース全般を扱えます。 インテグレーショントークンは強い権限を持つ認証情報のため、**フロントエンドに露出させず**、バックエンドサーバーなど安全な環境で管理する必要があります。 ## Webhook [Section titled “Webhook”](#webhook) CMS 内のイベント(アイテムの作成・更新・公開、アセットのアップロード・削除など)を、指定した URL へリアルタイムに通知する仕組みです。API のように CMS へリクエストするのではなく CMS 側から知らせるため、データ同期や外部ワークフローの自動化に向いています。 利用には、通知を受け取るサーバーの用意と、必要に応じた署名検証の実装が必要です。 # インテグレーションAPI とは > 認証つきで CMS 内のリソースを作成・更新・削除するための管理 API。 インテグレーションAPI は、外部サービスを通じて Re:Earth CMS 内のデータを管理・操作するための API です。認証を行ったうえで、以下のような操作が行えます。 * プロジェクトデータの取得・管理 * モデルやアイテム、スキーマの作成・更新・削除 * アセットやコメント登録などの操作 公開データを認証なしで取得・作成したい場合は、[パブリックAPI](/ja/developer/cms/overview/public-api/) を使用します。 インテグレーションAPI の主な特徴は次のとおりです。 | 特徴 | 内容 | | ------------------- | -------------------------------------------------------------------------- | | あらゆるリソースを作成・更新・削除可能 | アイテム・アセット・モデルなど CMS 上のあらゆるリソースを作成・更新・削除可能。公開設定されていないモデル・アイテム・アセットにもアクセス可能。 | | 認証必要 | インテグレーショントークンによる認証が必要。 | | RESTful API | 標準的な HTTP メソッド(`GET` / `POST` など)を使う REST 準拠設計。 | 注意 インテグレーショントークンは管理者権限に相当するため、クライアントサイドに露出すると第三者に悪用されるリスクがあります。バックエンドサーバーでトークンを管理し、そこから API を呼び出す構成が必須です。 ## 次のステップ [Section titled “次のステップ”](#次のステップ) まずは [インテグレーションの作成](/ja/developer/cms/getting-started/integration-setup/) に進み、インテグレーショントークンを発行しましょう。 ## 関連情報 [Section titled “関連情報”](#関連情報) * Getting started: [インテグレーションAPI の使い方](/ja/developer/cms/getting-started/integration-api-quickstart/) — トークン発行から最初のリクエストまで * Reference: [インテグレーションAPIリファレンス](/ja/developer/cms/integration-api-reference/) # パブリックAPI とは > 公開設定されたデータの閲覧・作成に特化した認証不要の API。 パブリックAPI は、Re:Earth CMS で公開設定されたデータを読み取り、作成できる API です。Web サイトや外部サービスは、この API を通じて次のようなデータを取得できます。 * 公開設定されたモデル * アイテム(コンテンツ) * アセット(画像・ファイルなど) データの更新・削除、スキーマの変更など管理操作が必要な場合は、[インテグレーションAPI](/ja/developer/cms/overview/integration-api/) を使用します。 パブリックAPI の主な特徴は次のとおりです。 | 特徴 | 内容 | | ------------ | ------------------------------------------------------------------------------------------------------------------------- | | データの閲覧・作成が可能 | 公開設定されたモデル・アイテム・アセットのみにアクセス可能。データの作成も可能(ただし Asset・Reference・Tag・Group・GeometryEditor・GeometryObject 型のフィールドは投稿に対応していません)。 | | 認証不要 | 公開データであれば APIキーなしで利用可能。非公開データは取得できません。 | | RESTful API | 標準的な HTTP メソッド(`GET` / `POST` など)を使う REST 準拠設計。 | 注意 パブリックAPI は認証不要のため、フロントエンドから直接呼び出せます。ただし、環境によっては CORS(Cross-Origin Resource Sharing)の設定が必要です。本番環境では許可オリジンを適切に制限してください。 ## 次のステップ [Section titled “次のステップ”](#次のステップ) [パブリックAPI の使い方(読み取り)](/ja/developer/cms/getting-started/public-api-quickstart-read/) に進み、公開設定から最初の読み取りリクエストまでを試してみましょう。 ## 関連情報 [Section titled “関連情報”](#関連情報) * Reference: [パブリックAPIリファレンス](/ja/developer/cms/public-api-reference/) * How-to guides: [パブリックAPI でアイテムを GeoJSON 形式で取得して地図に表示する](/ja/developer/cms/guides/geojson-map/) # Webhook とは > CMS 内のイベントを外部サービスへリアルタイムに通知する仕組み。 Webhook は、システム内でイベントが発生したときに、外部サーバーへ自動でデータを送信する仕組みです。API のポーリング(定期的に API を呼び出してデータを確認する方式)とは異なり、イベントが発生したタイミングでのみ通知が届くため、リソースの消費が少なく、リアルタイムに近い連携が実現できます。 Re:Earth CMS の Webhook を使用すると、プロジェクト内でアイテムやアセットの編集・削除・公開などの変更が行われた際に、外部サービスへリアルタイムで通知を送信できます。これにより、外部システムとの連携や自動化、データ同期が容易になります。 * アイテムの作成・更新・削除の通知 * アイテムの公開・非公開状態の変更通知 * 指定した URL への HTTP `POST` によるリアルタイム通知 * リクエスト内容が改ざんされていないことを確認するための署名付与 外部から CMS のデータを**取得・操作したい**場合は、[インテグレーションAPI](/ja/developer/cms/overview/integration-api/) または [パブリックAPI](/ja/developer/cms/overview/public-api/) を使用します。 Webhook の主な特徴は次のとおりです。 | 特徴 | 内容 | | ------------------- | ----------------------------------------------------------------------- | | CMS からのイベント通知を行う仕組み | アイテムの作成・更新・削除・公開などのイベントが発生すると、CMS 側から指定した URL へ HTTP `POST` リクエストを送信する。 | | インテグレーションに紐づけて設定 | Webhook 単体では存在せず、1 つのインテグレーションに対して複数の Webhook を追加できる。 | | 署名検証が必要 | リクエストにはシークレットによる署名が付与されるため、受信側で検証を行い、なりすましを防ぐ必要がある。 | 注意 Webhook を利用するには、通知を受け取るための受信サーバーをあらかじめ用意し、署名検証のロジックを実装しておく必要があります。受信サーバー側の実装・運用にはアプリケーション開発の知識と経験が求められます。 ## 次のステップ [Section titled “次のステップ”](#次のステップ) まずは [インテグレーションの作成](/ja/developer/cms/getting-started/integration-setup/) に進み、Webhook 設定の前提となるインテグレーションを作成しましょう。 ## 関連情報 [Section titled “関連情報”](#関連情報) * Getting started: [Webhook の使い方](/ja/developer/cms/getting-started/webhook-quickstart/) — 設定手順とイベントの種類 # FAQ > CMS の API・Webhook 連携に関するよくある質問。 ## セットアップ・基本 [Section titled “セットアップ・基本”](#セットアップ基本) **Q: 複数のプロジェクトで同じインテグレーションを使えますか?** はい、1 つのインテグレーションを複数のプロジェクトに接続できます。ただし、プロジェクトごとに接続の設定が必要です。 **Q: インテグレーショントークンと APIキーは何が違いますか?** インテグレーショントークンはインテグレーションAPI(読み書き・管理操作)で使用するトークンです。APIキーはパブリックAPI で非公開プロジェクトにアクセスする際に使用します。用途が異なるため、それぞれ適切な場面で使い分けてください。 **Q: API のベース URL は何ですか?** | API | ベース URL | | ------------ | ---------------------------------------------------------------- | | インテグレーションAPI | `https://api.cms.reearth.io/api/{workspace}/projects/{project}/` | | パブリックAPI | `https://api.cms.reearth.io/api/p/{workspace}/{project}/` | ## アイテム操作 [Section titled “アイテム操作”](#アイテム操作) **Q: アイテムを作成したのにパブリックAPI で取得できません。なぜですか?** インテグレーションAPI で作成したアイテムはデフォルトで **下書き** 状態になります。パブリックAPI で取得できるようにするには、以下のエンドポイントでアイテムを公開する必要があります。詳しくは [インテグレーションAPI を使ってデータを公開する](/ja/developer/cms/guides/publish-items/) を参照してください。 ```plaintext POST /{workspace}/projects/{project}/models/{model}/items/{itemId}/publish ``` **Q: フィールドキーはどこで確認できますか?** Re:Earth CMS の管理画面でモデルのスキーマ設定を開くと、各フィールドのキーを確認できます。また、以下のエンドポイントでスキーマを取得することでも確認できます。 ```plaintext GET /{workspace}/projects/{project}/models/{model}/schema.json ``` **Q: 一度に取得できるアイテムの最大件数は何件ですか?** 1 リクエストあたり最大 **100 件**です。`perPage` パラメータで件数を指定できます(デフォルト: 50 件)。100 件を超えるデータを取得する場合は、`page` パラメータを使ってページネーションで取得してください。 **Q: アイテムを特定の条件で絞り込んで取得できますか?** インテグレーションAPI では、`POST /items/filter` エンドポイントを使って条件フィルタが使えます。テキスト・数値・日時・ステータスなど様々な条件タイプに対応しており、`and` / `or` で複数条件を組み合わせることもできます。なお、パブリックAPI にはフィルタ機能はありません。絞り込みが必要な場合はインテグレーションAPI を使用してください。詳しくは [インテグレーションAPI でアイテムをフィルタして取得する](/ja/developer/cms/guides/filter-items/) を参照してください。 ## パブリックAPI [Section titled “パブリックAPI”](#パブリックapi) **Q: 認証なしでアクセスできるのはどのような場合ですか?** 公開設定されたプロジェクトであれば、認証なしでパブリックAPI にアクセスできます。非公開プロジェクトの場合は、`Authorization` ヘッダーに APIキーを付与することでアクセスできます。 **Q: GeoJSON で取得しても `features` が空になります。** モデルに **GeoJSON Geometry 型**のフィールドが定義されていないと、`features` が空になります。CMS の管理画面でモデルのスキーマ設定を確認し、ジオメトリフィールドが追加されているか確認してください。 ## Webhook [Section titled “Webhook”](#webhook) **Q: Webhook を設定したのに通知が届きません。どこを確認すればよいですか?** 以下の点を確認してください。 1. Webhook URL が正しく設定されているか 2. URL が `http://` または `https://` で始まっているか 3. 受信サーバーが POST リクエストを受け付けているか 4. 受信サーバーが 10 秒以内に 2XX レスポンスを返しているか 5. 対象のイベントが Webhook の設定で有効になっているか ローカル環境でテストする場合は、ngrok などのトンネリングツールを使って外部からアクセスできる URL を用意してください。 **Q: Webhook のペイロードはどこで確認できますか?** テスト目的であれば、webhook.site で一時的な URL を発行すると、受信したペイロードをブラウザ上でリアルタイムに確認できます。 注意 webhook.site の無料版はデータが 7 日で削除され、リクエスト内容が他のユーザーから閲覧可能な状態になります。本番環境での使用は推奨しません。 ## エラー対処 [Section titled “エラー対処”](#エラー対処) **Q: `401 Unauthorized` が返ってきます。** `Authorization` ヘッダーが正しく設定されているか確認してください。 ```plaintext Authorization: Bearer ``` `Bearer` とトークンの間にスペースが必要です。トークンが正しいにもかかわらずエラーが続く場合は、トークンを再発行してください。 **Q: `400 Bad Request` が返ってきます。** リクエストボディの構造が正しくない場合に返ります。以下を確認してください。 * `fields` の `key` が CMS 側のフィールドキーと一致しているか * `fields` の `type` がフィールド型と一致しているか * JSON の構文が正しいか(カンマ、クォート、ネスト) **Q: `404 Not Found` が返ってきます。** URL に含まれる workspace / project / model の ID またはエイリアスが正しいか確認してください。また、パブリックAPI の場合はモデルが公開設定になっているかも確認してください。 # ツール > CMS 連携を助ける SDK / CLI ツール(準備中)。 CMS 連携を簡単にする SDK・CLI ツールは現在準備中です。整備が完了次第、このページで案内します。 それまでは、[パブリックAPIリファレンス](/ja/developer/cms/public-api-reference/) および [インテグレーションAPIリファレンス](/ja/developer/cms/integration-api-reference/) の REST エンドポイントを直接呼び出してご利用ください。 # 概要 > プラグイン API の概要 Re:Earth Visualizer プラグイン API は、プラグイン拡張が Re:Earth Visualizer とシームレスに連携するために設計された API の集まりです。Visualizer のデータへのアクセスを提供し、レイヤ・ビューア・カメラ・タイムライン・UI・拡張などのさまざまなコンポーネントを管理するメソッドを提供します。 ## Plugin API [Section titled “Plugin API”](#plugin-api) Re:Earth Visualizer プラグイン API は `reearth` オブジェクトにまとめられており、プラグインの WebAssembly 側でグローバルに利用できます。API はいくつかのモジュールに分かれており、それぞれ Visualizer と連携するためのプロパティとメソッドを提供します。 ### システム関連 [Section titled “システム関連”](#システム関連) **reearth.version: `string`:** Re:Earth Visualizer のバージョン。 **reearth.apiVersion: `string`:** Re:Earth Visualizer プラグイン API のバージョン。 **reearth.engine: `Engine`:** 現在使用中の Re:Earth Visualizer のエンジン。 ### シーン関連 [Section titled “シーン関連”](#シーン関連) [reearth.viewer ](/ja/developer/plugin/api-reference/viewer/) [reearth.camera ](/ja/developer/plugin/api-reference/camera/) [reearth.timeline ](/ja/developer/plugin/api-reference/timeline/) ### レイヤ関連 [Section titled “レイヤ関連”](#レイヤ関連) [reearth.layers ](/ja/developer/plugin/api-reference/layers/) [reearth.sketch ](/ja/developer/plugin/api-reference/sketch/) ### 拡張関連 [Section titled “拡張関連”](#拡張関連) [reearth.extension ](/ja/developer/plugin/api-reference/extension/) [reearth.ui ](/ja/developer/plugin/api-reference/ui/) [reearth.modal ](/ja/developer/plugin/api-reference/modal/) [reearth.popup ](/ja/developer/plugin/api-reference/popup/) ### データ関連 [Section titled “データ関連”](#データ関連) [reearth.data ](/ja/developer/plugin/api-reference/data/) ## 試してみましょう [Section titled “試してみましょう”](#試してみましょう) Re:Earth Visualizer プラグインプレイグラウンドで、これらのプラグイン API の使用例を多数紹介しています。 [プラグインプレイグラウンド ](https://visualizer.reearth.io/plugin-playground?plugin-id=my-plugin) # reearth.camera > `reearth.camera` の API リファレンスです。 **`reearth.camera`** 名前空間は、`reearth` 環境内でカメラを管理・操作するための包括的な機能セットを提供します。 ## プロパティ [Section titled “プロパティ”](#プロパティ) ### position [Section titled “position”](#position) このプロパティは、`reearth` 内のカメラの現在位置と向きを提供します。カメラの地理的な位置、高度、および角度方向に関する詳細な情報を返します。カメラの視点を把握・記録する際に役立ちます。 #### 構文 [Section titled “構文”](#構文) ```ts reearth.camera.position: CameraPosition | undefined; ``` #### 戻り値 [Section titled “戻り値”](#戻り値) **型** `CameraPosition` カメラ位置が定義されている場合、詳細な位置と向きのデータを持つオブジェクトを返します。 ノート CameraPosition 型の詳細については、[CameraPosition](#cameraposition) セクションをご参照ください。 **型** `undefined` カメラ位置が現在利用できないことを示します。 #### 使用例 [Section titled “使用例”](#使用例) ```javascript // 例 1: 現在のカメラ位置を取得する const currentPosition = reearth.camera.position; // 位置が利用可能かどうかを確認する if (currentPosition) { console.log("Latitude:", currentPosition.lat); console.log("Longitude:", currentPosition.lng); console.log("Height:", currentPosition.height); console.log("Heading:", currentPosition.heading); console.log("Pitch:", currentPosition.pitch); console.log("Roll:", currentPosition.roll); } else { console.log("Camera position is undefined."); } ``` ### fov [Section titled “fov”](#fov) このプロパティは、`reearth` におけるカメラの視野角(FOV)を表し、任意の時点で観測できる世界の範囲を定義します。カメラの視点が広いか狭いかを調整する際に重要なパラメータです。 FOV はカメラがパースペクティブモードの場合にのみ利用可能です。 #### 構文 [Section titled “構文”](#構文-1) ```ts reearth.camera.fov: number | undefined ``` #### 戻り値 [Section titled “戻り値”](#戻り値-1) **型** `number | undefined` カメラの視野角をラジアン単位で表す数値です。視野角は 3D 空間でのコンテンツの見え方に大きく影響し、値が大きいほど広い視野になり、値が小さいほどズームインされた絞り込まれたビューになります。 視野角が undefined の場合、カメラの FOV が設定されていないか、現在の状況では利用できないことを示します。 #### 使用例 [Section titled “使用例”](#使用例-1) ```javascript // 例 1: カメラの現在の視野角にアクセスしてログに出力する const cameraFov = reearth.camera.fov; if (cameraFov !== undefined) { console.log("Current Camera FOV (radians):", cameraFov); } else { console.log("Camera FOV is undefined."); } // 例 2: FOV に基づいて調整する // 視野角が広すぎる場合に確認して調整する const cameraFov = reearth.camera.fov; if (cameraFov !== undefined && cameraFov > 1) { console.log("Camera FOV is wide. Consider reducing for a more focused view."); } else if (cameraFov !== undefined) { console.log("Camera FOV is optimal for current view."); } ``` ### aspectRatio [Section titled “aspectRatio”](#aspectratio) このプロパティは、`reearth` 環境におけるカメラのビューポートの幅と高さの比率を表します。この比率は、ビューポートの寸法に基づいてオブジェクトが歪みなく描画されるよう、カメラのビュー内でのコンテンツの表示方法に影響します。 #### 構文 [Section titled “構文”](#構文-2) ```ts reearth.camera.aspectRatio: number | undefined ``` #### 戻り値 [Section titled “戻り値”](#戻り値-2) **型** `number | undefined` カメラのビューポートのアスペクト比(幅 ÷ 高さ)を表す数値です。たとえば、一般的なワイドスクリーンモニターのアスペクト比は 16:9(約 1.78)であり、正方形のアスペクト比は 1:1(1.0)です。アスペクト比が広いほど横方向の視野が広くなり、高いほど縦方向の視野が広くなります。 #### 使用例 [Section titled “使用例”](#使用例-2) ```javascript // 例 1: カメラの現在のアスペクト比にアクセスしてログに出力する const cameraAspectRatio = reearth.camera.aspectRatio; if (cameraAspectRatio !== undefined) { console.log("Current Camera Aspect Ratio:", cameraAspectRatio); } else { console.log("Camera aspect ratio is undefined."); } // 例 2: アスペクト比に基づいてカメラビューを調整する const cameraAspectRatio = reearth.camera.aspectRatio; if (cameraAspectRatio !== undefined && cameraAspectRatio > 1.8) { console.log( "Camera aspect ratio is very wide. Consider adjusting the view for better composition." ); } else if (cameraAspectRatio !== undefined) { console.log("Camera aspect ratio is within a normal range."); } ``` ### viewport [Section titled “viewport”](#viewport) このプロパティは、カメラのビューに現在表示されている地理的な境界を表します。カメラの可視エリアの西・南・東・北の範囲を定義する GeoRect オブジェクトを返します。地理座標でカメラの視野を把握する際に役立ちます。 #### 構文 [Section titled “構文”](#構文-3) ```ts reearth.camera.viewport: GeoRect | undefined ``` #### 戻り値 [Section titled “戻り値”](#戻り値-3) **型** `GeoRect | undefined` 現在のビューポートの地理的な境界を表すオブジェクトです。 ノート GeoRect に含まれるオプションの詳細については、[GeoRect](#georect) セクションをご参照ください。 viewport が undefined の場合、カメラの現在の地理的な境界が設定されていないか取得できないことを示します。これは、カメラが地理的な領域にフォーカスしていない場合に発生することがあります。 #### 使用例 [Section titled “使用例”](#使用例-3) ```javascript // 例 1: ビューポートの現在の地理的な境界にアクセスしてログに出力する const viewportBounds = reearth.camera.viewport; if (viewportBounds) { console.log("Viewport bounds:"); console.log("West:", viewportBounds.west); console.log("South:", viewportBounds.south); console.log("East:", viewportBounds.east); console.log("North:", viewportBounds.north); } else { console.log("Viewport is undefined."); } // 例 2: ビューポートを確認して調整を提案する const viewportBounds = reearth.camera.viewport; if (viewportBounds) { console.log("Current Viewport:", viewportBounds); // ビューポートが西または東に広がりすぎていないか確認する if (viewportBounds.west < -180 || viewportBounds.east > 180) { console.log( "Viewport extends beyond global bounds. Consider adjusting the camera." ); } else { console.log("Viewport is within normal geographic bounds."); } } else { console.log("Viewport is undefined."); } ``` ## メソッド [Section titled “メソッド”](#メソッド) ### flyTo [Section titled “flyTo”](#flyto) このメソッドは、アニメーションの時間・イージング・視野角(FOV)の任意制御とともに、カメラを指定した目的地へ滑らかに移動させます。シーン内の特定の場所やレイヤへカメラを誘導し、滑らかな遷移とカスタムアニメーションを実現する際に役立ちます。 #### 構文 [Section titled “構文”](#構文-4) ```ts reearth.camera.flyTo( destination: LayerId | CameraPosition, options?: CameraMoveOptions & { fov?: number } ) => void; ``` #### パラメータ [Section titled “パラメータ”](#パラメータ) ##### `destination` [Section titled “destination”](#destination) カメラの目標地点を指定します。特定のレイヤにフォーカスするための LayerId(文字列)、または地理的な位置と向きのパラメータを指定する CameraPosition オブジェクトを指定できます。 **型**: `LayerId | CameraPosition` **`LayerId`**: カメラが移動するべき特定のレイヤの ID を表す文字列です。 **`CameraPosition`**: カメラの緯度・経度・高度・向きを定義するオブジェクトです。 ノート CameraPosition に含まれるオプションの詳細については、[CameraPosition](#cameraposition) セクションをご参照ください。 ##### `options` [Section titled “options”](#options) **省略可能** 移動アニメーションと視野角を制御する省略可能なオブジェクトです。 **型**: `CameraMoveOptions & { fov?: number }` **`CameraMoveOptions:`** 移動アニメーションを制御するオブジェクトです。 ノート CameraMoveOptions に含まれるオプションの詳細については、[CameraMoveOptions](#cameramoveoptions) セクションをご参照ください。 **`fov?: number:`** 目的地での視野角(ラジアン単位)を指定します。遷移の一部としてカメラの FOV を調整します。 #### 戻り値: [Section titled “戻り値:”](#戻り値-4) なし(`void`)。このメソッドは値を返しません。 #### 使用例 [Section titled “使用例”](#使用例-4) ```javascript // 例 1: 指定した座標へ 3 秒のアニメーションで移動する reearth.camera.flyTo( { lat: 35.6895, lng: 139.6917, height: 500 }, // Tokyo coordinates { duration: 3 } // 3-second animation duration ); // 例 2: アニメーションなしで即座にレイヤへ移動する const layerId = "layer123"; reearth.camera.flyTo(layerId, { duration: 0 }); // 例 3: 4 秒のアニメーション・カスタム FOV・イージング関数を使って座標へ移動する reearth.camera.flyTo( { lat: 48.8566, // Latitude for Paris lng: 2.3522, // Longitude for Paris height: 1500, // Altitude in meters heading: 0.785, // Heading in radians (45 degrees clockwise) pitch: -0.523, // Pitch in radians (30 degrees downward) roll: 0, // No roll }, { duration: 4, // Set animation duration to 4 seconds fov: 0.8, // Set field of view to 0.8 radians easing: (t) => t * t, // Custom easing for a slower start } ); ``` ### flyToBoundingBox [Section titled “flyToBoundingBox”](#flytoboundingbox) このメソッドは、指定した地理的バウンディングボックスにフォーカスするようにカメラを滑らかに移動させます。アニメーション・向き・距離の省略可能なパラメータを指定できます。領域を表示するためにズームアウトしたり、ビューポート内の特定のエリアをハイライトするためにズームインしたりする際に役立ちます。 #### 構文 [Section titled “構文”](#構文-5) ```ts reearth.camera.flyToBoundingBox( boundingBox: GeoRect, options?: CameraMoveOptions & { heading?: number; pitch?: number; range?: number; } ) => void; ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-1) ##### `boundingBox` [Section titled “boundingBox”](#boundingbox) **型**: `GeoRect` 対象エリアの地理的な境界を定義するオブジェクトです。 ノート GeoRect に含まれるオプションの詳細については、[GeoRect](#georect) セクションをご参照ください。 ##### `options` [Section titled “options”](#options-1) **省略可能** アニメーション・向き・ズームレベルを制御するオブジェクトです。 **型**: ```ts CameraMoveOptions & { heading?: number; pitch?: number; range?: number; } ``` ノート CameraMoveOptions に含まれるオプションの詳細については、[CameraMoveOptions](#cameramoveoptions) セクションをご参照ください。 **`heading?: number;`** カメラが向く方向をラジアンで指定します。0 は北を指し、正の値は時計回りに回転します。 **`pitch?: number;`** カメラの垂直角度をラジアンで指定します。負の値は下方向に傾きます。 **`range?: number;`** バウンディングボックスの中心からカメラまでの距離をメートルで指定します。ズームレベルを制御します。 #### 戻り値: [Section titled “戻り値:”](#戻り値-5) なし(`void`)。このメソッドは値を返しません。 #### 使用例 [Section titled “使用例”](#使用例-5) ```javascript // 例 1: 2 秒のアニメーションでバウンディングボックスへ移動する reearth.camera.flyToBoundingBox( { west: -74.1, south: 40.7, east: -73.9, north: 40.8 }, // New York City area { duration: 2 } // 2-second animation duration ); // 例 2: アニメーションなしでバウンディングボックスへ移動する reearth.camera.flyToBoundingBox( { west: 139.6, south: 35.6, east: 139.8, north: 35.7 }, // Tokyo area { duration: 0 } ); // 例 3: すべてのパラメータを使用してバウンディングボックスへ移動する reearth.camera.flyToBoundingBox( { west: -122.55, // Western boundary of San Francisco area south: 37.7, // Southern boundary east: -122.35, // Eastern boundary north: 37.85, // Northern boundary }, { duration: 5, // Set animation duration to 5 seconds easing: (t) => t * t, // Custom easing for a slower start heading: 0.785, // Set heading to 0.785 radians (45 degrees clockwise) pitch: -0.523, // Tilt downward to -0.523 radians (30 degrees) range: 4000, // Set camera distance to 4000 meters from the center } ); ``` ### zoomIn [Section titled “zoomIn”](#zoomin) このメソッドは、カメラの高度を下げてシーンに近づけます。ズーム効果は、アニメーションの時間やイージングなどの省略可能な設定でカスタマイズできます。シーン内のオブジェクトやエリアをより詳細に表示する際に役立ちます。 #### 構文 [Section titled “構文”](#構文-6) ```ts reearth.camera.zoomIn: (amount: number, options?: CameraMoveOptions) => void; ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-2) ##### `amount` [Section titled “amount”](#amount) **型**: `number` ズームレベルを指定します。正の値はカメラの高度を下げてシーンに近づけ、値が大きいほどズームレベルが大きくなります。負の値は理論的にカメラを遠ざけます。 ##### `options` [Section titled “options”](#options-2) **省略可能** ズーム操作のアニメーションを制御するオブジェクトです。 **型**:`CameraMoveOptions` ノート CameraMoveOptions に含まれるオプションの詳細については、[CameraMoveOptions](#cameramoveoptions) セクションをご参照ください。 #### 戻り値: [Section titled “戻り値:”](#戻り値-6) なし(`void`)。このメソッドは値を返しません。 #### 使用例 [Section titled “使用例”](#使用例-6) ```javascript // 例 1: アニメーションを使って現在のビューを指定倍率でズームインする reearth.camera.zoomIn(2, { duration: 3, easing: (t) => t * (2 - t), // Quadratic easing in-out }); // 例 2: アニメーションとカスタムイージング関数でズームインする reearth.camera.zoomIn(500, { duration: 3, // Set animation duration to 3 seconds easing: (t) => t * t, // Custom easing function for slower start }); ``` ### zoomOut [Section titled “zoomOut”](#zoomout) このメソッドは、カメラの現在位置を基準に、指定した量だけズームレベルを下げてシーンのより広い視野を提供します。ズーム効果は、アニメーションの時間やイージングなどの省略可能な設定でカスタマイズできます。環境の広い視野を提供したり、広いパースペクティブへ遷移する際に役立ちます。 #### 構文 [Section titled “構文”](#構文-7) ```ts reearth.camera.zoomOut(amount: number, options?: CameraMoveOptions) => void; ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-3) ##### `amount` [Section titled “amount”](#amount-1) **型**: `number` ズームレベルを指定します。正の値はカメラの高度を上げてシーンから遠ざけます。値が大きいほど、より大きなズームアウト効果が得られます。 ##### `options` [Section titled “options”](#options-3) **省略可能** ズーム操作のアニメーションを制御するオブジェクトです。 **型**:`CameraMoveOptions` ノート CameraMoveOptions に含まれるオプションの詳細については、[CameraMoveOptions](#cameramoveoptions) セクションをご参照ください。 #### 戻り値: [Section titled “戻り値:”](#戻り値-7) なし(`void`)。このメソッドは値を返しません。 #### 使用例 [Section titled “使用例”](#使用例-7) ```javascript // 例 1: 即座にズームアウトする reearth.camera.zoomOut(10, { duration: 0 }); // 例 2: カスタムイージング関数でズームアウトする reearth.camera.zoomOut(5, { duration: 2, // Set animation duration to 2 seconds easing: (t) => t * t, // Custom easing for a slower start }); // 例 3: カスタムイージング関数とアニメーションでズームアウトする reearth.camera.zoomOut(15, { duration: 4, // Animation lasts 4 seconds easing: (t) => t * (2 - t), // Custom easing for smooth acceleration and deceleration }); ``` ### lookAt [Section titled “lookAt”](#lookat) このメソッドは、カメラを指定した目的地にフォーカスするよう調整し、カメラの向き・距離・視野角(FOV)を制御できます。シーン内の特定の場所やオブジェクトにユーザーの注意を向ける際に最適です。 #### 構文 [Section titled “構文”](#構文-8) ```ts reearth.camera.lookAt( destination: LookAtDestination, options?: CameraMoveOptions & { fov?: number } ) => void; ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-4) ##### `destination` [Section titled “destination”](#destination-1) **型**: `LookAtDestination` カメラの目標位置を指定するオブジェクトです。 ノート LookAtDestination オブジェクトに含まれるオプションの詳細については、[LookAtDestination](#lookatdestination) セクションをご参照ください。 ##### `options` [Section titled “options”](#options-4) **省略可能** 移動アニメーションと視野角を制御する省略可能なオブジェクトです。 **型**: `CameraMoveOptions & { fov?: number }` **`CameraMoveOptions:`** 移動アニメーションを制御するオブジェクトです。 ノート CameraMoveOptions に含まれるオプションの詳細については、[CameraMoveOptions](#cameramoveoptions) セクションをご参照ください。 **`fov?: number:`** 目的地での視野角(ラジアン単位)を指定します。遷移の一部としてカメラの FOV を調整します。 #### 戻り値: [Section titled “戻り値:”](#戻り値-8) なし(`void`)。このメソッドは値を返しません。 #### 使用例 [Section titled “使用例”](#使用例-8) ```javascript // 例 1: デフォルトアニメーションで特定の座標にフォーカスする reearth.camera.lookAt({ lat: 34.0522, // Latitude for Los Angeles lng: -118.2437, // Longitude for Los Angeles height: 1000, // Altitude in meters }); // 例 2: カスタムの heading・pitch・range で座標にフォーカスする reearth.camera.lookAt( { lat: 51.5074, // Latitude for London lng: -0.1278, // Longitude for London height: 1000, // Altitude in meters heading: 1.57, // Heading in radians (90 degrees clockwise) pitch: -0.785, // Pitch in radians (45 degrees downward) range: 2000, // 2 kilometers from the focus point }, { duration: 3, // Set animation duration to 3 seconds } ); // 例 3: 目的地とオプションのすべてのパラメータを使用する reearth.camera.lookAt( { lat: 35.6895, // Latitude for Tokyo lng: 139.6917, // Longitude for Tokyo height: 500, // Altitude in meters heading: 0.785, // Heading in radians pitch: -0.523, // Pitch in radians range: 1500, // 1.5 kilometers from the focus point radius: 100, // Focus area radius in meters }, { duration: 5, // Animation lasts 5 seconds easing: (t) => t * t, // Custom easing for a slower start fov: 1.2, // Set field of view to 1.2 radians } ); ``` ### getGlobeIntersection [Section titled “getGlobeIntersection”](#getglobeintersection) このメソッドは、カメラのビューと地球の表面または地形との交点を計算します。交点の地理座標(緯度・経度・高度)を返し、オプションでビューポートの可視エリアも計算します。地面や地形との操作(距離の測定や可視性の判定など)を必要とするアプリケーションに特に役立ちます。 #### 構文 [Section titled “構文”](#構文-9) ```ts reearth.camera.getGlobeIntersection: (options: Options) => | { center?: LatLngHeight; viewSize?: number; } | undefined; ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-5) ##### `options` [Section titled “options”](#options-5) 交点計算を制御する省略可能なオブジェクトです。 **型**: ```ts type Options = { withTerrain?: boolean; calcViewSize?: boolean; }; ``` **`withTerrain?: boolean;`**: true の場合、交点計算時に地形の高さを考慮します。デフォルトは false(平坦な地形)です。false または省略の場合、計算は平坦な地球表面を前提とします。 **`calcViewSize?: boolean;`**: true の場合、カメラの視点から地上の可視エリアのサイズ(ビューサイズ)をメートル単位で計算します。デフォルトは false です。 #### 戻り値: [Section titled “戻り値:”](#戻り値-9) **`{center?: LatLngHeight; viewSize?: number;} | undefined`** 交点が見つかった場合はオブジェクトを返し、交点がない場合は undefined を返します。 **`center?: LatLngHeight`**: 交点の地理座標です。 ```ts type LatLngHeight = { lat: number; // Latitude of the intersection point in decimal degrees. lng: number; // Longitude of the intersection point in decimal degrees. height: number; // Height of the intersection point above the ground in meters. }; ``` **`viewSize?: number`**: カメラの視点から見た地上の可視エリアのサイズ(メートル単位)です。 #### 使用例 [Section titled “使用例”](#使用例-9) ```javascript // 例 1: 地形との交点とビューサイズを計算する const intersection = reearth.camera.getGlobeIntersection({ withTerrain: true, // Enable terrain intersection calcViewSize: true, // Calculate visible area size }); if (intersection) { console.log("Intersection Point:", intersection.center); console.log("View Size (meters):", intersection.viewSize); } else { console.log("No intersection found."); } // 例 2: 平坦な地球表面との交点を計算し、ビューサイズは計算しない const intersection = reearth.camera.getGlobeIntersection({ withTerrain: false, // Assume a flat globe surface calcViewSize: false, // Do not calculate the visible area size }); if (intersection && intersection.center) { console.log("Intersection Point:", intersection.center); console.log("Latitude:", intersection.center.lat); console.log("Longitude:", intersection.center.lng); console.log("Height:", intersection.center.height); } else { console.log("No intersection found."); } // 例 3: undefined の交点を安全に処理する const intersection = reearth.camera.getGlobeIntersection({ withTerrain: true, }); if (!intersection) { console.log("No intersection found. The camera may be above the globe."); } else if (intersection.center) { console.log("Latitude:", intersection.center.lat); console.log("Longitude:", intersection.center.lng); console.log("Height:", intersection.center.height); } ``` ### rotateAround [Section titled “rotateAround”](#rotatearound) このメソッドは、カメラを現在のフォーカスポイントを中心に指定した角度(ラジアン)で回転させます。フォーカスポイントを固定したままシーンを探索する際に役立ちます。 #### 構文 [Section titled “構文”](#構文-10) ```ts reearth.camera.rotateAround(radian: number) => void; ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-6) ##### `radian` [Section titled “radian”](#radian) **型**: `number` カメラを回転させる角度(ラジアン単位)です。正の値は時計回りに回転し、負の値は反時計回りに回転します。 #### 戻り値: [Section titled “戻り値:”](#戻り値-10) なし(`void`)。このメソッドは値を返しません。 #### 使用例 [Section titled “使用例”](#使用例-10) ```javascript // 例 1: カメラを時計回りに 1 ラジアン回転させる reearth.camera.rotateAround(1); // 例 2: カメラを反時計回りに -0.5 ラジアン回転させる reearth.camera.rotateAround(-0.5); ``` ### rotateRight [Section titled “rotateRight”](#rotateright) このメソッドは、カメラを現在位置を中心に指定した角度(ラジアン)で右方向に回転させます。外部の特定のポイントにフォーカスすることなく回転します。 #### 構文 [Section titled “構文”](#構文-11) ```ts reearth.camera.rotateRight(radian: number) => void; ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-7) ##### `radian` [Section titled “radian”](#radian-1) **型**: `number` カメラを回転させる角度(ラジアン単位)です。正の値は右方向に回転し、負の値は左方向に回転します。 #### 戻り値: [Section titled “戻り値:”](#戻り値-11) なし(`void`)。このメソッドは値を返しません。 #### 使用例 [Section titled “使用例”](#使用例-11) ```javascript // 例 1: カメラを右方向に 0.785 ラジアン(45 度)回転させる reearth.camera.rotateRight(0.785); // 例 2: カメラを右方向(時計回り)に 1 ラジアン回転させる reearth.camera.rotateRight(1); // 例 3: カメラを左方向(反時計回り)に -1.57 ラジアン(-90 度)回転させる reearth.camera.rotateRight(-1.57); ``` ### orbit [Section titled “orbit”](#orbit) このメソッドは、カメラを地球の中心を軸に指定した角度(ラジアン)で回転させ、グローバルな視点を提供します。異なる角度から地球を素早く探索する際に特に役立ちます。 #### 構文 [Section titled “構文”](#構文-12) ```ts reearth.camera.orbit(radian: number) => void; ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-8) ##### `radian` [Section titled “radian”](#radian-2) **型**: `number` カメラを軌道周回させる角度(ラジアン単位)です。正の値は時計回りに周回し、負の値は反時計回りに周回します。 #### 戻り値: [Section titled “戻り値:”](#戻り値-12) なし(`void`)。このメソッドは値を返しません。 #### 使用例 [Section titled “使用例”](#使用例-12) ```javascript // 例 1: カメラを地球の周りで時計回りに 2 ラジアン周回させる reearth.camera.orbit(2); // 例 2: カメラを地球の周りで反時計回りに -1 ラジアン周回させる reearth.camera.orbit(-1); ``` ### move [Section titled “move”](#move) このメソッドは、カメラを現在位置を基準に指定した方向へ移動させます。シーンを動的にナビゲートし、異なる軸に沿ったカメラの移動を精密に制御する際に役立ちます。 #### 構文 [Section titled “構文”](#構文-13) ```ts reearth.camera.move( direction: "forward" | "backward" | "up" | "down" | "left" | "right", amount: number ) => void; ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-9) ##### `direction` [Section titled “direction”](#direction) **型**: `"forward" | "backward" | "up" | "down" | "left" | "right"` **`forward`**: カメラを前方(向いている方向に近づく方向)へ移動させます。 **`backward`**: カメラを後方(向いている方向から遠ざかる方向)へ移動させます。 **`up`**: カメラを垂直軸に沿って上方向へ移動させます。 **`down`**: カメラを垂直軸に沿って下方向へ移動させます。 **`left`**: カメラを水平軸に沿って左方向へ移動させます。 **`right`**: カメラを水平軸に沿って右方向へ移動させます。 ##### `amount` [Section titled “amount”](#amount-2) **型**: `number` 選択した方向にカメラが移動する距離(メートル単位)を指定します。値が大きいほど移動量が大きくなります。 #### 戻り値: [Section titled “戻り値:”](#戻り値-13) なし(`void`)。このメソッドは値を返しません。 #### 使用例 [Section titled “使用例”](#使用例-13) ```javascript // 例 1: カメラを前方に 500 メートル移動させる reearth.camera.move("forward", 500); // 例 2: カメラを上方向に 200 メートル移動させる reearth.camera.move("up", 200); // 例 3: カメラを左方向に 100 メートル移動させる reearth.camera.move("left", 100); // 例 4: カメラを後方に 300 メートル移動させる reearth.camera.move("backward", 300); ``` ### setView [Section titled “setView”](#setview) このメソッドは、アニメーションなしでカメラを指定した位置と向きに即座に設定します。位置・向き・視野角(FOV)を精密に制御して、カメラを特定のビューにすばやく配置する際に最適です。 #### 構文 [Section titled “構文”](#構文-14) ```ts reearth.camera.setView( view: CameraPosition & { fov?: number } ) => void; ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-10) ##### `view` [Section titled “view”](#view) **型**: `CameraPosition & { fov?: number }` カメラの位置・向き・省略可能な視野角を定義するオブジェクトです。 ノート CameraPosition に含まれるオプションの詳細については、[CameraPosition](#cameraposition) セクションをご参照ください。 **`fov?: number:`** カメラの省略可能な視野角(ラジアン単位)で、カメラの視野角を制御します。 #### 戻り値: [Section titled “戻り値:”](#戻り値-14) なし(`void`)。このメソッドは値を返しません。 #### 使用例 [Section titled “使用例”](#使用例-14) ```javascript // 例 1: heading・pitch・roll を指定してカメラを特定の位置に設定する reearth.camera.setView({ lat: 35.6895, // Latitude for Tokyo lng: 139.6917, // Longitude for Tokyo height: 1000, // Altitude in meters heading: 1.57, // Heading in radians (90 degrees clockwise) pitch: -0.785, // Pitch in radians (45 degrees downward) roll: 0, // No roll }); // 例 2: カスタムの視野角でカメラを設定する reearth.camera.setView({ lat: 48.8566, // Latitude for Paris lng: 2.3522, // Longitude for Paris height: 1500, // Altitude in meters heading: 0.785, // Heading in radians (45 degrees clockwise) pitch: -0.523, // Pitch in radians (30 degrees downward) roll: 0, // No roll fov: 1.2, // Field of view in radians }); // 例 3: heading・pitch・roll なしでカメラを設定する reearth.camera.setView({ lat: 40.7128, // Latitude for New York City lng: -74.006, // Longitude for New York City height: 2000, // Altitude in meters }); ``` ## イベント [Section titled “イベント”](#イベント) ノート 共通のイベントメソッド(`on`、`off`)の詳細については、[イベント](/ja/developer/plugin/api-reference/events) ページをご参照ください。 ### move [Section titled “move”](#move-1) このイベントは、`reearth` 環境内でカメラの位置または向きが変化するたびに発生します。カメラの動きを監視して応答し、更新されたカメラの位置と向きを取得することができます。 #### 構文 [Section titled “構文”](#構文-15) ```ts reearth.camera.on("move", (camera: CameraPosition) => void): void; ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-11) ##### `camera` [Section titled “camera”](#camera) **型**: `CameraPosition` move イベントが発生するたびに呼び出される関数です。コールバックは引数として更新されたカメラ位置を受け取ります。 ノート CameraPosition に含まれるオプションの詳細については、[CameraPosition](#cameraposition) セクションをご参照ください。 #### 使用例 [Section titled “使用例”](#使用例-15) ```javascript // 例 1: カメラの移動を監視して更新された位置をログに出力する reearth.camera.on("move", (camera) => { console.log("Camera moved:"); console.log("Latitude:", camera.lat); console.log("Longitude:", camera.lng); console.log("Height:", camera.height); console.log("Heading:", camera.heading); console.log("Pitch:", camera.pitch); console.log("Roll:", camera.roll); }); // 例 2: カメラが移動するたびにカスタムアクションを実行する reearth.camera.on("move", (camera) => { if (camera.lat && camera.lng) { console.log(`Camera moved to ${camera.lat}, ${camera.lng}`); } }); ``` ## 型定義 [Section titled “型定義”](#型定義) ### CameraPosition [Section titled “CameraPosition”](#cameraposition) 詳細な位置と向きのデータを含むオブジェクトです。 ```javascript type CameraPosition = { lat?: number; lng?: number; height?: number; heading?: number; pitch?: number; roll?: number; }; ``` **`lat?: number;`**: カメラが位置する緯度(10 進数の度単位)です。 **`lng?: number;`**: カメラが位置する経度(10 進数の度単位)です。 **`height?: number`**: 地球の表面からのカメラの高度(メートル単位)で、カメラの高低を決定します。 **`heading?: number;`**: カメラが向く方向です。0 は北を指し、値が増加するにつれて時計回りに回転します(ラジアン単位)。 **`pitch?: number;`**: ピッチ角(カメラの垂直方向の傾き)です。正の値は上方向、負の値は下方向に傾きます(ラジアン単位)。 **`roll?: number;`**: ロール角(視線方向を軸としたカメラの回転)です(ラジアン単位)。 ### GeoRect [Section titled “GeoRect”](#georect) 現在のビューポートの地理的な境界を表すオブジェクトです。 ```javascript type GeoRect = { west: number; south: number; east: number; north: number; }; ``` **`west: number`**: ビューポートの西端の境界(経度の10 進数の度単位)です。 **`south: number`**: ビューポートの南端の境界(緯度の10 進数の度単位)です。 **`east: number`**: ビューポートの東端の境界(経度の10 進数の度単位)です。 **`north: number`**: ビューポートの北端の境界(緯度の10 進数の度単位)です。 ### CameraMoveOptions [Section titled “CameraMoveOptions”](#cameramoveoptions) 移動アニメーションを制御するオブジェクトです。 ```javascript type CameraMoveOptions = { duration?: number; // in seconds easing?: (time: number) => number; }; ``` **`duration?: number;`** カメラ移動の時間を秒単位で指定します。即座に移動するには `0` を使用します。省略した場合はデフォルトの時間が使用されます。 **`easing?: (time: number) => number;`** アニメーションの速度を制御するカスタムイージング関数です。time は 0 から 1 の間の正規化された値です。 ### LookAtDestination [Section titled “LookAtDestination”](#lookatdestination) カメラの目標位置を指定するオブジェクトです。 ```javascript type LookAtDestination = { lat?: number; lng?: number; height?: number; heading?: number; pitch?: number; range?: number; radius?: number; }; ``` **`lat?: number`** 目標位置の緯度(10 進数の度単位)です。 **`lng?: number;`** 目標位置の経度(10 進数の度単位)です。 **`height?: number;`** 海抜からの目標位置の高度(メートル単位)です。 **`heading?: number;`** カメラの向き(ラジアン単位)です(0 = 北、正の値は時計回りに回転)。 **`pitch?: number;`** カメラの垂直方向の傾き(ラジアン単位)です。負の値は下方向に傾きます。 **`range?: number;`** カメラから目標位置までの距離(メートル単位)です。 **`radius?: number;`** 目標周辺の半径を指定し、目標を見ながらカメラが目標からどれだけ離れるかを制御します。 # reearth.data > `reearth.data` の API リファレンスです。 **`reearth.data`** 名前空間は、`reearth` プラグインにおけるクライアントサイドストレージを管理するメソッドを提供します。データの非同期な取得・更新・削除、ストレージキーの管理、およびストア全体のクリアが可能です。この名前空間は、ユーザー設定、セッションデータ、または一時的な設定を永続化する際に便利です。 ## reearth.data.clientStorage [Section titled “reearth.data.clientStorage”](#reearthdataclientstorage) clientStorage は、軽量で非同期なキーバリューストレージシステムを管理するインターフェースを提供します。プラグインのクライアントサイドストレージに対して、読み取り・書き込み・削除などの操作を行うメソッドを備えています。 ### setAsync [Section titled “setAsync”](#setasync) キーと値のペアをストレージに保存します。 #### 構文 [Section titled “構文”](#構文) ```ts reearth.data.clientStorage.setAsync(key: string, value: unknown): Promise ``` #### パラメータ [Section titled “パラメータ”](#パラメータ) ##### key [Section titled “key”](#key) **型** `string` 値に関連付けるキーです。 ##### value [Section titled “value”](#value) **型** `unknown` 保存する値です。 #### 戻り値 [Section titled “戻り値”](#戻り値) **型** `Promise` キーと値のペアが保存されると解決される Promise です。 ### getAsync [Section titled “getAsync”](#getasync) 指定したキーに関連付けられた値を取得します。 #### 構文 [Section titled “構文”](#構文-1) ```ts reearth.data.clientStorage.getAsync(key: string): Promise ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-1) ##### key [Section titled “key”](#key-1) **型** `string` 取得する値のキーです。 #### 戻り値 [Section titled “戻り値”](#戻り値-1) **型** `Promise` キーに関連付けられた値で解決される Promise です。キーが存在しない場合は `undefined` で解決されます。 ### keysAsync [Section titled “keysAsync”](#keysasync) クライアントストレージに保存されているすべてのキーを取得します。 #### 構文 [Section titled “構文”](#構文-2) ```ts reearth.data.clientStorage.keysAsync(): Promise ``` #### 戻り値 [Section titled “戻り値”](#戻り値-2) **型** `Promise` 各キーを表す文字列の配列で解決される Promise です。 ### deleteAsync [Section titled “deleteAsync”](#deleteasync) 指定したキーと値のペアをストレージから削除します。 #### 構文 [Section titled “構文”](#構文-3) ```ts reearth.data.clientStorage.deleteAsync(key: string): Promise ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-2) ##### key [Section titled “key”](#key-2) **型** `string` 削除する値のキーです。 #### 戻り値 [Section titled “戻り値”](#戻り値-3) **型** `Promise` キーと値のペアが削除されると解決される Promise です。 ### dropStoreAsync [Section titled “dropStoreAsync”](#dropstoreasync) クライアントストレージのすべてのデータを消去します。 #### 構文 [Section titled “構文”](#構文-4) ```ts reearth.data.clientStorage.dropStoreAsync(): Promise ``` #### 戻り値 [Section titled “戻り値”](#戻り値-4) **型** `Promise` ストレージが消去されると解決される Promise です。 # イベント > プラグイン API における共通のイベント処理 Re:Earth Visualizer プラグイン API は、さまざまなコンポーネントにわたってイベントを処理するための一貫したパターンを提供します。イベントを使用することで、プラグインはユーザーのインタラクションやシステムの変化にリアルタイムで応答できます。 ## 共通イベントメソッド [Section titled “共通イベントメソッド”](#共通イベントメソッド) Re:Earth Visualizer のすべてのイベント対応コンポーネントは、イベントのサブスクライブおよびアンサブスクライブに同じパターンを共有しています。 ### on [Section titled “on”](#on) `on` メソッドを使用すると、指定したイベントが発生したときに呼び出されるイベントリスナーを登録できます。 #### 構文 [Section titled “構文”](#構文) ```typescript on( type: T, callback: (...args: EventType[T]) => void, options?: { once?: boolean } ): void ``` #### パラメータ [Section titled “パラメータ”](#パラメータ) * **type**: 待ち受けるイベントタイプ * **callback**: イベント発生時に実行する関数 * **options**(省略可能): 設定オプション * **once**: `true` に設定すると、リスナーは一度呼び出された後に自動的に削除されます #### 使用例 [Section titled “使用例”](#使用例) ```javascript // 基本的なイベントリスナー reearth.popup.on("close", () => { console.log("Popup was closed"); }); // 一度だけトリガーされるイベントリスナー reearth.layers.on( "select", (layerId, featureId) => { console.log("Layer selected (this will only trigger once):", layerId, featureId); }, { once: true } ); ``` ### off [Section titled “off”](#off) `off` メソッドを使用すると、以前に登録したイベントリスナーを削除できます。 #### 構文 [Section titled “構文”](#構文-1) ```typescript off( type: T, callback: (...args: EventType[T]) => void ): void ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-1) * **type**: 登録を解除するイベントタイプ * **callback**: `on` で登録した関数 #### 使用例 [Section titled “使用例”](#使用例-1) ```javascript // コールバック関数を定義する const handleClose = () => { console.log("Popup was closed"); }; // イベントリスナーを登録する reearth.popup.on("close", handleClose); // リスニングを停止する場合 reearth.popup.off("close", handleClose); ``` ## イベントタイプ [Section titled “イベントタイプ”](#イベントタイプ) Re:Earth Visualizer の各コンポーネントには独自のイベントタイプがあります。特定のイベントの詳細については、各コンポーネントのドキュメントを参照してください。 # reearth.extension > `reearth.extension` の API リファレンスです。 **`reearth.extension`** 名前空間は、アクティブなプラグイン拡張の機能とプロパティへのアクセスを提供します。ウィジェット、ブロック、または `reearth` 環境内の他の拡張インスタンスなど、異なるコンポーネント間の通信メソッドを含みます。 ## プロパティ [Section titled “プロパティ”](#プロパティ) ### block [Section titled “block”](#block) `block` プロパティは、プラグインのストーリーブロックまたはインフォボックスブロックへのアクセスを提供します。ブロックにはメタデータ、プラグインの詳細、プロパティが含まれ、インフォボックスブロックの場合は関連レイヤも含まれます。このプロパティは `reearth` 環境内のコンテンツブロックを操作する際に有用です。 注意 このプロパティは、`storyBlock` または `infoboxBlock` タイプの拡張内で実行された場合のみ利用可能です。 #### 構文 [Section titled “構文”](#構文) ```ts reearth.extension.block?: PluginStoryBlock | (PluginInfoboxBlock & { layer?: Layer }); ``` #### 戻り値 [Section titled “戻り値”](#戻り値) **型** `PluginStoryBlock | (PluginInfoboxBlock & { layer?: Layer });` メタデータ、プラグインの詳細、プロパティを含むプラグインブロックオブジェクトです。インフォボックスブロックの場合は、関連レイヤも含まれます。 **`PluginStoryBlock`**: プラグイン内でナラティブやシーケンスを作成するために特別に設計されたコンテンツブロックであるストーリーブロックを表します。 ノート `PluginStoryBlock` に含まれるオプションの詳細については、[PluginStoryBlock](#pluginstoryblock) セクションを参照してください。 **`PluginInfoboxBlock`**: 関連レイヤを含む場合があるインフォボックスブロックを表します。 ノート `PluginInfoboxBlock` に含まれるオプションの詳細については、[PluginInfoboxBlock](#plugininfoboxblock) セクションを参照してください。 **`layer?: Layer`**: インフォボックスブロックに関連付けられたレイヤを表します。メタデータ、データソースの詳細、表示設定を含みます。 ノート `Layer` に含まれるオプションの詳細については、[Layer](#layer) セクションを参照してください。 #### 使用例 [Section titled “使用例”](#使用例) ```javascript // 例 1: ストーリーブロックの詳細を取得する const block = reearth.extension.block; if (block && block.extensionType === "storyBlock") { console.log("Story Block ID:", block.id); console.log("Plugin ID:", block.pluginId); console.log("Block Name:", block.name); } // 例 2: インフォボックスブロックに関連付けられたレイヤにアクセスする const block = reearth.extension.block; if (block && block.extensionType === "infoboxBlock" && block.layer) { const layer = block.layer; console.log(`Layer ID: ${layer.id}`); console.log(`Layer Title: ${layer.title}`); console.log(`Layer Type: ${layer.type}`); } ``` ### widget [Section titled “widget”](#widget) `widget` プロパティは、プラグインのウィジェットに関する情報(ID、レイアウト、表示設定など)へのアクセスを提供します。ウィジェットは `reearth` 環境内で動的に配置およびスタイル設定できる UI コンポーネントです。 注意 このプロパティは、`widget` タイプの拡張内で実行された場合のみ利用可能です。 #### 構文 [Section titled “構文”](#構文-1) ```ts reearth.extension.widget?: Widget; ``` #### 戻り値 [Section titled “戻り値”](#戻り値-1) **型** `Widget` ノート `Widget` の詳細については、[Widget](#widget-1) セクションを参照してください。 #### 使用例 [Section titled “使用例”](#使用例-1) ```javascript // ウィジェットの詳細を確認してログ出力する const widget = reearth.extension.widget; if (widget) { console.log("Widget ID:", widget.id); console.log("Plugin ID:", widget.pluginId); console.log("Extension ID:", widget.extensionId); console.log("Property ID:", widget.propertyId); console.log("Extended Horizontally:", widget.extended?.horizontally); console.log("Extended Vertically:", widget.extended?.vertically); } ``` ### list [Section titled “list”](#list) このプロパティは、ウィジェット、ブロック、その他のサポートされているタイプを含む、すべてのプラグイン拡張インスタンスの配列へのアクセスを提供します。各インスタンスには、プラグインと拡張に関するメタデータが含まれます。 #### 構文 [Section titled “構文”](#構文-2) ```ts reearth.extension.list: PluginExtensionInstance[]; ``` #### 戻り値 [Section titled “戻り値”](#戻り値-2) **型** `PluginExtensionInstance[];` `list` 配列の各エントリは、プラグイン拡張のインスタンスを表します。 ノート `PluginExtensionInstance` に含まれるオプションの詳細については、[PluginExtensionInstance](#pluginextensioninstance) セクションを参照してください。 #### 使用例 [Section titled “使用例”](#使用例-2) ```javascript // 例 1: すべての拡張インスタンスとそのメタデータをログ出力する const extensionInstances = reearth.extension.list; extensionInstances.forEach((instance) => { console.log("Extension Instance ID:", instance.id); console.log("Plugin ID:", instance.pluginId); console.log("Name:", instance.name); console.log("Extension ID:", instance.extensionId); console.log("Type:", instance.extensionType); console.log("Run Times:", instance.runTimes ?? "Not Available"); }); // 例 2: ウィジェット拡張のみをフィルタリングしてログ出力する const widgets = reearth.extension.list.filter( (instance) => instance.extensionType === "widget" ); console.log("Widget Extensions:"); widgets.forEach((widget) => { console.log(`- ${widget.name} (ID: ${widget.id})`); }); ``` ## メソッド [Section titled “メソッド”](#メソッド) ### postMessage [Section titled “postMessage”](#postmessage) このメソッドにより、プラグイン拡張は一意の ID を指定して特定のウィジェット、ブロック、または他の拡張インスタンスにメッセージを送信できます。この機能はプラグイン内のコンポーネント間通信を実現するために有用です。 #### 構文 [Section titled “構文”](#構文-3) ```ts reearth.extension.postMessage(id: string, message: any) => void; ``` #### パラメータ [Section titled “パラメータ”](#パラメータ) ##### `id` [Section titled “id”](#id) **型**: `string` メッセージの送信先となるターゲットインスタンスの拡張 ID です。 ##### `message` [Section titled “message”](#message) **型**: `any` 送信するメッセージです。 #### 戻り値: [Section titled “戻り値:”](#戻り値-3) なし(void)。このメソッドは値を返さずに処理を実行します。 #### 使用例 [Section titled “使用例”](#使用例-3) ```javascript // "my-widget-name" という名前のウィジェットにメッセージを送信する const extensionInstances = reearth.extension.list; const targetWidgetId = extensionInstances.find( (extension) => extension.name === "my-widget-name" )?.id; if (targetWidgetId) { reearth.extension.postMessage(targetWidgetId, { action: "update", data: { key: "value" }, }); } ``` ## イベント [Section titled “イベント”](#イベント) ノート 共通のイベントメソッド(`on`、`off`)の詳細については、[イベント](/ja/developer/plugin/api-reference/events) ページを参照してください。 ### message [Section titled “message”](#message-1) `message` イベントは、拡張に対してメッセージが送信されるたびにトリガーされます。このイベントは\*\*現在の拡張の UI(またはモーダル、ポップアップ)\*\*からのメッセージを受信するために使用されます。 #### 構文 [Section titled “構文”](#構文-4) ```ts reearth.extension.on("message", (message: unknown) => void): void; ``` #### 使用例 [Section titled “使用例”](#使用例-4) ```javascript reearth.extension.on("message", (message) => { console.log("Received message:", message); }); ``` ### extensionMessage [Section titled “extensionMessage”](#extensionmessage) `extensionMessage` イベントは、**別の拡張インスタンス**からメッセージが送信されたときにトリガーされます。データペイロードと送信者の ID を含む追加のコンテキストを提供します。 #### 構文 [Section titled “構文”](#構文-5) ```ts reearth.extension.on("extensionMessage", (props: ExtensionMessage) => void): void; ``` #### 使用例 [Section titled “使用例”](#使用例-5) ```javascript reearth.extension.on("extensionMessage", (props) => { console.log("Message from:", props.sender); console.log("Message data:", props.data); }); ``` ## 型定義 [Section titled “型定義”](#型定義) ### PluginStoryBlock [Section titled “PluginStoryBlock”](#pluginstoryblock) ```javascript type PluginStoryBlock = Omit< StoryBlock, "propertyForPluginAPI" | "propertyItemsForPluginBlock" >; type StoryBlock = { id: string; name?: string | null; pluginId: string; extensionId: string; extensionType?: "storyBlock"; propertyId?: string; property?: any; propertyForPluginAPI?: any; propertyItemsForPluginBlock?: Item[]; }; ``` **`id: string;`**: ストーリーブロックの一意の識別子です。複数のブロックを扱う際に各ブロックを区別するために必要です。 **`name?: string | null;`**: ストーリーブロックの名前です。省略可能で、指定されない場合は `null` になることがあります。 **`pluginId: string;`**: このストーリーブロックが属するプラグインの一意の ID です。ブロックを親プラグインに関連付けるために使用します。 **`extensionId: string;`**: このブロックを作成したプラグイン拡張の一意の ID です。プラグイン内でブロックのソースを追跡するために有用です。 **`extensionType?: "storyBlock";`**: 拡張のタイプを `"storyBlock"` として指定します。このプロパティにより、`infoboxBlock` などの他のブロックタイプと区別できます。 **`propertyId?: string;`**: ブロックの設定や他の場所に保存されたメタデータにリンクする省略可能なプロパティ ID です。 **`property?: any;`**: ブロックに関連付けられたカスタムプロパティです。 ### PluginInfoboxBlock [Section titled “PluginInfoboxBlock”](#plugininfoboxblock) ```javascript type PluginInfoboxBlock = Omit< InfoboxBlock, "propertyForPluginAPI" | "propertyItemsForPluginBlock" >; type InfoboxBlock

= { id: string; name?: string; pluginId?: string; extensionId?: string; extensionType?: "infoboxBlock"; propertyId?: string; property?: P; propertyForPluginAPI?: any; propertyItemsForPluginBlock?: Item[]; }; ``` **`id: string;`**: インフォボックスブロックの一意の識別子です。各ブロックを容易に識別できるようにします。 **`name?: string;`**: インフォボックスブロックの省略可能な名前です。インフォボックスのラベルやタイトルを表すことがあります。 **`pluginId?: string;`**: このインフォボックスブロックが属するプラグインの一意の ID です。省略可能で、常に存在するとは限りません。 **`extensionId: string;`**: このインフォボックスブロックを作成したプラグイン拡張の一意の ID です。その出所を識別するために使用します。 **`extensionType?: "infoboxBlock";`**: 拡張のタイプを `"infoboxBlock"` として指定します。処理するブロックのタイプを判別するために重要なプロパティです。 **`propertyId?: string;`**: ブロックの設定やメタデータにリンクする省略可能なプロパティ ID です。`PluginStoryBlock` と同様に、動的なプロパティ管理を可能にします。 **`property?: P;`**: ブロックに関連付けられたカスタムプロパティを表します。型はジェネリックパラメータ `P` によって決定され、プラグインの特定のニーズに合わせて動的に適応できます。 ### Layer [Section titled “Layer”](#layer) ```javascript type Layer = { id: string; // A unique identifier for the layer. title?: string; visible?: boolean; // Flag indicating whether the layer is visible by default. Default is true infobox?: Infobox; // An infobox that can display additional interactive or informational content type: "simple"; data?: { type: | "geojson" | "3dtiles" | "osm-buildings" | "google-photorealistic" | "czml" | "csv" | "wms" | "mvt" | "kml" | "gpx" | "shapefile" | "gtfs" | "gml" | "georss" | "gltf" | "tiles" | "tms" | "heatMap"; url?: string; // URL of data source value?: any; layers?: string | string[]; jsonProperties?: string[]; isSketchLayer?: boolean; updateInterval?: number; // milliseconds parameters?: Record; idProperty?: string; time?: { property?: string; interval?: number; // milliseconds updateClockOnLoad?: boolean; }; csv?: { idColumn?: string | number; latColumn?: string | number; lngColumn?: string | number; heightColumn?: string | number; noHeader?: boolean; disableTypeConversion?: boolean; }; geojson?: { useAsResource?: boolean; }; }; properties?: any; defines?: Record; events?: Events; layerStyleId?: string; marker?: MarkerAppearance; polyline?: PolylineAppearance; polygon?: PolygonAppearance; model?: ModelAppearance; "3dtiles"?: Cesium3DTilesAppearance; }; ``` ### Widget [Section titled “Widget”](#widget-1) ```javascript type Widget = { readonly id: string; readonly pluginId?: string; readonly extensionId?: string; readonly property?: unknown; readonly propertyId?: string; readonly extended?: { horizontally: boolean; vertically: boolean; }; readonly layout?: WidgetLayout; }; ``` **`id: string;`**: ウィジェットの一意の識別子です。 **`pluginId?: string;`**:(省略可能)このウィジェットを所有するプラグインの ID です。ウィジェットがどのプラグインに属するかを識別するために有用です。 **`extensionId?: string;`**:(省略可能)ウィジェットを作成したプラグイン拡張の ID です。同じプラグインの異なる拡張によって作成されたウィジェットを区別するために使用できます。 **`property?: unknown;`**:(省略可能)ウィジェットに関連付けられたカスタムプロパティです。プロパティの正確な構造は、特定のプラグインの実装に依存します。 **`propertyId?: string;`**:(省略可能)ウィジェットの設定またはメタデータの一意の識別子です。外部設定や保存されたプロパティへのリンクに使用します。 **`extended?: { horizontally: boolean; vertically: boolean };`**:(省略可能)ウィジェットが特定の方向に拡張されているかどうかを示します。このプロパティはウィジェットのレイアウトと動作を判断するために有用です。 * `horizontally: boolean`: ウィジェットが水平方向に拡張されている場合は `true`、そうでない場合は `false`。 * `vertically: boolean`: ウィジェットが垂直方向に拡張されている場合は `true`、そうでない場合は `false`。 このプロパティは省略可能で、常に存在するとは限りません。省略された場合、ウィジェットはいずれの方向にも拡張されません。 **`layout?: WidgetLayout;`**:(省略可能)Reearth UI 内でのウィジェットの位置と配置を指定します。以下の [WidgetLayout](#widgetlayout) の定義を参照してください。 ### WidgetLayout [Section titled “WidgetLayout”](#widgetlayout) ```javascript type WidgetLayout = { location: WidgetLocation; align?: WidgetAlignment; }; ``` `WidgetLayout` 型は、Reearth インターフェース内でウィジェットがどのように配置されるかを定義します。 **`location: WidgetLocation;`**: インターフェース内でのウィジェットの正確な位置を指定します。詳細については [WidgetLocation](#widgetlocation) を参照してください。 **`align?: WidgetAlignment;`**:(省略可能)ウィジェットのエリア内での配置方法を決定します。指定しない場合はデフォルトの配置になります。詳細については [WidgetAlignment](#widgetalignment) を参照してください。 ### WidgetLocation [Section titled “WidgetLocation”](#widgetlocation) ```javascript type WidgetLocation = { zone: "inner" | "outer"; section: "left" | "center" | "right"; area: "top" | "middle" | "bottom"; }; ``` `WidgetLocation` 型は、`reearth` インターフェース内でのウィジェットの階層的な位置を定義します。UI ゾーンに対するウィジェットの配置位置を記述します。 **`zone: "inner" | "outer";`**: ウィジェットが配置される UI ゾーンを指定します: * `"inner"`: ウィジェットがメインコンテンツエリア内にあることを示します。 * `"outer"`: ウィジェットが周辺 UI(例: サイドバー、ヘッダー)にあることを示します。 **`section: "left" | "center" | "right";`**: ゾーン内のセクションを示します: * `"left"`: 左セクション。 * `"center"`: 中央セクション。 * `"right"`: 右セクション。 **`area: "top" | "middle" | "bottom";`**: セクション内の垂直エリアを定義します: * `"top"`: セクションの上部。 * `"middle"`: セクションの中央。 * `"bottom"`: セクションの下部。 ### WidgetAlignment [Section titled “WidgetAlignment”](#widgetalignment) ```javascript type WidgetAlignment = "start" | "centered" | "end"; ``` `WidgetAlignment` 型は、ウィジェットがそのエリア内でどのように整列されるかを指定します。 **`"start";`**: ウィジェットをエリアの先頭(例: 左上隅)に整列させます。 **`"centered";`**: ウィジェットをエリアの中央に配置します。 **`"end";`**: ウィジェットをエリアの末尾(例: 右下隅)に整列させます。 ### PluginExtensionInstance [Section titled “PluginExtensionInstance”](#pluginextensioninstance) ```javascript type PluginExtensionInstance = { readonly id: string; readonly pluginId: string; readonly name: string; readonly extensionId: string; readonly extensionType: "widget" | "block" | "infoboxBlock" | "storyBlock"; }; ``` **`id: string;`**: 拡張インスタンスの一意の識別子です。この ID は `reearth` 環境内でインスタンスを参照するために使用されます。 **`pluginId: string;`**: 拡張インスタンスが属するプラグインの一意の ID です。インスタンスを親プラグインにリンクします。 **`name: string;`**: 拡張インスタンスの名前です。通常、インスタンスを識別するための人が読める名前です。 **`extensionId: string;`**: インスタンスを作成したプラグイン拡張の一意の ID です。同じプラグイン内の拡張を区別するために使用します。 **`extensionType: "widget" | "block" | "infoboxBlock" | "storyBlock";`**: インスタンスが表す拡張のタイプです。指定可能な値は以下の通りです: * `"widget"`: ウィジェット拡張。 * `"infoboxBlock"`: インフォボックスブロック拡張。 * `"storyBlock"`: ストーリーブロック拡張。 # reearth.layers > `reearth.layers` の API リファレンスです。 **`reearth.layers`** 名前空間は、reearth シーン内のレイヤを管理・操作するためのメソッド群を提供します。プラグイン開発者はこれらのメソッドを使用して、レイヤのプログラム的な追加・検索・変更・削除を行うことができます。 ## プロパティ [Section titled “プロパティ”](#プロパティ) ### layers [Section titled “layers”](#layers) このプロパティは、**`reearth`** シーンに現在存在するすべてのレイヤのリストを提供します。プラグイン開発者はこれを使用して、必要に応じてレイヤへのアクセスや操作を行うことができます。このプロパティは **`LazyLayer`** オブジェクトの配列を返し、各オブジェクトはシーン内の個別のレイヤを表します。 #### 構文 [Section titled “構文”](#構文) ```ts reearth.layers.layers: LazyLayer[]; ``` #### 戻り値 [Section titled “戻り値”](#戻り値) **Type** `LazyLayer[]` 各要素がシーン内の個別のレイヤを表す **`LazyLayer`** オブジェクトの配列です。 ノート **`LazyLayer`** オブジェクトはレイヤの軽量な表現形式です。プロパティへのアクセスは必要に応じて明示的に行う必要があります。 LazyLayer 型の詳細については、[LazyLayer 型](#lazylayer-%E5%9E%8B) セクションを参照してください。 ### overridden [Section titled “overridden”](#overridden) これは省略可能なプロパティで、`reearth` シーン内でプロパティがオーバーライドされたレイヤを提供します。このメソッドを使用することで、レイヤのオーバーライド状態を確認できます。ユーザー操作、アプリケーション状態の変化、または外部データの更新に応じてレイヤプロパティを調整する必要がある場合に特に有用です。 #### 構文 [Section titled “構文”](#構文-1) ```ts reearth.layers.overridden: OverriddenLayer[]; ``` #### 戻り値 [Section titled “戻り値”](#戻り値-1) **Type** `Omit` `Layer` 型定義から `type` と `children` を除いた型です。 #### 使用例 [Section titled “使用例”](#使用例) ```javascript // Check if there are any overridden properties defined if (reearth.layers.overridden) { console.log("Overridden properties are defined."); // Iterate through the overridden properties and log each one for (const layer of reearth.layers.overridden) { console.log(`Layer ID: ${layer.id}, Overridden Properties:`, layer); } } else { console.log("No overridden properties are defined."); } ``` ### selected [Section titled “selected”](#selected) これは `reearth` プロジェクト内で現在選択されているレイヤを表します。レイヤが選択されている場合は `ComputedLayer` オブジェクトを保持し、選択されていない場合は `undefined` となる省略可能なプロパティです。このプロパティを使用することで、選択中のレイヤの詳細に直接アクセスでき、特定のレイヤデータの照会、プロパティの変更、または UI コンポーネントへの追加情報の表示など、ユーザーの選択に依存した操作を容易に行うことができます。 #### 構文 [Section titled “構文”](#構文-2) ```ts reearth.layers.selected?: computedLayer; ``` #### 戻り値 [Section titled “戻り値”](#戻り値-2) **Type** `ComputedLayer` すべての処理が完了した後に得られるレイヤで、元の地理データと処理済みの地理データの両方、および適用・評価済みのスタイルと状態を含みます。 ノート **`ComputedLayer`** オブジェクトはレイヤの軽量な表現形式です。プロパティへのアクセスは必要に応じて明示的に行う必要があります。 ComputedLayer 型の詳細については、[ComputedLayer 型](#computedlayer-%E5%9E%8B) セクションを参照してください。 #### 使用例 [Section titled “使用例”](#使用例-1) ```javascript // Check if there is a selected layer and log its details if (reearth.layers.selected) { console.log("Selected Layer ID:", reearth.layers.selected.id); console.log("Selected Layer Title:", reearth.layers.selected.layer?.title); } else { console.log("No layer is currently selected."); } ``` ### selectedFeature [Section titled “selectedFeature”](#selectedfeature) これは `reearth` プロジェクト内で現在選択されているフィーチャーを表します。フィーチャーが選択されている場合は `feature` オブジェクトを保持し、選択されていない場合は `undefined` となる省略可能なプロパティです。このプロパティを使用することで、選択中のフィーチャーの詳細に直接アクセスでき、特定のフィーチャーデータの照会やプラグイン拡張への追加情報の表示など、ユーザーの選択に依存した操作を容易に行うことができます。 #### 構文 [Section titled “構文”](#構文-3) ```ts reearth.layers.selectedFeature?: computedFeature; ``` #### 戻り値 [Section titled “戻り値”](#戻り値-3) **Type** `ComputedFeature` すべての最終評価済みプロパティとスタイルが適用された、単一の地理的フィーチャー(点、線、ポリゴン等)です。 ノート ComputedFeature 型の詳細については、[ComputedFeature 型](#computedfeature-%E5%9E%8B) セクションを参照してください。 #### 使用例 [Section titled “使用例”](#使用例-2) ```javascript // Check if there is a selected feature and log its details if (reearth.layers.selectedFeature) { console.log("Selected Feature ID:", reearth.layers.selectedFeature.id); } else { console.log("No Feature is currently selected."); } ``` ## メソッド [Section titled “メソッド”](#メソッド) ### add [Section titled “add”](#add) このメソッドは、**`reearth`** シーンに新しいレイヤを追加するために使用します。画像、データ表現、インタラクティブウィジェットなどの追加コンテンツレイヤでシーンを動的に拡張するために欠かせないメソッドです。主な引数として **`Layer`** オブジェクトを受け取り、追加するレイヤの特性とプロパティを定義します。 #### 構文 [Section titled “構文”](#構文-4) ```ts reearth.layers.add: (layer: Layer) => string | undefined; ``` #### パラメータ [Section titled “パラメータ”](#パラメータ) ##### `layer` [Section titled “layer”](#layer) **Type**: `Layer` レイヤの作成と管理に必要なすべてのデータとメタデータを含むオブジェクトです。シーンに追加するレイヤの特性とプロパティを定義します。 ノート Layer 型およびレイヤアピアランス型の詳細については、[Layer 型](#layer-%E5%9E%8B) および [レイヤアピアランス型](#%E3%83%AC%E3%82%A4%E3%83%A4%E3%82%A2%E3%83%94%E3%82%A2%E3%83%A9%E3%83%B3%E3%82%B9%E5%9E%8B) セクションを参照してください。 #### 戻り値 [Section titled “戻り値”](#戻り値-4) **Type** `string | undefined` 操作が成功した場合、新しく追加されたレイヤの一意の識別子 `id` を返します。この識別子は以降の操作や照会に使用できます。操作が失敗した場合は `undefined` を返します。 #### 使用例 [Section titled “使用例”](#使用例-3) * マーカーの追加 ```javascript const newLayerId = reearth.layers.add({ type: "simple", data: { type: "geojson", value: { type: "FeatureCollection", features: [ { type: "Feature", properties: {}, geometry: { coordinates: [139.97422779688281, 35.74642872517698], type: "Point", }, }, ], }, }, // marker property is required to indicate that the layer needs a marker appearance marker: {}, }); if (newLayerId) { console.log("Layer added successfully with ID:", newLayerId); } else { console.log("Failed to add layer."); } ``` * ポリラインの追加 ```javascript const newLayerId = reearth.layers.add({ type: "simple", data: { type: "geojson", value: { type: "FeatureCollection", features: [ { type: "Feature", properties: {}, geometry: { coordinates: [ [139.93007825346956, 35.81332779614391], [139.8105822019014, 35.730789521095986], ], type: "LineString", }, }, ], }, }, // polyline property is required to indicate that the layer needs a polyline appearance polyline: {}, }); if (newLayerId) { console.log("Layer added successfully with ID:", newLayerId); } else { console.log("Failed to add layer."); } ``` * ポリゴンの追加 ```javascript const newLayerId = reearth.layers.add({ type: "simple", data: { type: "geojson", value: { type: "FeatureCollection", features: [ { type: "Feature", properties: {}, geometry: { coordinates: [ [ [139.56560369329821, 35.859787461762906], [139.56560369329821, 35.586320662892106], [139.73648312259508, 35.586320662892106], [139.73648312259508, 35.859787461762906], [139.56560369329821, 35.859787461762906], ], ], type: "Polygon", }, }, ], }, }, // polygon property is required to indicate that the layer needs a polygon appearance polygon: {}, }); if (newLayerId) { console.log("Layer added successfully with ID:", newLayerId); } else { console.log("Failed to add layer."); } ``` * 3D モデルの追加 ```javascript const model3D = { type: "simple", data: { type: "geojson", value: { type: "Feature", geometry: { type: "Point", coordinates: [139.6917, 35.6895], }, }, }, model: { url: "https://api.visualizer.test.reearth.dev/assets/01j90myth0wy2kq5agry8rh4fd.gltf", // 'Re:Earth' logo from asset heightReference: "relative", heading: 270, pitch: 0, roll: 0, scale: 100, silhouette: true, silhouetteColor: "red", }, }; reearth.layers.add(model3D); ``` * 3dtiles の追加 ```javascript // Define a 3D tile. This is a 3D tile of Chiyoda yard building in Tokyo. The co-ordinates are Latitude: 35.69393005 Longitude: 139.75371138. const tile3d = { type: "simple", data: { type: "3dtiles", url: "https://plateau.geospatial.jp/main/data/3d-tiles/bldg/13100_tokyo/13101_chiyoda-ku/notexture/tileset.json", }, "3dtiles": { show: true, color: { expression: { conditions: [ ["${_zmax} > 100", "color('red')"], ["true", "color('green')"], ], }, }, edgeWidth: 10, edgeColor: "#ffffff", selectedFeatureColor: "blue", }, }; reearth.layers.add(tile3d); ``` ### find [Section titled “find”](#find) このメソッドは、カスタム検索関数を適用して Reearth シーン内のレイヤを効率的に検索します。特定の属性、プロパティ、または条件など、動的に定義された基準を満たすレイヤを特定する際に有用です。各レイヤを評価するコールバック関数を受け取り、指定された条件を満たすレイヤに対して `true` を返します。これにより、シーンの特定部分を対象とした精密な操作や分析が可能となり、レイヤ管理の柔軟性と制御性が向上します。 #### 構文 [Section titled “構文”](#構文-5) ```ts reearth.layers.find: ( fn: (layer: LazyLayer, index: number) => boolean, ) => LazyLayer | undefined ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-1) ##### `fn` [Section titled “fn”](#fn) **Type**: `(layer: LazyLayer, index: number) => boolean` シーン内の各レイヤを評価するためのコールバック関数です。この関数は以下の引数を受け取ります。 * **`layer: LazyLayer`**: レイヤのすべてのデータを含むオブジェクト。 * **`index: number`**: 現在のレイヤのインデックス。 #### 戻り値 [Section titled “戻り値”](#戻り値-5) **Type** `LazyLayer | undefined` 指定されたテスト関数を満たす最初の **`LazyLayer`** オブジェクトを返します。条件を満たすレイヤが存在しない場合は **`undefined`** を返します。 #### 使用例 [Section titled “使用例”](#使用例-4) ```javascript //1. Define a search function to find the first visible layer const searchFunction = (layer, index) => { return layer.isVisible === true; }; // Use the find method to locate the first visible layer const foundLayer = reearth.layers.find(searchFunction); // Log the result or handle the case where no layer is found if (foundLayer) { console.log(`Found visible layer with ID: ${foundLayer.id}`); } else { console.log("No visible layer found."); } //2. Search for the first layer that is a 3D Tiles with the title "Re:Earth" and assign it to a variable. reearth.layers.find( (layer) => layer.data.type === "3dtiles" && layer.title === "Re:Earth" ); ``` ### findAll [Section titled “findAll”](#findall) このメソッドは、プロジェクト内のすべてのレイヤを対象に包括的な検索を実行し、指定された条件に一致するレイヤの配列を返します。プロジェクト内の各レイヤに適用するコールバック関数を受け取ります。 #### 構文 [Section titled “構文”](#構文-6) ```ts reearth.layers.findAll: (layer: LazyLayer, index: number) => boolean) => LazyLayer[] ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-2) ##### `layer` [Section titled “layer”](#layer-1) **Type** `LazyLayer` レイヤの作成と管理に必要なすべてのデータとメタデータを含むオブジェクトです。 ##### `index` [Section titled “index”](#index) **Type** `number` 階層内における現在のレイヤのインデックスです。 #### 戻り値 [Section titled “戻り値”](#戻り値-6) **Type** `LazyLayer[]` コールバック関数で指定された条件を満たす `LazyLayer` オブジェクトの配列を返します。条件を満たすレイヤが存在しない場合は空の配列を返します。 #### 使用例 [Section titled “使用例”](#使用例-5) ```javascript //1. Define a search function to find all layers with a specific visibility setting const searchVisibleLayers = (layer) => layer.isVisible; // Use the findAll method to get all visible layers const visibleLayers = reearth.layers.findAll(searchVisibleLayers); // Output the IDs of the found layers console.log( "Visible layers found:", visibleLayers.map((layer) => layer.id) ); //2. Filter out layers where the type is "GeoJSON" and the title is exactly "sample". let filteredLayers = reearth.layers.findAll( (layer) => layer.data.type === "geojson" && layer.title === "sample" ); // Log the array of filtered layers to the console. This array contains all layers that meet the specified conditions. console.log("filteredLayers: ", filteredLayers); ``` ### findById [Section titled “findById”](#findbyid) このメソッドは、一意の識別子(ID)に基づいて特定のレイヤオブジェクトを取得するために設計されています。ID が既知のレイヤに直接アクセスする際に欠かせないメソッドで、プロパティの編集、表示のオン/オフ切り替え、またはレイヤ固有データの分析などを効率的かつ精密に行うことができます。レイヤ階層全体を検索・反復する必要なく、個別のレイヤへの直接アクセスを可能にします。検索対象のレイヤ ID を表す単一の文字列パラメータを受け取ります。 #### 構文 [Section titled “構文”](#構文-7) ```ts reearth.layers.findById: (layerId: string) => LazyLayer | undefined; ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-3) ##### `layerId` [Section titled “layerId”](#layerid) **Type** `string` シーン内で検索対象となるレイヤの一意の識別子です。 #### 戻り値 [Section titled “戻り値”](#戻り値-7) **Type** `LazyLayer | undefined` 指定された ID を持つレイヤが見つかった場合、その `LazyLayer` オブジェクトを返します。一致するレイヤが存在しない場合は `undefined` を返します。 #### 使用例 [Section titled “使用例”](#使用例-6) ```javascript // Define the layer ID you are searching for const targetLayerId = "01j1rx8xhxsk2wdydew3m8hr6q"; // Attempt to find the layer by its ID const layer = reearth.layers.findById(targetLayerId); // Check if the layer was found and log the result or handle it accordingly if (layer) { console.log(`Layer found: ${layer.title}`); } else { console.log("No layer found with the specified ID:", targetLayerId); } ``` ### findByIds [Section titled “findByIds”](#findbyids) このメソッドは、レイヤ ID の配列に基づいて `reearth` シーンから複数のレイヤを同時に取得します。プロパティの一括更新、エフェクトの適用、グループ表示の管理など、複数の特定レイヤを同時に操作する必要があるアプリケーションに特に有用です。文字列引数のスプレッドを受け取り(各引数がレイヤ ID を表します)、各要素が `Layer` オブジェクトまたは `undefined` に対応する配列を返します。 #### 構文 [Section titled “構文”](#構文-8) ```ts reearth.layers.findByIds: (...layerIds: string[]) => (LazyLayer | undefined)[]; ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-4) ##### `...layerIds` [Section titled “...layerIds”](#layerids) **Type** `...string[]` 取得するレイヤの一意の識別子を表すレイヤ ID の配列です。1つまたは複数の ID を柔軟に入力できます。 使用時は配列を複数の引数としてスプレッドする必要があります。 #### 戻り値 [Section titled “戻り値”](#戻り値-8) **Type** `(LazyLayer | undefined)[]` 各入力 ID に対応する `LazyLayer` オブジェクトまたは `undefined` を含む配列を返します。シーン内に ID に対応するレイヤが存在するかどうかに応じて値が決まります。返される配列の各位置は入力リストの ID の位置に直接対応しており、順序の一貫性が保たれます。指定した ID を持つレイヤが存在しない場合、その位置に `undefined` が返されます。 #### 使用例 [Section titled “使用例”](#使用例-7) ```javascript // Define an array of layer IDs to be searched const layerIds = ["01j1rx8xhxsk2wdydew3m8hr6q", "01j90ed9m6bxagb6bvfg4sk49q"]; // Retrieve the layers by their IDs const layers = reearth.layers.findByIds(...layerIds); // Process the results, handling both found and not found cases layers?.forEach((layer, index) => { if (layer) { console.log(`Layer found: ID = ${layer.id}, Title = ${layer.title}`); } else { console.log(`No layer found for ID: ${layerIds[index]}`); } }); ``` ### findFeatureById [Section titled “findFeatureById”](#findfeaturebyid) このメソッドは、フィーチャー ID に関連するフィーチャーを取得する手段を提供します。レイヤ ID とフィーチャー ID を受け取り、指定されたレイヤ ID とフィーチャー ID に一致する `Feature` オブジェクトを返します。 #### 構文 [Section titled “構文”](#構文-9) ```ts reearth.layers.findFeatureById: (layerId: string, featureId: string) => Feature | undefined; ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-5) ##### `layerId` [Section titled “layerId”](#layerid-1) **Type** `string` シーン内で検索対象となるレイヤの一意の識別子です。 ##### `featureId` [Section titled “featureId”](#featureid) **Type** `string` レイヤ内のフィーチャーの一意の識別子です。 #### 戻り値 [Section titled “戻り値”](#戻り値-9) **Type** `Feature | undefined` 指定されたレイヤ内で指定された ID を持つフィーチャーが見つかった場合、その `Feature` オブジェクトを返します。一致するフィーチャーが存在しない場合は `undefined` を返します。 ノート Feature 型の詳細については、[Feature 型](#feature-%E5%9E%8B) セクションを参照してください。 #### 使用例 [Section titled “使用例”](#使用例-8) ```javascript // Define the layer ID and feature ID you are searching for const targetLayerId = "01j90ed9m6bxagb6bvfg4sk49q"; const targetFeatureId = "6167fcb5-9564-4c8e-a4d3-d0b419f54ec6"; // Attempt to find the layer by its ID const feature = reearth.layers.findFeatureById(targetLayerId, targetFeatureId); // Check if the feature was found and log the result or handle it accordingly if (feature) { console.log(`feature found: ${feature.type}`); } else { console.log("No feature found with the specified ID:", targetFeatureId); } ``` ### findFeaturesByIds [Section titled “findFeaturesByIds”](#findfeaturesbyids) このメソッドは、1つ以上の指定されたフィーチャー ID でラベル付けされたすべてのフィーチャーを取得するために設計されています。単一のレイヤ ID と複数のフィーチャー ID を受け取り、指定されたレイヤ ID とフィーチャー ID に一致する `Feature` オブジェクトの配列を返します。 #### 構文 [Section titled “構文”](#構文-10) ```ts reearth.layers.findFeaturesByIds: (layerId: string, featureId: string[]) => Feature[] | undefined; ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-6) ##### `layerId` [Section titled “layerId”](#layerid-2) **Type** `string` シーン内で検索対象となるレイヤの一意の識別子です。 ##### `featureId` [Section titled “featureId”](#featureid-1) **Type** `string[]` レイヤ内のフィーチャーの一意の識別子です。1つまたは複数の ID を柔軟に入力できます。 #### 戻り値 [Section titled “戻り値”](#戻り値-10) **Type** `(Feature[] | underined)` 指定されたレイヤ内で見つかったフィーチャー ID を持つ `Feature` オブジェクトの配列を返します。一致するフィーチャーが存在しない場合は `undefined` を返します。 #### 使用例 [Section titled “使用例”](#使用例-9) ```javascript // Define an array of layer IDs to be searched const layerId = "01j90ed9m6bxagb6bvfg4sk49q"; const featureIds = [ "6167fcb5-9564-4c8e-a4d3-d0b419f54ec6", "abae3164-f8b3-42bb-b194-0379ecc4c653", ]; // Retrieve the layers by their IDs const features = reearth.layers.findFeaturesByIds(layerId, featureIds); // Process the results, handling both found and not found cases features.forEach((feature, index) => { if (feature) { console.log(`Feature found: ID = ${feature.id}, Type = ${feature.type}`); } else { console.log(`No Feature found for ID: ${feature[index]}`); } }); ``` ### hide [Section titled “hide”](#hide) このメソッドは、提供されたレイヤ ID の配列に基づいて1つ以上のレイヤを非表示にするために設計されています。文字列引数のスプレッドを受け取り(各引数がレイヤの一意の識別子を表します)、呼び出されると指定された各レイヤの表示状態を `false` に設定し、プロジェクト内のビューから効果的に非表示にします。特定の条件やユーザー操作に基づいて、エンドユーザーに表示される要素を動的に制御するために特に有用です。 #### 構文 [Section titled “構文”](#構文-11) ```ts reearth.layers.hide : (...layerIds: string[]) => void ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-7) ##### `...layerIds` [Section titled “...layerIds”](#layerids-1) **Type** `...string[]` 非表示にするレイヤの ID をそれぞれ表す文字列のスプレッドパラメータです。 #### 戻り値 [Section titled “戻り値”](#戻り値-11) **Type** `なし(void)` このメソッドは値を返しません。 #### 使用例 [Section titled “使用例”](#使用例-10) ```javascript // Define the IDs of layers to be hidden const layerIdsToHide = [ "01j1rx8xhxsk2wdydew3m8hr6q", "01j90ed9m6bxagb6bvfg4sk49q", ]; // Hide the specified layers in the Reearth scene reearth.layers.hide(...layerIdsToHide); ``` ### show [Section titled “show”](#show) このメソッドは、`reearth` シーン内の指定されたレイヤの表示状態を `true` に設定するために使用します。ユーザーに表示するレイヤをプログラム的に制御でき、マップまたはシーン上のさまざまなデータセット、フィーチャー、またはグラフィック要素の表示を管理するための重要なツールです。ユーザー操作、アプリケーション状態、または特定の条件に基づいてレイヤを動的に表示・非表示にするシナリオに特に有用です。 #### 構文 [Section titled “構文”](#構文-12) ```ts reearth.layers.show: (...layerId: string[]) => void; ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-8) ##### `...layerIds` [Section titled “...layerIds”](#layerids-2) **Type** `...string[]` 表示するレイヤの ID をそれぞれ表す文字列のスプレッドパラメータです。 #### 戻り値 [Section titled “戻り値”](#戻り値-12) **Type** `なし(void)` このメソッドは値を返しません。 #### 使用例 [Section titled “使用例”](#使用例-11) ```javascript // Define the IDs of layers to be shown const layerIdsToShow = [ "01j1rx8xhxsk2wdydew3m8hr6q", "01j90ed9m6bxagb6bvfg4sk49q", ]; // Show the specified layers in the Reearth scene reearth.layers.show(...layerIdsToShow); ``` ### delete [Section titled “delete”](#delete) このメソッドは、`reearth` シーン内の指定されたレイヤを削除するために使用します。Plugin API によって追加された一時的なレイヤのみを削除します。レイヤの ID を主な引数として受け取ります。 #### 構文 [Section titled “構文”](#構文-13) ```ts reearth.layers.delete: (...layerId: string[]) => void; ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-9) ##### `...layerIds` [Section titled “...layerIds”](#layerids-3) **Type** `...string[]` 削除するレイヤの ID をそれぞれ表す文字列のスプレッドパラメータです。 #### 戻り値 [Section titled “戻り値”](#戻り値-13) **Type** `なし(void)` このメソッドは値を返しません。 #### 使用例 [Section titled “使用例”](#使用例-12) ```javascript // Define the IDs of layers to be deleted const layerIdsToDelete = [ "ed5cade3-4049-4626-a4c6-4e84baaef987", "0cdc12f8-4096-4a3c-84fa-0cc984130559", ]; // Show the specified layers in the Reearth scene reearth.layers.delete(...layerIdsToDelete); ``` ### override [Section titled “override”](#override) このメソッドは、ID によって指定されたレイヤのプロパティを動的にオーバーライドします。レイヤプロパティを変更することができます。表示状態、色、またはレイヤ構造で定義されたカスタム属性など、レイヤプロパティをオンザフライで変更できます。この動的な操作は、元のレイヤ設定を永続的に変更することなく、ユーザー操作、データ更新、またはその他のアプリケーションロジックに応じてレイヤ属性を変化させる必要があるレスポンシブなアプリケーションに不可欠です。レイヤの ID と部分的なレイヤオブジェクトの2つのパラメータを受け取ります。 #### 構文 [Section titled “構文”](#構文-14) ```ts reearth.layers.override: (layerId: string, properties: Partial) => void; ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-10) ##### `layerId` [Section titled “layerId”](#layerid-3) **Type** `string` プロパティをオーバーライドするレイヤの一意の識別子です。 ##### `properties` [Section titled “properties”](#properties) **Type** `Partial` Layer 型のいずれかのプロパティを省略可能な形で含むことができるオブジェクトです。 #### 戻り値 [Section titled “戻り値”](#戻り値-14) **Type** `なし(void)` このメソッドは入力パラメータを必要とせず、値を返さずに処理を実行します。 #### 使用例 [Section titled “使用例”](#使用例-13) ```javascript // add a sample layer const sampleLayer = { type: "simple", data: { type: "geojson", value: { type: "Feature", geometry: { type: "Point", coordinates: [139.6917, 35.6895], }, }, }, marker: { style: "image", imageSize: 1, imageColor: "blue", }, }; const layerId = reearth.layers.add(sampleLayer); // Example to modify the style // We should hav a big red marker instead of a small blue one reearth.layers.override(layerId, { marker: { imageSize: 5, imageColor: "red", }, }); ``` ### select [Section titled “select”](#select) このメソッドは、`reearth` シーン内の特定のレイヤをプログラム的に選択するために使用します。 #### 構文 [Section titled “構文”](#構文-15) ```ts reearth.layers.select: (layerId?: string) => void; ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-11) ##### `layerId` [Section titled “layerId”](#layerid-4) **Type** `string` 選択するレイヤの一意の識別子です。 #### 戻り値 [Section titled “戻り値”](#戻り値-15) **Type** `なし(void)` このメソッドは入力パラメータを必要とせず、値を返さずに処理を実行します。 #### 使用例 [Section titled “使用例”](#使用例-14) ```javascript // Select a layer by ID reearth.layers.select("01j1rx8xhxsk2wdydew3m8hr6q"); ``` ### selectFeature [Section titled “selectFeature”](#selectfeature) このメソッドは、`reearth` シーン内の特定のフィーチャーをプログラム的に選択するために使用します。特定のフィーチャーをハイライトまたはフォーカスするために不可欠で、インフォボックスやその他のコンテキスト情報の表示など、追加の UI 要素やアクションをトリガーすることができます。 #### 構文 [Section titled “構文”](#構文-16) ```ts reearth.layers.selectFeature: (layerId?: string, featureId?: string) => void; ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-12) ##### `layerId` [Section titled “layerId”](#layerid-5) **Type** `string` 選択するレイヤの一意の識別子です。 ##### `featureId` [Section titled “featureId”](#featureid-2) **Type** `string` レイヤ内のフィーチャーの一意の識別子です。 #### 戻り値 [Section titled “戻り値”](#戻り値-16) **Type** `なし(void)` このメソッドは入力パラメータを必要とせず、値を返さずに処理を実行します。 #### 使用例 [Section titled “使用例”](#使用例-15) ```javascript // Layer ID and feature ID to be selected const layerId = "01j90ed9m6bxagb6bvfg4sk49q"; const featureId = "6167fcb5-9564-4c8e-a4d3-d0b419f54ec6"; // Select the layer reearth.layers.selectFeature(layerId, featureId); ``` ### selectFeatures [Section titled “selectFeatures”](#selectfeatures) このメソッドは、`reearth` シーン内の特定の複数フィーチャーをプログラム的に選択するために使用します。特定のフィーチャーをハイライトまたはフォーカスするために不可欠で、インフォボックスやその他のコンテキスト情報の表示など、追加の UI 要素やアクションをトリガーすることができます。 #### 構文 [Section titled “構文”](#構文-17) ```ts reearth.layers.selectFeatures: (targets: { layerId?: string; featureId?: string[] }[]) => void; ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-13) ##### `targets` [Section titled “targets”](#targets) **Type** `{ layerId?: string; featureId?: string[] }[]` * **`layerId: string`**: 選択するレイヤの一意の識別子。 * **`featureId: string[]`**: 各要素がフィーチャーの ID を表す文字列の配列。 #### 戻り値 [Section titled “戻り値”](#戻り値-17) **Type** `なし(void)` このメソッドは入力パラメータを必要とせず、値を返さずに処理を実行します。 #### 使用例 [Section titled “使用例”](#使用例-16) ```javascript // add a sample layer const chiyodaLayerId = reearth.layers.add({ type: "simple", data: { type: "3dtiles", url: "https://assets.cms.plateau.reearth.io/assets/ca/ee4cb0-9ce4-4f6c-bca1-9c7623e84cb1/13100_tokyo23-ku_2022_3dtiles_1_1_op_bldg_13101_chiyoda-ku_lod2_no_texture/tileset.json", }, ["3dtiles"]: { selectedFeatureColor: "red", }, }); const chuoLayerId = reearth.layers.add({ type: "simple", data: { type: "3dtiles", url: "https://assets.cms.plateau.reearth.io/assets/4a/30f295-cd07-46b0-b0ab-4a4b1b3af06b/13100_tokyo23-ku_2022_3dtiles_1_1_op_bldg_13102_chuo-ku_lod2_no_texture/tileset.json", }, ["3dtiles"]: { selectedFeatureColor: "red", }, }); // NOTE: After 3dtiles been loaded, we can use this to select features // Select features by layer IDs and feature IDs reearth.layers.selectFeatures([ { layerId: chiyodaLayerId, featureId: [ "f9f2275bcf13a9674ba81473bc129ed6", "b9a4fd90ca6112eccd43bfffd4aeb2fe", ], }, { layerId: chuoLayerId, featureId: [ "acf77feceabce515700a47021bfe63dc", "4dcf088a80f1eaaf73b1f356f7446298", ], }, ]); ``` ## イベント [Section titled “イベント”](#イベント) ノート 共通イベントメソッド(`on`、`off`)の詳細については、[イベント](/ja/developer/plugin/api-reference/events) ページを参照してください。 ### select [Section titled “select”](#select-1) このイベントは、`reearth` シーン内でレイヤが選択されたときにトリガーされます。レイヤ選択イベントを監視し、カスタムアクションや動作で応答する手段を提供します。 #### 構文 [Section titled “構文”](#構文-18) ```ts reearth.layers.on('select', (selection: LayerSelection) => void) ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-14) ##### selection [Section titled “selection”](#selection) **Type** `LayerSelection:[layerId: string | undefined, featureId: string | undefined]` * **`layerId: string | undefined`**: 選択されたレイヤの一意の識別子。 * **`featureId: string | undefined`**: 選択されたフィーチャーの一意の識別子。 #### 使用例 [Section titled “使用例”](#使用例-17) ```javascript const layerId = reearth.layers.add({ type: "simple", data: { type: "geojson", value: { type: "FeatureCollection", features: [ { type: "Feature", properties: {}, geometry: { coordinates: [139.97422779688281, 35.74642872517698], type: "Point", }, }, ], }, }, marker: {}, }); reearth.camera.lookAt({ lat: 35.74642872517698, lng: 139.97422779688281, height: 1000, }); reearth.layers.on("select", (layerId, featureId) => { console.log( `Layer selection: Layer ID: ${layerId}, Feature ID: ${featureId}` ); }); ``` ## 型定義 [Section titled “型定義”](#型定義) ### Layer 型 [Section titled “Layer 型”](#layer-型) レイヤの作成と管理に必要なすべてのデータとメタデータを含むオブジェクトです。 ```javascript type Layer = { id: string; // A unique identifier for the layer. title?: string; visible?: boolean; // Flag indicating whether the layer is visible by default. Default is true infobox?: Infobox; // An infobox that can display additional interactive or informational content type: "simple"; data?: { type: | "geojson" | "3dtiles" | "osm-buildings" | "reearth-buildings" | "google-photorealistic" | "czml" | "csv" | "wms" | "mvt" | "kml" | "gpx" | "shapefile" | "gtfs" | "gml" | "georss" | "gltf" | "tiles" | "tms" | "heatMap"; url?: string; // URL of data source value?: any; layers?: string | string[]; jsonProperties?: string[]; isSketchLayer?: boolean; updateInterval?: number; // milliseconds parameters?: Record; idProperty?: string; time?: { property?: string; interval?: number; // milliseconds updateClockOnLoad?: boolean; }; csv?: { idColumn?: string | number; latColumn?: string | number; lngColumn?: string | number; heightColumn?: string | number; noHeader?: boolean; disableTypeConversion?: boolean; }; geojson?: { useAsResource?: boolean; }; }; properties?: any; defines?: Record; events?: Events; layerStyleId?: string; marker?: MarkerAppearance; polyline?: PolylineAppearance; polygon?: PolygonAppearance; model?: ModelAppearance; "3dtiles"?: Cesium3DTilesAppearance; }; ``` ### LazyLayer 型 [Section titled “LazyLayer 型”](#lazylayer-型) レイヤの軽量な表現形式です。 ```javascript type LazyLayer = Readonly & { computed?: Readonly; isTempLayer?: boolean; pluginId?: string; extensionId?: string; property?: any; propertyId?: string; isVisible?: boolean; }; ``` ### ComputedLayer 型 [Section titled “ComputedLayer 型”](#computedlayer-型) すべての処理が完了した後に得られるレイヤで、元の地理データと処理済みの地理データの両方、および適用・評価済みのスタイルと状態を含みます。 ```javascript type ComputedLayer = { id: string; status: "fetching" | "ready"; layer: Layer; originalFeatures: Feature[]; features: ComputedFeature[]; properties?: any; }; ``` ### レイヤアピアランス型 [Section titled “レイヤアピアランス型”](#レイヤアピアランス型) 各レイヤタイプのプロパティです。 * Marker ```javascript type MarkerAppearance = { show?: boolean; height?: number; heightReference?: "none" | "clamp" | "relative"; style?: "none" | "point" | "image"; pointSize?: number; pointColor?: string; pointOutlineColor?: string; pointOutlineWidth?: number; image?: string; imageSize?: number; imageSizeInMeters?: boolean; imageHorizontalOrigin?: "left" | "center" | "right"; imageVerticalOrigin?: "top" | "center" | "baseline" | "bottom"; imageColor?: string; imageCrop?: "none" | "rounded" | "circle"; imageShadow?: boolean; imageShadowColor?: string; imageShadowBlur?: number; imageShadowPositionX?: number; imageShadowPositionY?: number; label?: boolean; labelText?: string; labelPosition?: | "left" | "right" | "top" | "bottom" | "lefttop" | "leftbottom" | "righttop" | "rightbottom"; labelTypography?: { fontFamily?: string; fontSize?: number; fontWeight?: number; color?: string; italic?: boolean; underline?: boolean; }; labelBackground?: boolean; labelBackgroundColor?: string; labelBackgroundPaddingHorizontal?: number; labelBackgroundPaddingVertical?: number; extrude?: boolean; near?: number; //The unit is meter far?: number; //The unit is meter hideIndicator?: boolean; selectedFeatureColor?: string; // This doesn't support expression }; ``` * Polyline ```javascript type PolylineAppearance = { show?: boolean; clampToGround?: boolean; strokeColor?: string; strokeWidth?: number; shadows?: "disabled" | "enabled" | "cast_only" | "receive_only"; near?: number; far?: number; classificationType?: "both" | "terrain" | "3dtiles"; hideIndicator?: boolean; selectedFeatureColor?: string; // This doesn't support expression }; ``` * Polygon ```javascript type PolygonAppearance = { show?: boolean; fill?: boolean; fillColor?: string; stroke?: boolean; strokeColor?: string; strokeWidth?: number; heightReference?: "none" | "clamp" | "relative"; shadows?: "disabled" | "enabled" | "cast_only" | "receive_only"; near?: number; far?: number; extrudedHeight?: number; classificationType?: "both" | "terrain" | "3dtiles"; hideIndicator?: boolean; selectedFeatureColor?: string; // This doesn't support expression }; ``` * Model ```javascript type ModelAppearance = { show?: boolean; url?: string; heightReference?: "none" | "clamp" | "relative"; heading?: number; pitch?: number; roll?: number; scale?: number; maximumScale?: number; minimumPixelSize?: number; animation?: boolean; shadows?: "disabled" | "enabled" | "cast_only" | "receive_only"; colorBlend?: "none" | "highlight" | "replace" | "mix"; color?: string; colorBlendAmount?: number; lightColor?: string; near?: number; far?: number; pbr?: boolean; imageBasedLightIntensity?: number; }; ``` * 3dtiles ```javascript type Cesium3DTilesAppearance = { show?: boolean; color?: string; styleUrl?: string; // url of style json file shadows?: "disabled" | "enabled" | "cast_only" | "receive_only"; colorBlendMode?: "highlight" | "replace" | "mix" | "default"; selectedFeatureColor?: string; // This doesn't support expression tileset?: string; pbr?: boolean; // physically-based rendering showWireframe?: boolean; showBoundingVolume?: boolean; }; ``` ### Feature 型 [Section titled “Feature 型”](#feature-型) フィーチャーの作成と管理に必要なすべてのデータとメタデータを含むオブジェクトです。 ```javascript type Feature = { type: "feature" | "computedFeature"; id: string; // feature ID geometry?: Geometry; interval?: [start: Date, end?: Date]; properties?: any; // Map engine specific information. metaData?: { description?: string; }; range?: DataRange; }; ``` ### ComputedFeature 型 [Section titled “ComputedFeature 型”](#computedfeature-型) すべての最終評価済みプロパティとスタイルが適用された、単一の地理的フィーチャー(点、線、ポリゴン等)です。 ```javascript type ComputedFeature = { type: "computedFeature"; id: string; // feature ID geometry?: Geometry; interval?: [start: Date, end?: Date]; properties?: any; // Map engine specific information. metaData?: { description?: string; }; range?: DataRange; // AppearanceTypes marker?: MarkerAppearance; polyline?: PolylineAppearance; polygon?: PolygonAppearance; model?: ModelAppearance; "3dtiles"?: Cesium3DTilesAppearance; }; ``` # reearth.modal > `reearth.modal` の API リファレンスです。 **`reearth.modal`** 名前空間は、`reearth` 内のモーダルダイアログコンポーネントの構造と機能を定義します。 ## メソッド [Section titled “メソッド”](#メソッド) ### show [Section titled “show”](#show) このメソッドは、**`reearth`** 内でカスタマイズ可能な HTML コンテンツを持つモーダルウィンドウを表示します。開発者はモーダルのサイズ・背景・モーダル外クリック時の動作を定義できます。 #### 構文 [Section titled “構文”](#構文) ```ts reearth.modal.show: ( html: string, options?: Options ) => void; ``` #### パラメータ [Section titled “パラメータ”](#パラメータ) ##### `html` [Section titled “html”](#html) **型**: `string` モーダル内に表示する HTML コンテンツの文字列です。 ##### `options` [Section titled “options”](#options) **省略可能** モーダルの外観と動作をカスタマイズするオブジェクトです。 **型**: ```ts type Options = { width?: number | string; height?: number | string; background?: string; clickBgToClose?: boolean; }; ``` * **`width?: number | string;`**: モーダルの幅を指定します。指定しない場合はデフォルトの幅が使用されます。 * **`height?: number | string;`**: モーダルの高さを指定します。省略するとデフォルトの高さが適用されます。 * **`background?: string;`**: モーダルの背景色または CSS 値を指定します(例: `"#fff"`、`"rgba(0, 0, 0, 0.5)"`)。 * **`clickBgToClose?: boolean;`**: モーダルの背景をクリックしたときにモーダルを閉じるかどうかを設定します。`true` にするとこの機能が有効になります。デフォルトは `false` です。 #### 戻り値: [Section titled “戻り値:”](#戻り値) なし(void)。このメソッドは値を返さずに処理を実行します。 #### 使用例 [Section titled “使用例”](#使用例) ```javascript // 使用例 1: カスタム HTML コンテンツを含むモーダルを表示する reearth.modal.show("

Welcome to Reearth!

", { width: 400, height: 300, background: "rgba(0, 0, 0, 0.5)", clickBgToClose: true, }); // 使用例 2: 大きめの固定サイズとソリッドな背景でモーダルを表示する reearth.modal.show( "

Important Information

Details about the project...

", { width: 600, height: 400, background: "#f8f8f8", clickBgToClose: false, } ); ``` ### postMessage [Section titled “postMessage”](#postmessage) このメソッドは、モーダルウィンドウと **`reearth`** の他の部分との間、またはモーダル内のコンポーネント間の通信を可能にします。モーダル内のユーザー操作を reearth に通知したり、他のコンポーネントにデータや処理を要求したりするなど、さまざまな用途に利用できます。 #### 構文 [Section titled “構文”](#構文-1) ```ts reearth.modal.postMessage: (message: any) => void; ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-1) ##### `message` [Section titled “message”](#message) **型**: `any` モーダルに送信するメッセージです。 #### 戻り値: [Section titled “戻り値:”](#戻り値-1) なし(void)。このメソッドは値を返さずに処理を実行します。 #### 使用例 [Section titled “使用例”](#使用例-1) ```javascript // 使用例 1: シンプルなテキストメッセージを送信する reearth.modal.postMessage("Hello, Re:Earth!"); // 使用例 2: Reearth アプリケーションにシンプルな文字列メッセージを送信する reearth.modal.postMessage("User clicked the button!"); // 使用例 3: オブジェクトメッセージを送信する reearth.modal.postMessage({ message: "greeting" }); // 使用例 4: ユーザーデータを含むオブジェクトを送信する reearth.modal.postMessage({ eventType: "userAction", details: { action: "submit", userId: 12345, }, }); ``` ### update [Section titled “update”](#update) このメソッドは、**`reearth`** 内で現在開いているモーダルの外観と動作を変更します。モーダルのサイズ・背景色・クリックで閉じる動作などのプロパティを動的に調整できます。 #### 構文 [Section titled “構文”](#構文-2) ```ts reearth.modal.update: (options: Options) => void; ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-2) ##### `options` [Section titled “options”](#options-1) モーダルの外観と動作を更新するプロパティを含むオブジェクトです。 **型**: ```ts type Options = { width?: number | string; height?: number | string; background?: string; clickBgToClose?: boolean; }; ``` * **`width?: number | string;`**: モーダルの新しい幅を設定します。 * **`height?: number | string;`**: モーダルの新しい高さを設定します。 * **`background?: string;`**: モーダルの新しい背景を設定します。 * **`clickBgToClose?: boolean;`**: モーダル外をクリックしたときに閉じるかどうかを設定します。`true` にするとユーザーが背景をクリックしたときにモーダルが閉じます。`false` にすると背景クリックでモーダルが閉じなくなります。 #### 戻り値: [Section titled “戻り値:”](#戻り値-2) なし(void)。このメソッドは値を返さずに処理を実行します。 #### 使用例 [Section titled “使用例”](#使用例-2) ```javascript // 使用例 1: 幅 300px・高さ 400px・ライトブルーの背景にリサイズする reearth.modal.update({ width: 300, height: 400, background: "#ADD8E6", clickBgToClose: true, }); // 使用例 2: カスタム背景色・大きめのサイズに更新し、クリックで閉じる機能を無効にする reearth.modal.update({ width: 600, height: 450, background: "rgba(0, 128, 128, 0.8)", clickBgToClose: false, // 背景クリックによるモーダルのクローズを防止 }); // 使用例 3: 背景クリックでモーダルを閉じられるようにする reearth.modal.update({ clickBgToClose: true, }); // 使用例 4: 他のプロパティを維持したままモーダルの幅のみ 300px に変更する reearth.modal.update({ width: 300, }); ``` ### close [Section titled “close”](#close) このメソッドは、開いているモーダルを閉じるために使用します。タスクの完了・論理的な条件・その他のユーザー操作に基づいてモーダルを非表示にできます。パラメータは不要です。 #### 構文 [Section titled “構文”](#構文-3) ```ts reearth.modal.close: () => void ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-3) なし #### 戻り値: [Section titled “戻り値:”](#戻り値-3) なし(void)。このメソッドは値を返さずに処理を実行します。 #### 使用例 [Section titled “使用例”](#使用例-3) ```ts // 現在開いているモーダルを閉じる reearth.modal.close(); ``` ## イベント [Section titled “イベント”](#イベント) ノート 共通イベントメソッド(`on`・`off`)の詳細については、[Events](/ja/developer/plugin/api-reference/events) ページを参照してください。 ### close [Section titled “close”](#close-1) close イベントは、**`reearth`** 内のモーダルが閉じられたときに発火します。このイベントを利用することで、モーダルが閉じられた際にリソースの解放・データの保存・UI の更新といった処理を実行できます。提供するオプションに応じて、リスナーを一度だけ実行するか繰り返し実行するかを設定できます。 #### 構文 [Section titled “構文”](#構文-4) ```ts reearth.modal.on("close", () => void): void; ``` #### 使用例 [Section titled “使用例”](#使用例-4) ```javascript reearth.modal.on("close", () => { console.log("The Modal was closed."); }); ``` # reearth.popup > `reearth.popup` の API リファレンスです。 **`reearth.popup`** 名前空間は、`reearth` 内のポップアップダイアログコンポーネントの構造と機能を定義します。 ## メソッド [Section titled “メソッド”](#メソッド) ### show [Section titled “show”](#show) show メソッドは、拡張ウィジェットまたはブロックを基準とした指定位置に、カスタム HTML コンテンツを含むポップアップを表示します。ポップアップの外観・位置・オフセットを設定できるため、さまざまな UI ニーズに柔軟に対応できます。 #### 構文 [Section titled “構文”](#構文) ```ts reearth.popup.show: ( html: string, options?: Options ) => void; ``` #### パラメータ [Section titled “パラメータ”](#パラメータ) ##### `html` [Section titled “html”](#html) **型**: `string` ポップアップ内に表示する HTML コンテンツの文字列です。 ##### `options` [Section titled “options”](#options) **省略可能** ポップアップの外観と配置をカスタマイズするプロパティを持つオブジェクトです。 **型**: ```ts type Options = { width?: number | string; height?: number | string; position?: PopupPosition; offset?: PopupOffset; }; ``` * **`width?: number | string;`**: ポップアップの幅を指定します。 * **`height?: number | string;`**: ポップアップの高さを指定します。 * **`position?: PopupPosition;`**: 基準点または要素に対するポップアップの表示位置を指定します。 ノート PopupPosition に含まれるオプションの詳細については、[PopupPosition](#popupposition) セクションを参照してください。 * **`offset?: PopupOffset`**: ポップアップの配置位置からの追加間隔またはオフセットを定義します。 ノート PopupOffset に含まれるオプションの詳細については、[PopupOffset](#popupoffset) セクションを参照してください。 #### 戻り値: [Section titled “戻り値:”](#戻り値) なし(void)。このメソッドは値を返さずに処理を実行します。 #### 使用例 [Section titled “使用例”](#使用例) ```javascript // 使用例 1. シンプルな通知ポップアップを表示する reearth.popup.show(`

You have successfully updated your profile.

`, { // ポップアップの幅を 300 ピクセルに設定 width: 300, // ポップアップの高さを 100 ピクセルに設定 height: 100, // 基準要素またはビューポートの下端右側にポップアップを配置 position: "bottom-end", // メイン軸とクロス軸に対して特定のオフセットでポップアップの位置を調整 offset: 10, // ターゲットから 10px のオフセットを設定 }); // 使用例 2. カスタム HTML・幅・両軸のオフセット調整を含むポップアップを表示する reearth.popup.show(`

Custom Popup Content

`, { width: "300px", height: "150px", position: "top-start", // ターゲットの左上にポップアップを配置 offset: { // 細かな配置調整のためのオフセットオブジェクト mainAxis: 15, // メイン軸に沿って 15px オフセット crossAxis: 10, // クロス軸に沿って 10px オフセット alignmentAxis: null, // アライメント調整なし }, }); // 使用例 3. デフォルトのサイズと位置でポップアップを表示する reearth.popup.show("

Simple Popup

"); ``` ### postMessage [Section titled “postMessage”](#postmessage) このメソッドは、ポップアップの iframe にメッセージを送信する機能を提供します。ポップアップが拡張スクリプトから情報を取得する必要があるシナリオでの通信に役立ちます。 #### 構文 [Section titled “構文”](#構文-1) ```ts reearth.popup.postMessage: (message: any) => void; ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-1) ##### `message` [Section titled “message”](#message) **型**: `any` 送信するメッセージです。 #### 戻り値: [Section titled “戻り値:”](#戻り値-1) なし(void)。このメソッドは値を返さずに処理を実行します。 #### 使用例 [Section titled “使用例”](#使用例-1) ```javascript // 使用例 1. ポップアップからシンプルな文字列メッセージを送信する reearth.popup.postMessage("Popup completed its task"); // 使用例 2. ユーザー操作の詳細を含むオブジェクトを送信する const userData = { action: "submit", details: { name: "John Doe", email: "john@example.com" }, }; reearth.popup.postMessage(userData); ``` ### update [Section titled “update”](#update) このメソッドを使用すると、ポップアップ iframe の外観と位置を変更できます。ポップアップを再作成することなく、幅・高さ・位置・オフセットなどのプロパティを動的に調整できます。 #### 構文 [Section titled “構文”](#構文-2) ```ts reearth.popup.update: (options: Options) => void; ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-2) ##### `options` [Section titled “options”](#options-1) ポップアップのサイズ・位置・オフセットを更新するプロパティを含むオブジェクトです。 **型**: ```ts type Options = { width?: number | string; height?: number | string; position?: PopupPosition; offset?: PopupOffset; }; ``` * **`width?: number | string;`**: ポップアップの新しい幅を設定します。 * **`height?: number | string;`**: ポップアップの新しい高さを設定します。 * **`position?: PopupPosition;`**: 基準点または要素に対するポップアップの新しい表示位置を指定します。 ノート PopupPosition に含まれるオプションの詳細については、[PopupPosition](#popupposition) セクションを参照してください。 * **`offset?: PopupOffset;`**: ポップアップの配置位置からの間隔またはオフセットを調整します。 ノート PopupOffset に含まれるオプションの詳細については、[PopupOffset](#popupoffset) セクションを参照してください。 #### 戻り値: [Section titled “戻り値:”](#戻り値-2) なし(void)。このメソッドは値を返さずに処理を実行します。 #### 使用例 [Section titled “使用例”](#使用例-2) ```javascript // 使用例 1. 両軸に対して特定のオフセット調整を加えてポップアップを更新する reearth.popup.update({ width: "250px", height: "100px", position: "bottom", // ターゲットの下に配置 offset: { // 詳細な調整のためのオフセットオブジェクト mainAxis: 10, // メイン軸でターゲットから 10px オフセット crossAxis: 5, // クロス軸に沿って 5px オフセット }, }); // 使用例 2. 新しいコンテンツや UI レイアウト変更に合わせてオフセットを調整する reearth.popup.update({ offset: { mainAxis: 25, crossAxis: 15 }, // メイン軸とクロス軸の両方のオフセットを調整 // 幅・高さ・位置は更新せず、オフセットのみ変更 }); // 使用例 3. 他のプロパティを維持したままポップアップの高さを調整する reearth.popup.update({ height: 200, // 高さを 200px に設定 }); ``` ### close [Section titled “close”](#close) このメソッドは、現在表示中のポップアップをプログラムから閉じるシンプルな手段を提供します。タスクの完了・論理的な条件・その他のユーザー操作に基づいてポップアップを非表示にできます。 #### 構文 [Section titled “構文”](#構文-3) ```ts reearth.popup.close: () => void ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-3) なし #### 戻り値: [Section titled “戻り値:”](#戻り値-3) なし(void)。このメソッドは値を返さずに処理を実行します。 #### 使用例 [Section titled “使用例”](#使用例-3) ```ts // 現在開いているポップアップを閉じる reearth.popup.close(); ``` ## イベント [Section titled “イベント”](#イベント) ノート 共通イベントメソッド(`on`・`off`)の詳細については、[Events](/ja/developer/plugin/api-reference/events) ページを参照してください。 ### close [Section titled “close”](#close-1) close イベントは、**`reearth`** 内のポップアップが閉じられたときに発火します。このイベントを利用することで、ポップアップが非表示になった際にリソースの解放・UI の更新・他コンポーネントへの通知といった特定の処理を実行できます。 #### 構文 [Section titled “構文”](#構文-4) ```ts reearth.popup.on("close", () => void): void; ``` #### 使用例 [Section titled “使用例”](#使用例-4) ```javascript reearth.popup.on("close", () => { console.log("The Popup was closed."); }); ``` ## 型定義 [Section titled “型定義”](#型定義) ### PopupPosition [Section titled “PopupPosition”](#popupposition) `PopupPosition` 型は、ターゲット要素に対してポップアップを表示する位置を制御します。拡張ウィジェットまたはブロックの上・下・左右に配置するための各種オプションと、アライメント調整(start・center・end)のオプションを提供します。 ```javascript type PopupPosition = | "top" | "top-start" | "top-end" | "right" | "right-start" | "right-end" | "bottom" | "bottom-start" | "bottom-end" | "left" | "left-start" | "left-end"; ``` **`top`**: ターゲットの真上にポップアップを配置します。 **`top-start`**: ターゲットの左上にポップアップを揃えます。 **`top-end`**: ターゲットの上かつ右側にポップアップを揃えます。 **`right`**: ターゲットの真右にポップアップを揃えます。 **`right-start`**: ターゲットの右側かつ上端にポップアップを揃えます。 **`right-end`**: ターゲットの右側かつ下端にポップアップを揃えます。 **`bottom`**: ターゲットの真下にポップアップを配置します。 **`bottom-start`**: ターゲットの下かつ左側にポップアップを揃えます。 **`bottom-end`**: ターゲットの下かつ右側にポップアップを揃えます。 **`left`**: ターゲットの真左にポップアップを配置します。 **`left-start`**: ターゲットの左側かつ上端にポップアップを揃えます。 **`left-end`**: ターゲットの左側かつ下端にポップアップを揃えます。 ### PopupOffset [Section titled “PopupOffset”](#popupoffset) `PopupOffset` 型を使用すると、拡張ウィジェットまたはブロックからのポップアップの距離を制御できます。メイン軸に沿ったオフセットを調整する数値と、メイン軸・クロス軸・アライメント軸など各軸を細かく制御するオブジェクトの 2 種類の指定方法があります。 ```javascript type PopupOffset = | number | { mainAxis?: number; crossAxis?: number; alignmentAxis?: number | null; }; ``` #### オプション [Section titled “オプション”](#オプション) ###### 数値 [Section titled “数値”](#数値) * 単一の数値を指定すると、ポップアップがメイン軸に沿ってターゲットに近づく方向または遠ざかる方向にシフトします。 * 使用例: 10 を指定すると、ポップアップがメイン軸に沿って 10 ピクセルシフトします。 ###### オブジェクト [Section titled “オブジェクト”](#オブジェクト) 以下のプロパティを持つ細かな制御が可能なオブジェクトです。 **`mainAxis?: number`**: ターゲットからのポップアップの距離をメイン軸に沿って調整します。正の値はポップアップをターゲットから遠ざけ、負の値は近づけます。 **`crossAxis?: number`**: メイン軸に垂直なクロス軸に沿ってポップアップの距離を調整します。正の値はポップアップを一方向に、負の値は逆方向に移動させます(方向は向きに依存します)。 **`alignmentAxis?: number | null`**: `crossAxis` と同じ軸ですが、アライメントが指定された配置にのみ適用され、`end` アライメントを反転させます。数値を設定すると `crossAxis` の値を上書きします。正の値はフローティング要素をアライメントされた辺の反対側の辺の方向に移動させ、負の値はその逆方向に移動させます。 # reearth.sketch > reearth.sketch の API リファレンスです。 Re:Earth Visualizer には強力なスケッチ機能が搭載されており、ユーザーはカスタムのマーカー、ポリライン、ポリゴンなどをマップ上に直接動的に描画できます。この機能は、プラグイン API の `reearth.sketch` を通じてアクセスできます。 ## プロパティ [Section titled “プロパティ”](#プロパティ) ### tool [Section titled “tool”](#tool) 現在のスケッチツールを取得します。 #### 構文 [Section titled “構文”](#構文) ```ts reearth.sketch.tool: SketchType; ``` #### 戻り値 [Section titled “戻り値”](#戻り値) **型** `SketchType = | "marker" | "polyline" | "circle" | "rectangle" | "polygon" | "extrudedCircle" | "extrudedRectangle" | "extrudedPolygon"` ### options [Section titled “options”](#options) 現在のスケッチオプションを取得します。 #### 構文 [Section titled “構文”](#構文-1) ```ts reearth.sketch.options: SketchOptions; ``` #### 戻り値 [Section titled “戻り値”](#戻り値-1) **型** ```ts type SketchOptions = { color?: string; appearance?: SketchAppearance; dataOnly?: boolean; disableShadow?: boolean; rightClickToAbort?: boolean; autoResetInteractionMode?: boolean; }; ``` * **color:** スケッチジオメトリの基本色を指定します。 * **appearance:** 描画完了後にスケッチジオメトリに適用されるスタイルを定義します。 * **dataOnly:** `true` に設定すると、描画後にマップへ新しいレイヤが追加されません。デフォルト: `false`(注意: Re:Earth Visualizer エディター内ではこのオプションは `true` に設定されます)。 * **disableShadow:** 描画されたジオメトリに影を表示するかどうかを設定します。デフォルト: `false`。 * **rightClickToAbort:** 右クリックで現在の描画を中止できるようにします。デフォルト: `true`(注意: Re:Earth Visualizer エディター内ではこのオプションは `false` に設定されます)。 * **autoResetInteractionMode:** 描画完了後にビューアのインタラクションモードを自動的にデフォルトにリセットします。デフォルト: `true`。 ノート SketchAppearance は LayerAppearance の部分的な実装です。詳細については、[レイヤアピアランス型](/ja/developer/plugin/api-reference/layers/#%E3%83%AC%E3%82%A4%E3%83%A4%E3%82%A2%E3%83%94%E3%82%A2%E3%83%A9%E3%83%B3%E3%82%B9%E5%9E%8B) を参照してください。 ## メソッド [Section titled “メソッド”](#メソッド) ### setTool [Section titled “setTool”](#settool) スケッチツールを特定のタイプに設定します。`undefined` を指定するとスケッチモードを終了します。 #### 構文 [Section titled “構文”](#構文-2) ```ts reearth.sketch.setTool: (type: SketchType | undefined) => void; ``` #### パラメータ [Section titled “パラメータ”](#パラメータ) ##### type [Section titled “type”](#type) **型** `SketchType | undefined` #### 戻り値 [Section titled “戻り値”](#戻り値-2) なし(void)。このメソッドは値を返しません。 ### overrideOptions [Section titled “overrideOptions”](#overrideoptions) 現在のスケッチオプションを上書きします。 #### 構文 [Section titled “構文”](#構文-3) ```ts reearth.sketch.overrideOptions: (options: SketchOptions) => void; ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-1) ##### options [Section titled “options”](#options-1) **型** `SketchOptions` #### 戻り値 [Section titled “戻り値”](#戻り値-3) なし(void)。このメソッドは値を返しません。 ## イベント [Section titled “イベント”](#イベント) ノート 共通のイベントメソッド(`on`、`off`)の詳細については、[イベント](/ja/developer/plugin/api-reference/events) ページを参照してください。 ### create [Section titled “create”](#create) このイベントは、スケッチ描画が正常に完了したときにトリガーされます。 #### 構文 [Section titled “構文”](#構文-4) ```ts reearth.sketch.on("create", (prop: SketchEventProps) => void); ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-2) ##### prop [Section titled “prop”](#prop) **型** ```ts type SketchEventProps = { layerId?: string; featureId?: string; feature?: SketchFeature; }; ``` * **layerId:** スケッチレイヤの ID です。`dataOnly` オプションが有効な場合、このプロパティは利用できません。 * **featureId:** スケッチフィーチャーの ID です。`dataOnly` オプションが有効な場合も利用できません。 * **feature:** `properties` に `id`、`type`、`positions`、`extrudedHeight` を含む `GeoJSON` オブジェクトです。 #### 使用例 [Section titled “使用例”](#使用例) ```ts reearth.sketch.setTool("polygon"); reearth.sketch.on("create", (props) => { console.log(`New sketch feature created:`, props); }); ``` ### toolChange [Section titled “toolChange”](#toolchange) このイベントは、スケッチツールが変更されたときにトリガーされます。 #### 構文 [Section titled “構文”](#構文-5) ```ts reearth.sketch.on("toolChange", (type: SketchType | undefined) => void); ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-3) ##### type [Section titled “type”](#type-1) **型** `SketchType | undefined` #### 使用例 [Section titled “使用例”](#使用例-1) ```ts reearth.sketch.on("toolChange", (tool) => { console.log(`Sketch tool changed:`, tool); }); // イベントを確認するために非同期で以下を実行してください: reearth.sketch.setTool("polygon"); reearth.sketch.setTool(undefined); ``` # reearth.timeline > `reearth.timeline` の API リファレンスです。 **`reearth.timeline`** 名前空間は、`reearth` 環境でタイムライン機能を管理・操作するためのメソッドとプロパティを提供します。時間ベースのデータやアニメーションを制御・監視・同期する必要があるシナリオ向けに設計されています。 ## プロパティ [Section titled “プロパティ”](#プロパティ) ### startTime [Section titled “startTime”](#starttime) startTime プロパティは、`reearth` 環境におけるタイムラインの開始点を表します。タイムラインが開始する時刻を定義するオプションの Date オブジェクトです。このプロパティは、プラグインが時間固有のデータやアニメーションを扱う必要がある場合に便利です。 #### 構文 [Section titled “構文”](#構文) ```ts reearth.timeline.startTime?: Date; ``` ###### `Date` [Section titled “Date”](#date) タイムラインの開始時刻を表す JavaScript Date オブジェクトです。startTime が定義されていない場合、タイムラインの開始時刻は関係ないか、動的に決定されます。 #### 使用例 [Section titled “使用例”](#使用例) ```javascript // 使用例: タイムラインの開始時刻を確認してログに出力する if (reearth.timeline.startTime) { console.log("Timeline Start Time:", reearth.timeline.startTime.toISOString()); } else { console.log("Timeline Start Time is not set."); } ``` ### stopTime [Section titled “stopTime”](#stoptime) stopTime プロパティは、`reearth` 環境におけるタイムラインの終了点を表します。タイムラインが停止する時刻を定義するオプションの Date オブジェクトです。このプロパティは、プラグイン内で時間制限のあるデータやアニメーションを管理する際に便利です。 #### 構文 [Section titled “構文”](#構文-1) ```ts reearth.timeline.stopTime?: Date; ``` ###### `Date` [Section titled “Date”](#date-1) タイムラインの停止時刻を表す JavaScript Date オブジェクトです。stopTime が定義されていない場合、タイムラインに固定の終了点がないか、動的に決定されることを示している場合があります。 #### 使用例 [Section titled “使用例”](#使用例-1) ```javascript // 使用例: タイムラインの停止時刻を確認してログに出力する if (reearth.timeline.stopTime) { console.log("Timeline Stop Time:", reearth.timeline.stopTime.toISOString()); } else { console.log("Timeline Stop Time is not set."); } ``` ### currentTime [Section titled “currentTime”](#currenttime) currentTime プロパティは、`reearth` 環境におけるタイムライン上の現在時刻を表します。タイムラインが進行するにつれて更新されるオプションの Date オブジェクトです。このプロパティは、プラグインのイベントやデータビジュアライゼーションをタイムラインの現在位置と同期させる際に便利です。 #### 構文 [Section titled “構文”](#構文-2) ```ts reearth.timeline.currentTime?: Date; ``` ###### `Date` [Section titled “Date”](#date-2) タイムライン上の現在時刻を表す JavaScript Date オブジェクトです。currentTime が定義されていない場合、タイムラインが初期化されていないか、現在非アクティブであることを示している場合があります。 #### 使用例 [Section titled “使用例”](#使用例-2) ```javascript // 使用例: タイムラインの現在時刻を確認してログに出力する if (reearth.timeline.currentTime) { console.log( "Current Timeline Time:", reearth.timeline.currentTime.toISOString() ); } else { console.log("Current Timeline Time is not set."); } ``` ### isPlaying [Section titled “isPlaying”](#isplaying) このプロパティは、タイムラインが現在再生中かどうかを示します。タイムラインの再生状態を反映するブール値です。このプロパティは、タイムラインのアニメーションやイベントを制御・監視する際に便利です。 #### 構文 [Section titled “構文”](#構文-3) ```ts reearth.timeline.isPlaying?: boolean; ``` **型** `boolean` * `true`:タイムラインは現在再生中です。 * `false`:タイムラインは一時停止中です。 `isPlaying` が定義されていない場合、タイムラインが初期化されていないことを示している場合があります。 #### 使用例 [Section titled “使用例”](#使用例-3) ```javascript // 使用例 1: タイムラインが再生中か一時停止中かをログに出力する if (reearth.timeline.isPlaying === true) { console.log("The timeline is currently playing."); } else if (reearth.timeline.isPlaying === false) { console.log("The timeline is paused."); } else { console.log("The timeline state is not set or unavailable."); } // 使用例 2: タイムラインが再生中のときにアニメーションをトリガーする if (reearth.timeline.isPlaying) { console.log("Playing animation linked to the timeline..."); } // 使用例 3: タイムラインの再生状態をトグルする if (reearth.timeline.isPlaying) { reearth.timeline.pause?.(); } else { reearth.timeline.play?.(); } ``` ### speed [Section titled “speed”](#speed) speed プロパティは、`reearth` 環境におけるタイムラインの再生速度を表します。タイムラインがリアルタイムに対してどれだけ速く進行するかを決定する数値です。このプロパティは、タイムラインに紐づいたアニメーションやデータ更新のペースを制御する際に便利です。 #### 構文 [Section titled “構文”](#構文-4) ```ts reearth.timeline.speed?: number; ``` **型** `number` タイムラインの再生速度を表す数値です。例:`1.0`:リアルタイム再生、`>1.0`:リアルタイムより速い、`<1.0`:リアルタイムより遅い。speed が定義されていない場合、タイムラインの再生速度が設定または初期化されていないことを示している場合があります。 #### 使用例 [Section titled “使用例”](#使用例-4) ```javascript // 使用例 1: タイムラインの現在の再生速度をログに出力する if (reearth.timeline.speed !== undefined) { console.log("Timeline Playback Speed:", reearth.timeline.speed); } else { console.log("Timeline speed is not set."); } // 使用例 2: タイムラインの再生速度を2倍に上げる reearth.timeline.setSpeed(2.0); console.log("Playback speed set to:", reearth.timeline.speed); ``` ### stepType [Section titled “stepType”](#steptype) このプロパティは、タイムラインが時間を進行させるステップの種類を定義します。タイムラインが可変レート(時間に比例)で進むか、固定間隔で進むかを決定します。タイムラインに紐づいたデータやアニメーションの更新方法を制御する際に便利です。 #### 構文 [Section titled “構文”](#構文-5) ```ts reearth.timeline.stepType?: "rate" | "fixed"; ``` **型** `rate` タイムラインは可変レートで進行します。タイムラインは継続的に進み、進行速度は speed プロパティによって決定されます。 **型** `fixed` タイムラインは固定時間間隔(例:毎秒、毎分、毎時)で進行します。この種類は、離散的なステップや均等間隔の更新を持つタイムラインに最適です。 stepType が定義されていない場合、デフォルトのステップ種類はプラグインの設定または Reearth 環境によって異なる場合があります。 #### 使用例 [Section titled “使用例”](#使用例-5) ```javascript // 使用例 1: タイムラインのステップ種類をログに出力する if (reearth.timeline.stepType) { console.log("Timeline Step Type:", reearth.timeline.stepType); } else { console.log("Timeline step type is not set."); } // 使用例 2: 連続進行のためにステップ種類を 'rate' に設定する reearth.timeline.setStepType("rate"); console.log("Timeline step type set to 'rate'."); // 使用例 3: 離散ステップのためにステップ種類を 'fixed' に設定する reearth.timeline.setStepType("fixed"); console.log("Timeline step type set to 'fixed'."); ``` ### rangeType [Section titled “rangeType”](#rangetype) rangeType プロパティは、タイムラインが時間進行の範囲をどのように扱うかを定義します。タイムラインが定義された startTime と stopTime を超えて拡張できるか、特定の範囲内に制限されるかを決定します。このプロパティは、タイムラインに紐づいたアニメーションやイベントの動作を制御するために重要です。 #### 構文 [Section titled “構文”](#構文-6) ```ts reearth.timeline.rangeType?: "unbounded" | "clamped" | "bounced"; ``` **型** `unbounded` タイムラインは定義された startTime と stopTime を超えて拡張できます。境界を超えても無制限に進行できます。この種類は、継続的なアニメーションやデータ更新に便利です。 **型** `clamped` タイムラインは startTime と stopTime の範囲内に制限されます。開始時刻より前や停止時刻より後には進行できません。この種類は、時間制限のあるアニメーションやイベントに便利です。 **型** `bounced` タイムラインは startTime と stopTime の間で「バウンス」し、ループのような効果を生み出します。タイムラインが終端に達すると方向を逆転させ、開始点に向かって戻ります。この種類は、継続的なアニメーションやサイクルを作成する際に便利です。 rangeType が定義されていない場合、動作はタイムラインの設定にデフォルトするか、制限なしのままになる場合があります。 #### 使用例 [Section titled “使用例”](#使用例-6) ```javascript // 使用例 1: タイムラインの範囲種類をログに出力する if (reearth.timeline.rangeType) { console.log("Timeline Range Type:", reearth.timeline.rangeType); } else { console.log("Timeline range type is not set."); } // 使用例 2: タイムラインを無制限に進行させる reearth.timeline.setRangeType("unbounded"); console.log("Timeline range type set to 'unbounded'."); // 使用例 3: タイムラインを開始・停止時刻内に制限する reearth.timeline.setRangeType("clamped"); console.log("Timeline range type set to 'clamped'."); // 使用例 4: タイムラインのバウンス動作を有効にする reearth.timeline.setRangeType("bounced"); console.log("Timeline range type set to 'bounced'."); ``` ## メソッド [Section titled “メソッド”](#メソッド) ### tick [Section titled “tick”](#tick) tick メソッドは、タイムラインの現在のティック値を Date オブジェクトとして取得します。このメソッドは、アニメーションやプラグイン固有のイベントをタイムラインの進行と同期させる際に便利です。 #### 構文 [Section titled “構文”](#構文-7) ```ts reearth.timeline.tick?: () => Date | undefined; ``` #### 戻り値: [Section titled “戻り値:”](#戻り値) **型** `Date | undefined` * `"Date"`:タイムライン上の現在のティック値を Date オブジェクトとして表します。 * `"undefined"`:タイムラインが初期化されていないか非アクティブの場合、メソッドは undefined を返します。 #### 使用例 [Section titled “使用例”](#使用例-7) ```javascript // 使用例: 現在のティック値を取得してログに出力する const tickValue = reearth.timeline.tick?.(); if (tickValue) { console.log("Current Tick Value:", tickValue.toISOString()); } else { console.log("Timeline tick is not set or the timeline is inactive."); } ``` ### play [Section titled “play”](#play) play メソッドは、タイムラインの再生を開始します。タイムラインが現在の状態から範囲を進行し始めるようにトリガーするために使用します。このメソッドは、アニメーション、時間ベースのデータビジュアライゼーション、またはユーザーによるタイムライン操作のシナリオに便利です。 #### 構文 [Section titled “構文”](#構文-8) ```ts reearth.timeline.play?: () => void; ``` #### 戻り値: [Section titled “戻り値:”](#戻り値-1) なし `(void)`。このメソッドは値を返さずに操作を実行します。 #### 使用例 [Section titled “使用例”](#使用例-8) ```javascript // 使用例: タイムラインを再生する if (reearth.timeline.play) { reearth.timeline.play(); console.log("Timeline playback started."); } else { console.log("The play method is not available."); } ``` ### pause [Section titled “pause”](#pause) pause メソッドは、現在位置をリセットせずにタイムラインの再生を停止します。このメソッドは、タイムラインに紐づいたアニメーションや時間ベースの処理を一時的に停止し、後で同じ位置から再開できるようにする際に便利です。 #### 構文 [Section titled “構文”](#構文-9) ```ts reearth.timeline.pause?: () => void; ``` #### 戻り値: [Section titled “戻り値:”](#戻り値-2) なし `(void)`。このメソッドは値を返さずに操作を実行します。 #### 使用例 [Section titled “使用例”](#使用例-9) ```javascript // 使用例: タイムラインを一時停止する if (reearth.timeline.pause) { reearth.timeline.pause(); console.log("Timeline playback paused."); } else { console.log("The pause method is not available."); } ``` ### setTime [Section titled “setTime”](#settime) このメソッドを使用すると、タイムラインの開始・停止・現在時刻を設定できます。このメソッドは、アニメーションの同期や時間ベースのデータビジュアライゼーションの調整など、タイムラインの範囲と位置を動的に制御する際に便利です。 #### 構文 [Section titled “構文”](#構文-10) ```ts reearth.timeline.setTime?: (time: Options) => void; ``` #### パラメータ [Section titled “パラメータ”](#パラメータ) ##### `time` [Section titled “time”](#time) setTime メソッドの time オブジェクトを使用すると、タイムラインの3つの重要なポイントを定義できます。 **型**: ```ts type Options = { start: Date | string; stop: Date | string; current: Date | string; }; ``` * **`start: Date | string;`**:タイムラインの開始点を定義します。 * **`stop: Date | string;`**:タイムラインの終了点を定義します。 * **`current: Date | string;`**:タイムライン上の現在の時点を定義します。 #### 戻り値: [Section titled “戻り値:”](#戻り値-3) なし `(void)`。このメソッドは値を返さずに操作を実行します。 #### 使用例 [Section titled “使用例”](#使用例-10) ```javascript // 使用例: カスタムタイムライン時刻を設定する if (reearth.timeline.setTime) { reearth.timeline.setTime({ start: new Date("2023-01-01T00:00:00Z"), stop: new Date("2023-12-31T23:59:59Z"), current: new Date("2023-06-01T12:00:00Z"), }); console.log("Timeline times set successfully."); } else { console.log("The setTime method is not available."); } ``` ### setSpeed [Section titled “setSpeed”](#setspeed) このメソッドを使用すると、タイムラインの再生速度を動的に調整できます。このメソッドは、タイムラインが範囲をどれだけ速く進行するかを制御し、アニメーションや時間ベースのデータビジュアライゼーションに柔軟性を提供します。 #### 構文 [Section titled “構文”](#構文-11) ```ts reearth.timeline.setSpeed?: (speed: number) => void; ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-1) ##### `speed` [Section titled “speed”](#speed-1) **型**: `number` タイムラインの再生速度を表す数値です。`1.0`:リアルタイム再生、`>1.0`:リアルタイムより速い(例:2.0 で2倍速)、`<1.0`:リアルタイムより遅い(例:0.5 で半速)。 #### 戻り値: [Section titled “戻り値:”](#戻り値-4) なし `(void)`。このメソッドは値を返さずに操作を実行します。 #### 使用例 [Section titled “使用例”](#使用例-11) ```javascript // 使用例 1: 再生速度をリアルタイム(1.0)に設定する if (reearth.timeline.setSpeed) { reearth.timeline.setSpeed(1.0); console.log("Timeline speed set to real-time (1.0)."); } else { console.log("The setSpeed method is not available."); } // 使用例 2: ユーザー入力からタイムライン速度を動的に調整する const userSelectedSpeed = 3.0; // ユーザー入力の例 if (reearth.timeline.setSpeed) { reearth.timeline.setSpeed(userSelectedSpeed); console.log(`Timeline speed dynamically set to ${userSelectedSpeed}.`); } else { console.log("The setSpeed method is unavailable."); } ``` ### setStepType [Section titled “setStepType”](#setsteptype) setStepType メソッドを使用すると、タイムラインのステップ動作を動的に調整できます。タイムラインが可変レート(rate)で進むか、固定間隔(fixed)で進むかを制御します。アニメーションやデータ更新など、タイムラインの時間進行処理をカスタマイズする際に便利です。 #### 構文 [Section titled “構文”](#構文-12) ```ts reearth.timeline.setStepType?: (stepType: "rate" | "fixed") => void; ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-2) ##### `stepType` [Section titled “stepType”](#steptype-1) ステップ動作を指定します。 **型**: `"rate" | "fixed"` * **`rate`**:タイムラインは時間に比例した可変レートで進行し、通常は再生速度(speed プロパティ)の影響を受けます。 * **`fixed`**:タイムラインは固定時間間隔(例:毎秒、毎分、毎時)で進行します。 #### 戻り値: [Section titled “戻り値:”](#戻り値-5) なし `(void)`。このメソッドは値を返さずに操作を実行します。 #### 使用例 [Section titled “使用例”](#使用例-12) ```javascript // 使用例 1: タイムラインのステップを 'rate' に設定する if (reearth.timeline.setStepType) { reearth.timeline.setStepType("rate"); console.log("Timeline step type set to 'rate'."); } else { console.log("The setStepType method is not available."); } // 使用例 2: タイムラインのステップを 'fixed' に設定する reearth.timeline.setStepType?.("fixed"); console.log("Timeline step type set to 'fixed'."); // 使用例 3: データ要件に基づいてタイムラインのステップ種類を動的に設定する const requiresContinuousUpdates = true; if (reearth.timeline.setStepType) { if (requiresContinuousUpdates) { reearth.timeline.setStepType("rate"); console.log("Timeline step type dynamically set to 'rate'."); } else { reearth.timeline.setStepType("fixed"); console.log("Timeline step type dynamically set to 'fixed'."); } } ``` ### setRangeType [Section titled “setRangeType”](#setrangetype) setRangeType メソッドを使用すると、タイムラインが時間進行の範囲をどのように扱うかを動的に定義できます。このメソッドは、タイムラインが定義された startTime と stopTime を超えて拡張できるか、その範囲内に制限されるか、またはループ効果を生み出しながら開始・停止時刻の間で「バウンス」するかを決定します。 #### 構文 [Section titled “構文”](#構文-13) ```ts reearth.timeline.setRangeType?: ( rangeType: "unbounded" | "clamped" | "bounced" ) => void; ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-3) ##### `rangeType` [Section titled “rangeType”](#rangetype-1) 範囲の動作を指定します。 **型**: `"unbounded" | "clamped" | "bounced"` * **`unbounded`**:タイムラインは startTime と stopTime を超えて無制限に拡張できます。 * **`clamped`**:タイムラインは定義された startTime と stopTime の範囲内に制限されます。 * **`bounced`**:タイムラインは startTime と stopTime の間で「バウンス」し、ループのような効果を生み出します。 #### 戻り値: [Section titled “戻り値:”](#戻り値-6) なし `(void)`。このメソッドは値を返さずに操作を実行します。 #### 使用例 [Section titled “使用例”](#使用例-13) ```javascript // 使用例 1: タイムラインを無制限に進行させる if (reearth.timeline.setRangeType) { reearth.timeline.setRangeType("unbounded"); console.log("Timeline range type set to 'unbounded'."); } else { console.log("The setRangeType method is not available."); } // 使用例 2: タイムラインを定義された範囲内に制限する reearth.timeline.setRangeType?.("clamped"); console.log("Timeline range type set to 'clamped'."); // 使用例 3: タイムラインのバウンス動作を有効にする if (reearth.timeline.setRangeType) { reearth.timeline.setRangeType("bounced"); console.log("Timeline range type set to 'bounced'."); } // 使用例 4: アプリケーションの要件に基づいて範囲種類を動的に設定する const useInfiniteTimeline = true; if (reearth.timeline.setRangeType) { if (useInfiniteTimeline) { reearth.timeline.setRangeType("unbounded"); console.log("Timeline range type dynamically set to 'unbounded'."); } else { reearth.timeline.setRangeType("clamped"); console.log("Timeline range type dynamically set to 'clamped'."); } } ``` ## イベント [Section titled “イベント”](#イベント) ノート 共通のイベントメソッド(`on`、`off`)の詳細については、[イベント](/ja/developer/plugin/api-reference/events) ページを参照してください。 ### tick [Section titled “tick”](#tick-1) tick イベントは、タイムラインの現在時刻が更新されるたびに発火します。これは通常、タイムラインが進行するか、手動で調整されたときにトリガーされます。 #### 構文 [Section titled “構文”](#構文-14) ```ts reearth.timeline.on("tick", (event: Date) => void): void; ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-4) **event:** Date tick イベント中のタイムラインの現在時刻を表す JavaScript Date オブジェクトです。 #### 使用例 [Section titled “使用例”](#使用例-14) ```javascript // タイムラインの現在時刻の各ティックをログに出力する reearth.timeline.on("tick", (e) => { console.log("Timeline tick at:", e.toISOString()); }); // 特定のティック値に基づいてアクションを実行する reearth.timeline.on("tick", (e) => { const targetTime = new Date("2023-12-25T00:00:00Z"); if (e.getTime() === targetTime.getTime()) { console.log("Merry Christmas! Timeline reached the target time."); } }); ``` ### commit [Section titled “commit”](#commit) commit イベントは、ウィジェット、プラグイン、またはその他のタイムラインブロックからの更新など、アクションによってタイムラインが変更されるたびに発火します。 #### 構文 [Section titled “構文”](#構文-15) ```ts reearth.timeline.on("commit", (event: TimelineCommitter) => void): void; ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-5) **event:** TimelineCommitter タイムライン変更のソースと追加のメタデータを記述するオブジェクトです。 ```ts type TimelineCommitter = { source: | "widgetContext" // ウィジェット操作によるタイムライン変更 | "pluginAPI" // プラグイン API を通じた変更 | "storyTimelineBlock" // ストーリー内のタイムラインブロックによる変更 | "storyPage"; // ストーリーページナビゲーションによってトリガーされた変更 id?: string; }; ``` * **`source: string`**:コミットアクションの起点を指定します。 * **`id?: string`**:コミットのソースに対するオプションの識別子です。 #### 使用例 [Section titled “使用例”](#使用例-15) ```javascript // タイムラインが変更されたときにコミットのソースと ID をログに出力する reearth.timeline.on("commit", (e) => { console.log(`Timeline commit from source: ${e.source}`); if (e.id) { console.log(`Commit ID: ${e.id}`); } }); // コミットのソースに基づいて特定のアクションを実行する reearth.timeline.on("commit", (e) => { if (e.source === "pluginAPI") { console.log("Timeline updated via Plugin API."); } else if (e.source === "storyPage") { console.log("Timeline updated by a story page."); } }); ``` # reearth.ui > `reearth.ui` の API リファレンスです。 **`reearth.ui`** 名前空間は、プラグイン拡張(ウィジェットまたはブロック)のユーザーインターフェース要素を管理するための幅広い機能を提供します。 ## メソッド [Section titled “メソッド”](#メソッド) ### show [Section titled “show”](#show) このメソッドは、カスタム HTML コンテンツをプラグイン拡張(プラグイン設定に基づくウィジェットまたはブロック)として `reearth` に表示します。iframe の表示状態やサイズを動的に制御でき、iframe を視覚的に表示しないモードにも対応しています。パラメータは 2 つです。表示する HTML コンテンツと、省略可能なオプションオブジェクトです。 #### 構文 [Section titled “構文”](#構文) ```ts reearth.ui.show: ( html: string, options?: Options ) => void; ``` #### パラメータ [Section titled “パラメータ”](#パラメータ) ##### `html` [Section titled “html”](#html) **型**: `string` レンダリングする HTML コンテンツの文字列です。 ##### `options` [Section titled “options”](#options) **省略可能** **型**: ```ts type Options = { visible?: boolean; width?: number | string; height?: number | string; extended?: boolean; }; ``` * **`visible?: boolean`**: `true` の場合、iframe を表示します。`false` の場合、iframe を非表示にし、プラグインはヘッドレスモードで動作します。デフォルト値は `true` です。 * **`width?: number | string;`**: ウィジェットの iframe の初期幅です。指定しない場合、iframe はコンテンツに合わせて自動リサイズされます。数値を指定した場合はピクセル単位として扱われます。このオプションは水平方向に拡張されていないウィジェットにのみ有効です。 * **`height?: number | string;`**: ウィジェットの iframe の初期高さです。指定しない場合、iframe はコンテンツに合わせて自動リサイズされます。数値を指定した場合はピクセル単位として扱われます。このオプションは垂直方向に拡張されていないウィジェットにのみ有効です。 * **`extended?: boolean;`**: iframe がより広い領域を占有するかどうかを示します。`true` の場合、iframe はコンテナ内の利用可能なスペースを埋めるように拡張されます。このオプションは、ウィジェットアラインシステムの拡張可能エリアに配置されたウィジェットにのみ有効です。 #### 戻り値 [Section titled “戻り値”](#戻り値) なし(void)。このメソッドは値を返しません。 #### 使用例 [Section titled “使用例”](#使用例) ```javascript const html = `

Hello world

`; // HTML UI のみ表示する reearth.ui.show(html); // HTML UI を非表示状態で表示する reearth.ui.show(html, { visible: false }); // 幅と高さを指定して HTML UI を表示する reearth.ui.show(html, { width: 400, height: 200 }); // 拡張可能エリアで iframe を拡張する reearth.ui.show(`
Extended widget content
`, { extended: true }); ``` ### postMessage [Section titled “postMessage”](#postmessage) このメソッドは、プラグインの UI コンポーネント(iframe)にメッセージを送信します。 #### 構文 [Section titled “構文”](#構文-1) ```ts reearth.ui.postMessage: (message: any) => void; ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-1) ##### `message` [Section titled “message”](#message) **型**: `any` message には、構造化クローン可能な任意の型を指定できます。 #### 戻り値 [Section titled “戻り値”](#戻り値-1) なし(void)。このメソッドは値を返しません。 #### 使用例 [Section titled “使用例”](#使用例-1) ```javascript //使用例 1: UI iframe にメッセージを送信する reearth.ui.postMessage("Hello, Re:Earth!"); //使用例 2: オブジェクト形式のメッセージを送信する reearth.ui.postMessage({ type: "greeting", text: "Hello, World!" }); ``` ### resize [Section titled “resize”](#resize) プラグインが使用する iframe のサイズを調整します。width または height が undefined の場合は自動リサイズされます。数値を指定した場合はピクセル単位として扱われます。パラメータは 3 つです。width、height、および省略可能な extended です。 UI iframe はコンテンツサイズに基づいて自動的にリサイズされます。このメソッドは、iframe のサイズを手動で設定したい場合に便利です。 #### 構文 [Section titled “構文”](#構文-2) ```ts reearth.ui.resize( width: string | number | undefined, height: string | number | undefined, extended?: boolean | undefined ) => void; ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-2) ##### `width` [Section titled “width”](#width) **型**: `string | number | undefined` ウィジェットの iframe の幅です。このフィールドは水平方向に拡張されていないウィジェットにのみ有効です。 ##### `height` [Section titled “height”](#height) **型**: `string | number | undefined` ウィジェットの iframe の高さです。このフィールドは垂直方向に拡張されていないウィジェットにのみ有効です。 ##### `extended?` [Section titled “extended?”](#extended) **省略可能** **型**: `boolean | undefined` 省略可能なパラメータです。iframe を拡張するかどうかを示すブール値です。このオプションは、ウィジェットアラインシステムの拡張可能エリアに配置されたウィジェットにのみ有効です。 * `true`: UI 要素を拡張します。 * `false`: UI 要素を拡張しません。 * `undefined`: 拡張状態を変更しません。 #### 使用例 [Section titled “使用例”](#使用例-2) ```javascript // 使用例 1: UI を 400px × 300px にリサイズする reearth.ui.resize(400, 300); // 使用例 2: サイズを変更せずに UI 要素を拡張する reearth.ui.resize(undefined, undefined, true); // 使用例 3: 高さのみ 500px に変更し、他のプロパティは変更しない reearth.ui.resize(undefined, 500); ``` ### close [Section titled “close”](#close) このメソッドは、現在の UI ウィジェットを閉じるために使用します。クローズ操作をプログラムからトリガーする手段を提供します。パラメータはありません。 #### 構文 [Section titled “構文”](#構文-3) ```ts reearth.ui.close: () => void ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-3) なし #### 戻り値 [Section titled “戻り値”](#戻り値-2) なし(void)。このメソッドは値を返しません。 #### 使用例 [Section titled “使用例”](#使用例-3) ```ts // 現在の UI ウィジェットを閉じる reearth.ui.close(); ``` ## イベント [Section titled “イベント”](#イベント) ノート 共通のイベントメソッド(`on`、`off`)の詳細については、[イベント](/ja/developer/plugin/api-reference/events) ページを参照してください。 ### update [Section titled “update”](#update) update イベントは、UI の状態またはコンテンツが変化するたびにトリガーされます。UI の状態の変化を追跡したり、最新のデータに基づいてコンテンツを更新したりする際に便利です。 #### 構文 [Section titled “構文”](#構文-4) ```ts reearth.ui.on("update", () => void): void; ``` #### 使用例 [Section titled “使用例”](#使用例-4) ```javascript reearth.ui.on("update", () => { console.log("UI updated!"); }); ``` ### close [Section titled “close”](#close-1) close イベントは、UI が閉じられたときにトリガーされます。このイベントは、クリーンアップ処理の実行、データの保存、または UI が非アクティブになったことを他のコンポーネントに通知する際に使用できます。 #### 構文 [Section titled “構文”](#構文-5) ```ts reearth.ui.on("close", () => void): void; ``` #### 使用例 [Section titled “使用例”](#使用例-5) ```javascript reearth.ui.on("close", () => { console.log("The UI was closed."); }); ``` # reearth.viewer > reearth.viewer `reearth.viewer` 名前空間は、ビューアと対話するための関数群を提供します。 ## プロパティ [Section titled “プロパティ”](#プロパティ) ### property [Section titled “property”](#property) `property` は、グローブ・地形・シーン・タイル・空など、ビューアに関する各種プロパティを提供します。 #### 構文 [Section titled “構文”](#構文) ```ts reearth.viewer.property: ViewerProperty; ``` #### 戻り値 [Section titled “戻り値”](#戻り値) **型** `ViewerProperty` 現在、`property` は明示的に設定されたプロパティのみを返します。デフォルト値は含まれません。 ノート `ViewerProperty` は Re:Earth Core からインポートされています。詳細は [ViewerProperty](https://github.com/reearth/core/blob/alpha/src/Map/types/viewerProperty.ts) を参照してください。 ### viewport [Section titled “viewport”](#viewport) `viewport` は、マップ領域に関連するプロパティと、現在のビューポート(ページ)の URL クエリパラメータを提供するために設計されています。 #### 構文 [Section titled “構文”](#構文-1) ```ts reearth.viewer.viewport: Viewport; ``` #### 戻り値 [Section titled “戻り値”](#戻り値-1) **型** ```ts type Viewport = { width: number; height: number; isMobile: boolean; query: Record; }; ``` * **width:** ビューポートの幅です。 * **height:** ビューポートの高さです。 * **isMobile:** ビューポートがモバイルデバイスかどうかを示す真偽値です。bowser のユーザーエージェント検出に基づき判定されます。 * **query:** 現在のページの URL クエリパラメータです。 ### env [Section titled “env”](#env) `env` は、現在実行中の Re:Earth Visualizer の環境情報を提供します。 #### 構文 [Section titled “構文”](#構文-2) ```ts reearth.viewer.env: Env; ``` #### 戻り値 [Section titled “戻り値”](#戻り値-2) **型** ```ts type Env = { inEditor: boolean; isBuilt: boolean; }; ``` `inEditor` と `isBuilt` は、実行されているページやタブによって異なる値を持ちます。プラグインはこれらの値に基づいて動作を切り替えることができます。 | プロパティ | エディタ - マップ/ストーリー/ウィジェットタブ | エディタ - 公開タブ | 公開済みページ | | -------- | ------------------------- | ----------- | ------- | | inEditor | true | false | false | | isBuilt | false | false | true | ### interactionMode [Section titled “interactionMode”](#interactionmode) `interactionMode` は、Re:Earth Visualizer におけるビューアのインタラクションモードを管理するプロパティとメソッドの集合を提供します。 #### interactionMode.mode [Section titled “interactionMode.mode”](#interactionmodemode) ビューアの現在のインタラクションモードです。 #### 構文 [Section titled “構文”](#構文-3) ```ts reearth.viewer.interactionMode.mode: InteractionModeType ``` #### 戻り値 [Section titled “戻り値”](#戻り値-3) **型** `InteractionModeType = "default" | "move" | "selection" | "sketch" | "spatialId"` * **`default`**: デフォルトのインタラクションモードです。 * **`move`**: 移動インタラクションモードです。このモードでは選択が無効になります。 * **`selection`**: 選択インタラクションモードです。このモードでは移動が無効になります。 * **`sketch`**: スケッチインタラクションモードです。スケッチはこのモードでのみ有効にできます。 * **`spatialId`**: Spatial ID を扱うためのインタラクションモードです。Spatial ID の選択時に使用します。 #### interactionMode.override [Section titled “interactionMode.override”](#interactionmodeoverride) ビューアのインタラクションモードを上書きします。 #### 構文 [Section titled “構文”](#構文-4) ```ts reearth.viewer.interactionMode.override: ( mode: InteractionModeType ) => void; ``` #### パラメータ [Section titled “パラメータ”](#パラメータ) ##### `mode` [Section titled “mode”](#mode) **型**: `InteractionModeType` 設定するインタラクションモードです。 #### 戻り値 [Section titled “戻り値”](#戻り値-4) なし(void)。このメソッドは値を返しません。 ## メソッド [Section titled “メソッド”](#メソッド) ### overrideProperty [Section titled “overrideProperty”](#overrideproperty) `overrideProperty` は、ビューアのプロパティを上書きするために使用します。 #### 構文 [Section titled “構文”](#構文-5) ```ts reearth.viewer.overrideProperty: (property: ViewerProperty) => void; ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-1) ##### property [Section titled “property”](#property-1) **型** `ViewerProperty` ノート `ViewerProperty` は Re:Earth Core からインポートされています。詳細は [ViewerProperty](https://github.com/reearth/core/blob/alpha/src/Map/types/viewerProperty.ts) を参照してください。 #### 戻り値 [Section titled “戻り値”](#戻り値-5) **型** `void` このメソッドは戻り値を持ちません。 #### 使用例 [Section titled “使用例”](#使用例) ```javascript // 地形を有効にする reearth.viewer.overrideProperty({ terrain: { enabled: true, }, }); ``` ### capture [Section titled “capture”](#capture) `capture` 関数は、現在のビューアの画像を生成します。 #### 構文 [Section titled “構文”](#構文-6) ```ts reearth.viewer.capture: ( type?: string, encoderOptions?: number ) => string | undefined; ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-2) ##### type [Section titled “type”](#type) **型** `string`(省略可能) 画像フォーマットを示す文字列です。デフォルトのフォーマットは `image/png` であり、指定したフォーマットがサポートされていない場合もこのフォーマットが使用されます。 ##### encoderOptions [Section titled “encoderOptions”](#encoderoptions) **型** `number`(省略可能) `image/jpeg` や `image/webp` など非可逆圧縮をサポートするファイルフォーマットで画像を作成する際の画質を表す、0 から 1 の数値です。このオプションを指定しない場合、または値が許容範囲外の場合は、ユーザーエージェントのデフォルト品質値が使用されます。 ノート このメソッドは内部的に `canvas.toDataURL` を呼び出しています。詳細は [HTMLCanvasElement: toDataURL() method](https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toDataURL) を参照してください。 #### 戻り値 [Section titled “戻り値”](#戻り値-6) **型** `string | undefined` リクエストされたデータ URL を含む文字列です。 #### 使用例 [Section titled “使用例”](#使用例-1) ```javascript // 現在のマップのキャプチャを取得します。 // 返された画像文字列をウィジェット UI に送信してダウンロードをトリガーできます。 console.log(reearth.viewer.capture("image/png")); ``` ### open [Section titled “open”](#open) `open` メソッドは、URL を新しいタブで開くために使用します。 #### 構文 [Section titled “構文”](#構文-7) ```ts reearth.viewer.open: (url: string) => void; ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-3) ##### url [Section titled “url”](#url) **型** `string` 新しいタブで開く URL です。 #### 戻り値 [Section titled “戻り値”](#戻り値-7) **型** `void` ### reload [Section titled “reload”](#reload) `reload` メソッドは、現在の Visualizer ページを再読み込みします。 #### 構文 [Section titled “構文”](#構文-8) ```ts reearth.viewer.reload: () => void; ``` #### 戻り値 [Section titled “戻り値”](#戻り値-8) **型** `void` ### tools [Section titled “tools”](#tools) `tools` モジュールは、グローブおよびシーン周辺のさまざまな計算を行うためのヘルパー関数のコレクションを提供します。 ### > getLocationFromScreenCoordinate [Section titled “> getLocationFromScreenCoordinate”](#-getlocationfromscreencoordinate) スクリーン座標から地球上の位置を返します。 #### 構文 [Section titled “構文”](#構文-9) ```ts reearth.viewer.tools.getLocationFromScreenCoordinate: ( x: number, y: number, withTerrain?: boolean ) => { lat: number; lng: number; height: number } | undefined; ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-4) ##### x [Section titled “x”](#x) **型** `number` ビューア上の x ピクセル座標です。 ##### y [Section titled “y”](#y) **型** `number` ビューア上の y ピクセル座標です。 ##### withTerrain [Section titled “withTerrain”](#withterrain) **型** `boolean`(省略可能) 地形の高さを考慮するかどうかを示す真偽値です。デフォルト値は `false` です。 #### 戻り値 [Section titled “戻り値”](#戻り値-9) **型** `{ lat: number; lng: number; height: number } | undefined` 地球上の位置です。 ### > getScreenCoordinateFromPosition [Section titled “> getScreenCoordinateFromPosition”](#-getscreencoordinatefromposition) 地球上の位置からスクリーン座標を返します。 #### 構文 [Section titled “構文”](#構文-10) ```ts reearth.viewer.tools.getScreenCoordinateFromPosition: ( position: [x: number, y: number, z: number] ) => [x: number, y: number] | undefined; ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-5) ##### position [Section titled “position”](#position) **型** `[x: number, y: number, z: number]` 地球上の位置(デカルト座標)です。 #### 戻り値 [Section titled “戻り値”](#戻り値-10) **型** `[x: number, y: number] | undefined` ビューア上のピクセル座標です。 ### > getTerrainHeightAsync [Section titled “> getTerrainHeightAsync”](#-getterrainheightasync) 指定した位置の地形の高さを返します。これは非同期関数です。 #### 構文 [Section titled “構文”](#構文-11) ```ts reearth.viewer.tools.getTerrainHeightAsync: ( lng: number, lat: number ) => Promise; ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-6) ##### lng [Section titled “lng”](#lng) **型** `number` 位置の経度です。 ##### lat [Section titled “lat”](#lat) **型** `number` 位置の緯度です。 #### 戻り値 [Section titled “戻り値”](#戻り値-11) **型** `Promise` 指定した位置の地形の高さです。 ### > getGlobeHeight [Section titled “> getGlobeHeight”](#-getglobeheight) 指定した位置の地表の高さを返します。 #### 構文 [Section titled “構文”](#構文-12) ```ts reearth.viewer.tools.getGlobeHeight: ( lng: number, lat: number ) => number | undefined; ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-7) ##### lng [Section titled “lng”](#lng-1) **型** `number` 位置の経度です。 ##### lat [Section titled “lat”](#lat-1) **型** `number` 位置の緯度です。 #### 戻り値 [Section titled “戻り値”](#戻り値-12) **型** `number | undefined` 指定した位置の地表の高さです。 ### > getCurrentLocationAsync [Section titled “> getCurrentLocationAsync”](#-getcurrentlocationasync) ユーザーの現在位置を返します。これはブラウザの Geolocation API を使用する非同期関数です。 #### 構文 [Section titled “構文”](#構文-13) ```ts reearth.viewer.tools.getCurrentLocationAsync: ( options?: Options ) => Promise; ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-8) ##### options [Section titled “options”](#options) **型** `Options`(省略可能) 以下のパラメータを含むオプションオブジェクトです。 * **maximumAge:** キャッシュされた位置情報の最大有効期間(ミリ秒)です。デフォルト値は `0` です。 * **timeout:** 位置情報の取得を待機する最大時間(ミリ秒)です。デフォルト値は `10,000ms` です。 * **enableHighAccuracy:** 高精度の位置情報をリクエストするかどうかです。デフォルト値は `false` です。 ノート オプションの詳細については [Geolocation.getCurrentPosition()](https://developer.mozilla.org/docs/Web/API/Geolocation/getCurrentPosition) を参照してください。 #### 戻り値 [Section titled “戻り値”](#戻り値-13) **型** `Promise` ```ts type Location = { lat: number; lng: number; height: number; }; ``` ユーザーの現在位置です。 ### > cartographicToCartesian [Section titled “> cartographicToCartesian”](#-cartographictocartesian) 地理座標をデカルト座標に変換します。 #### 構文 [Section titled “構文”](#構文-14) ```ts reearth.viewer.tools.cartographicToCartesian: ( lng: number, lat: number, height: number, options?: { useGlobeEllipsoid?: boolean } ) => [x: number, y: number, z: number] | undefined; ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-9) ##### lng [Section titled “lng”](#lng-2) **型** `number` 位置の経度です。 ##### lat [Section titled “lat”](#lat-2) **型** `number` 位置の緯度です。 ##### height [Section titled “height”](#height) **型** `number` 位置の高さです。 ##### options [Section titled “options”](#options-1) **型** `{ useGlobeEllipsoid?: boolean }`(省略可能) * **useGlobeEllipsoid:** グローブの楕円体を使用するかどうかを示す真偽値です。デフォルト値は `false` です。 #### 戻り値 [Section titled “戻り値”](#戻り値-14) **型** `[x: number, y: number, z: number] | undefined` デカルト座標の位置です。 ### > cartesianToCartographic [Section titled “> cartesianToCartographic”](#-cartesiantocartographic) デカルト座標を地理座標に変換します。 #### 構文 [Section titled “構文”](#構文-15) ```ts reearth.viewer.tools.cartesianToCartographic: ( x: number, y: number, z: number, options?: { useGlobeEllipsoid?: boolean } ) => [lng: number, lat: number, height: number] | undefined; ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-10) ##### x [Section titled “x”](#x-1) **型** `number` 位置の x 座標です。 ##### y [Section titled “y”](#y-1) **型** `number` 位置の y 座標です。 ##### z [Section titled “z”](#z) **型** `number` 位置の z 座標です。 ##### options [Section titled “options”](#options-2) **型** `{ useGlobeEllipsoid?: boolean }`(省略可能) * **useGlobeEllipsoid:** グローブの楕円体を使用するかどうかを示す真偽値です。デフォルト値は `false` です。 #### 戻り値 [Section titled “戻り値”](#戻り値-15) **型** `[lng: number, lat: number, height: number] | undefined` 地理座標の位置です。 ### > transformByOffsetOnScreen [Section titled “> transformByOffsetOnScreen”](#-transformbyoffsetonscreen) スクリーン上のオフセットによって位置を変換します。 #### 構文 [Section titled “構文”](#構文-16) ```ts reearth.viewer.tools.transformByOffsetOnScreen: ( rawPosition: [x: number, y: number, z: number], screenOffset: [x: number, y: number] ) => [x: number, y: number, z: number] | undefined; ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-11) ##### rawPosition [Section titled “rawPosition”](#rawposition) **型** `[x: number, y: number, z: number]` 地球上の元の位置です。 ##### screenOffset [Section titled “screenOffset”](#screenoffset) **型** `[x: number, y: number]` スクリーン上のオフセットです。 #### 戻り値 [Section titled “戻り値”](#戻り値-16) **型** `[x: number, y: number, z: number] | undefined` 変換後の位置です。 ### > isPositionVisibleOnGlobe [Section titled “> isPositionVisibleOnGlobe”](#-ispositionvisibleonglobe) 指定した位置がグローブ上で表示可能かどうかを確認します。 #### 構文 [Section titled “構文”](#構文-17) ```ts reearth.viewer.tools.isPositionVisibleOnGlobe: ( position: [x: number, y: number, z: number] ) => boolean; ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-12) ##### position [Section titled “position”](#position-1) **型** `[x: number, y: number, z: number]` 地球上の位置です。 #### 戻り値 [Section titled “戻り値”](#戻り値-17) **型** `boolean` 指定した位置がグローブ上で表示可能かどうかを示す真偽値です。 ## イベント [Section titled “イベント”](#イベント) ノート 共通イベントメソッド(`on`、`off`)の詳細については、[イベント](/ja/developer/plugin/api-reference/events) ページを参照してください。 ### resize [Section titled “resize”](#resize) `resize` イベントは、ビューアがリサイズされたときにトリガーされます。 #### 構文 [Section titled “構文”](#構文-18) ```ts reearth.viewer.on("resize", ({width: number, height: number, isMobile:boolean}) => void); ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-13) * **width:** ビューポートの幅です。 * **height:** ビューポートの高さです。 * **isMobile:** ビューポートがモバイルデバイスかどうかを示す真偽値です。bowser のユーザーエージェント検出に基づき判定されます。 #### 使用例 [Section titled “使用例”](#使用例-2) ```javascript reearth.viewer.on("resize", ({ width, height, isMobile }) => { console.log(`width: ${width}, height: ${height}, isMobile: ${isMobile}`); }); ``` ### マウスイベント [Section titled “マウスイベント”](#マウスイベント) ビューアにはリッスン可能なマウスイベントのセットがあります。これらはすべて同じパラメータを持ちます。 サポートされているイベントは以下のとおりです。 * click * doubleClick * mouseDown * mouseUp * rightClick * rightDown * rightUp * middleClick * middleDown * middleUp * mouseMove * mouseEnter * mouseLeave * wheel #### 構文 [Section titled “構文”](#構文-19) ```ts reearth.viewer.on("click", (event: MouseEvent)=> void); ``` #### パラメータ [Section titled “パラメータ”](#パラメータ-14) **event:** MouseEvent ```ts type MouseEvent = { x?: number; y?: number; lat?: number; lng?: number; height?: number; layerId?: string; delta?: number; }; ``` * **x:** ビューアを基準としたカーソルの x 座標です。 * **y:** ビューアを基準としたカーソルの y 座標です。 * **lat:** 地球上のカーソルの緯度です。 * **lng:** 地球上のカーソルの経度です。 * **height:** 地球上のカーソルの高さです。 * **layerId:** カーソルが乗っているオブジェクトのレイヤ ID です。 * **delta:** ホイールイベントのデルタ値です。 #### 使用例 [Section titled “使用例”](#使用例-3) ```javascript reearth.viewer.on("mouseMove", ({ lat, lng, height }) => { console.log(`lat: ${lat}, lng: ${lng}, height: ${height}`); }); ``` # 例 > 機能別に Visualizer プラグインの例を紹介します。 プラグインプレイグラウンドには、すぐに動かせるサンプルプラグイン(プリセット)が用意されています。ブラウザ上で開いて実行し、そのまま編集して試せるため、動作する実例を見て学ぶのに最適です。 [プラグインプレイグラウンド](https://visualizer.reearth.io/plugin-playground?plugin-id=my-plugin) を開き、**Plugins** パネルからプリセットを選択してコードを読み込み、実行してください。例は Playground 内と同じカテゴリで分類しています。 各プリセットは、**Share** ボタンで共有リンクをコピーするか、**Export** ボタンで `.zip` をダウンロードできます。非常に大きいプリセットはリンク共有できず、エクスポートのみ対応します。 ## User Interface [Section titled “User Interface”](#user-interface) `reearth.ui` および関連 API による、パネル、ナビゲーション、ポップアップ、ダイアログなどのカスタム UI 構築。 * **Responsive Panel**: ユーザーがリスト項目を追加/削除できるパネルウィジェット * **Sidebar**: 検索バーとメニュー項目を持つ折りたたみ式サイドバー * **Header**: ロゴとメニューリンクを備えた固定トップナビゲーションバー * **Popup**: ポップアップウィンドウの開閉、再配置、メッセージング(`reearth.popup` も使用) * **Modal Window**: モーダルダイアログの表示と、メッセージ受信によるクローズ(`reearth.modal` を使用) ## Data [Section titled “Data”](#data) プラグイン、UI、Visualizer 間でのデータ受け渡し、およびクライアント側でのデータ保存。 * **Messenger Between Extension and Visualizer**: マップクリック座標を取得し、そこへカメラを飛ばす(`reearth.viewer`、`reearth.extension` を使用) * **Messenger Between Extensions**: 2 つのウィジェット拡張間で双方向メッセージング(`reearth.extension` を使用) * **Extension Property**: `reearth.yml` の schema で定義したプロパティを読み取り表示(`reearth.extension` を使用) * **Client Storage**: ライト/ダークテーマの選択を保存し、次回も維持(`reearth.data` を使用) ## Viewer & Scene Settings [Section titled “Viewer & Scene Settings”](#viewer--scene-settings) `reearth.viewer` を使ったシーン環境の制御と、ビューア状態の取得。 * **Enable Shadow Style**: スイッチでシーンの影描画を切り替える * **Enable Terrain**: Cesium World Terrain と depth testing を切り替える * **Take Screenshot**: 現在の 3D ビューを PNG としてダウンロード * **Mouse Events**: クリック地点の緯度・経度・高さを表示 * **Get Current Location**: デバイスの現在地を取得してカメラを移動(`reearth.camera` も使用) ## Manage Layer [Section titled “Manage Layer”](#manage-layer) `reearth.layers` による、多様な形式のデータレイヤの追加と制御。 * **Add GeoJSON**: GeoJSON レイヤ(インライン/URL)+ マーカー/ポリゴン/ポリライン * **Add Large GeoJSON**: `useAsResource` フラグで大規模 GeoJSON を最適化 * **Add CZML**: CZML レイヤ(data URI/URL) * **Add KML**: KML レイヤ(data URI/URL) * **Add CSV**: URL の CSV からレイヤ追加(lat/lng 列をマーカーにマッピング) * **Add 3D Tiles**: 3D Tiles レイヤ(基本色/PBR スタイル) * **Add Photogrammetric 3D Model**: 写真測量 3D Tiles データセット * **Add Point Cloud**: 3D Tiles 形式の点群データセット * **Add OSM 3D Tiles**: 組み込み `osm-buildings` タイプによる OSM 建物表示 * **Add WMS**: リモートサーバーの WMS タイルレイヤ * **Add Google Photorealistic 3D Tiles**: Google のフォトリアルタイル(Google Maps API キーが必要) * **Hide, Fly To, Delete Layer**: レイヤ単位の表示/非表示、fly-to、削除操作(`reearth.camera` も使用) * **Override Layer Data**: ポリゴンのジオメトリをその場で更新 * **Show Selected Feature Information**: 選択フィーチャーのプロパティを選択時に表示 * **Add Infobox to Show All Properties**: すべてのプロパティを表示するインフォボックス * **Add Infobox to Show Specific Properties**: 指定したプロパティのみ表示するインフォボックス * **Add Infobox to Show Rich Blocks**: テキスト/画像/Markdown/動画などのリッチブロックを持つインフォボックス ## Manage Layer Style [Section titled “Manage Layer Style”](#manage-layer-style) 共有プロパティから条件分岐、フィーチャーベースのルールまで、レイヤスタイルの適用。 * **Layer Styling Examples**: GeoJSON / CZML / KML / CSV に同じスタイリングを適用 * **Feature Style 3D Tiles**: 3D Tiles の color / PBR / shadows / highlight / wireframe * **Feature Style 3D Model**: タイムライン駆動のアニメーション GLTF モデルのスタイリング(`reearth.timeline` も使用) * **Override Style**: 高さに応じた 2 種のカラーグラデーションを切り替える * **Style With Condition**: 高さ範囲に応じて色を割り当てる条件式 * **Filter Features by Style**: プロパティ条件でマーカーを表示/非表示 ## Camera [Section titled “Camera”](#camera) `reearth.camera` によるカメラ移動と制御。 * **Zoom In Out**: ズームイン/ズームアウトボタン * **Camera Rotation**: ターゲットの周りにカメラを連続回転 * **Camera Position**: ライブなカメラ位置を追跡し、手動で新しい値を適用 ## Timeline [Section titled “Timeline”](#timeline) `reearth.timeline` による時間再生制御と、時間ベースのアニメーション。 * **Playback Control**: play/pause、速度、range-type の制御+ライブ時計 * **Time Driven Features**: 時間とともに押し出し高さが変わる CZML ポリゴン(`reearth.layers` も使用) * **Time Driven Path**: 時間サンプル位置により 3D 列車モデルをルートに沿ってアニメーション(`reearth.layers` も使用) # 公式プラグイン > Re:Earth チームが管理するプラグインを紹介します。 公式プラグインは Re:Earth チームが開発・保守しているプラグインです。すぐにインストールして利用でき、プラグイン開発の実用的な参考にもなります。以下は Re:Earth Visualizer Plugins Hub で公開されているものです。 ## CMS Data Visualizer [Section titled “CMS Data Visualizer”](#cms-data-visualizer) CMS のデータを 3D マップ上に可視化し、マーカーや情報表示をカスタマイズできます。 [View on GitHub](https://github.com/reearth-plugins/cms-data-visualizer-plugin) ## CMS CSV Importer [Section titled “CMS CSV Importer”](#cms-csv-importer) Visualizer エディタから CSV データを CMS のモデルへ直接インポートします。 [View on GitHub](https://github.com/reearth-plugins/cms-csv-importer) ## Legend Panel [Section titled “Legend Panel”](#legend-panel) 分かりやすい地図凡例を作成するためのカスタマイズ可能な凡例パネル。React / TypeScript / Tailwind CSS で構築されています。 [View on GitHub](https://github.com/reearth-plugins/legend-panel-plugin) ## Navigation Panel [Section titled “Navigation Panel”](#navigation-panel) 滑らかなカメラ移動とズーム操作を、視覚的なフィードバック付きで提供する直感的なナビゲーションコントロールパネル。 [View on GitHub](https://github.com/reearth-plugins/navigation-panel-plugin) *** 公式プラグインに加え、コミュニティ製プラグインも含む最新一覧は、[Re:Earth Visualizer Plugins Hub](https://github.com/reearth-plugins/visualizer-plugin-hub) を参照してください。 # プラグインプレイグラウンドで動かす > ローカル開発環境を準備せずにプラグインを実行、編集します。 ![](/_astro/plugin-playground-attributed.C2WqFa94_Z1CDW4K.webp) ## プラグインプレイグラウンドで動かす [Section titled “プラグインプレイグラウンドで動かす”](#プラグインプレイグラウンドで動かす) プラグインプレイグラウンドは、Re:Earth Visualizer プラグインを**ブラウザ上で**作成・検証できるインタラクティブ環境です。コードを書いて実行し、結果をライブマップ上で即座に確認できます。Playground の核心はこの「変更 → 実行 → 観察」の高速ループにあり、すべてが 1 画面で完結するため、パッケージングやインストールなしにアイデアを試してすぐ効果を確認できます。インストール作業やローカル環境構築が不要なため、プラグインに初めて触れる場合でも、アイデアのプロトタイピングでも、最速で試せます。 Playground は次のリンクから開けます:[プラグインプレイグラウンド](https://visualizer.reearth.io/plugin-playground?plugin-id=my-plugin) ## Playground のレイアウト [Section titled “Playground のレイアウト”](#playground-のレイアウト) Playground は 3 つのカラムに分かれています。 * **Viewer**(左)— プラグインがリアルタイムに動作するライブマップ。下には現在のシーンの **Layers** / **Settings** / **Extension Settings** パネルがあります。 * **Plugins**(中央)— 利用可能なプラグインと、選択したプラグインを構成するファイル(`reearth.yml` や各拡張の JavaScript ファイルなど)を一覧表示します。上部にはプラグイン/ファイル管理のボタン列があります。 * **Code**(右)— 選択したファイル内容を表示するコードエディタ。ここでプラグインコードを編集します。 Playground を開くと、**Custom** カテゴリに **My Plugin** というデフォルトプラグインが既にロードされています。`reearth.yml` とサンプル拡張ファイルが事前に用意されているので、そのまま実行することも、出発点として改変することもできます。 ## Plugins パネルのボタン [Section titled “Plugins パネルのボタン”](#plugins-パネルのボタン) **Plugins** パネル上部のボタン列で作業を管理できます。 * **Add file** — 現在のプラグインに新しいファイルを追加します。 * **Import plugin** — 既存のプラグインを Playground に読み込みます。 * **Export plugin** — 現在のプラグインを `reearth.yml` と JavaScript ファイルを含む `.zip` としてダウンロードします。これは Re:Earth Visualizer にインストールするのと同じ形式です。 * **Share plugin** — プラグインの共有リンクをクリップボードにコピーし、他の人に送れるようにします。 ## プリセット例を動かす [Section titled “プリセット例を動かす”](#プリセット例を動かす) Playground には、**User Interface**、**Data**、**Viewer & Scene Settings**、**Manage Layer**、**Camera**、**Timeline** などのカテゴリに分かれた、すぐに動かせるサンプルプラグイン(プリセット)が用意されています。これらは動作する実例として最適で、実際のコードから学べます。 プリセットを実行する手順: 1. **Plugins** パネルでカテゴリを選び、プリセットを 1 つ選択します。コードが **Code** エディタに読み込まれます。 2. **Code** パネル上部の **run** ボタンをクリックします。プラグインが実行され、**Viewer** のマップ上に表示されます。 3. **Code** エディタでコードを編集し、再度 **run** をクリックすると変更が反映されます。 この「ロード → 実行 → 編集」のループが Playground 作業の中心で、各変更の効果をすぐに確認できます。 ## HTML Editor で UI を編集する [Section titled “HTML Editor で UI を編集する”](#html-editor-で-ui-を編集する) 拡張の UI は、JavaScript ファイル内のバッククォート(\`)文字列として HTML を記述します。数行なら問題ありませんが、長くなると編集しづらくなります。 その場合、**Code** パネル上部の **HTML Editor** ボタンをクリックしてください。UI 用の専用エディタが開き、通常のコードエディタと同様に HTML / CSS / JavaScript を書けます(シンタックスハイライトあり)。編集後に **Submit** をクリックすると、変更がプラグインに反映されます。 ## プラグインをエクスポートする [Section titled “プラグインをエクスポートする”](#プラグインをエクスポートする) プラグインが期待通りに動作したら、**Plugins** パネルの **Export plugin** をクリックして `.zip` としてダウンロードします。 * ダウンロードした `.zip` は、任意の Re:Earth Visualizer プロジェクトにインストールできます。 * あるいは、「[ローカル開発環境をセットアップする](/ja/developer/plugin/get-started/set-up-a-local-development-environment/)」を参照して、ローカル環境で開発を続けることもできます。 # ローカル開発環境をセットアップする > Visualizer プラグイン開発用のローカル環境を準備します。 ノート このセクションでは、現在のテンプレートベースのワークフローを説明します。Re:Earth Visualizer のプラグイン CLI は現在利用できません。 プラグインプレイグラウンドは素早い試作に最適ですが、本格的なプラグインを作る場合はローカル開発環境が適しています。自分のエディタでコードを書き、`.zip` を手動でビルドして再インストールすることなく、Re:Earth Visualizer 上でほぼ即時に変更を確認できます。 このワークフローは次の 2 つで構成されます: * テンプレートから作成するプラグインプロジェクト * DEV\_PLUGIN 機能を使い、プレビューサーバーからプラグインを直接読み込むローカル版 Re:Earth Visualizer ## 前提条件 [Section titled “前提条件”](#前提条件) このガイドでは、Re:Earth Visualizer がローカルで起動しており `http://localhost:3000` でアクセスできることを前提とします。Visualizer 本体(サーバー/DB を含む)のセットアップは別の手順です。詳細は [reearth-visualizer repository](https://github.com/reearth/reearth-visualizer) を参照してください。 また、[Node.js](https://nodejs.org/) と [Yarn](https://yarnpkg.com/) がインストールされている必要があります。 ## テンプレートからプラグインを作成する [Section titled “テンプレートからプラグインを作成する”](#テンプレートからプラグインを作成する) 推奨する開始点は、React / ShadCN / Tailwind CSS を用いた [Re:Earth Visualizer Plugin ShadCN Template](https://github.com/reearth-plugins/reearth-visualizer-plugin-shadcn-template) です。 ノート このテンプレートは便利な出発点ですが必須ではありません。どのフレームワークやライブラリを使っても構いません。重要なのは DEV\_PLUGIN 機能で、ローカルのプレビューサーバーからプラグインを読み込める点です。 テンプレートからプロジェクトを作成し、ターミナルでそのディレクトリを開いたら: 1. プロジェクトディレクトリへ移動: ```bash cd your-new-plugin ``` 2. 依存関係をインストール: ```bash yarn install ``` 3. 必要ファイルを生成するため、初回ビルドを実行: ```bash yarn build ``` 4. 開発/プレビューサーバーを起動: ```bash yarn dev-build ``` この最後のコマンドは、保存のたびに自動でビルドし、`http://localhost:5005` のプレビューサーバーから配信します。 ## Re:Earth Visualizer で DEV\_PLUGIN を有効化する [Section titled “Re:Earth Visualizer で DEV\_PLUGIN を有効化する”](#reearth-visualizer-で-dev_plugin-を有効化する) 次に、ローカル Visualizer がそのプレビューサーバーからプラグインをロードするよう設定します。 1. ローカル Re:Earth Visualizer プロジェクトの `web` ディレクトリへ移動し、まだ存在しなければ `.env` ファイルを作成します: ```bash cd web touch .env ``` 2. `env` にプレビューサーバー URL を追加します: ```bash REEARTH_WEB_DEV_PLUGIN_URLS='["http://localhost:5005"]' ``` `.env` を保存すると Web サーバーは自動的に再起動します。 ## ウィジェットプラグインをプロジェクトに追加する [Section titled “ウィジェットプラグインをプロジェクトに追加する”](#ウィジェットプラグインをプロジェクトに追加する) 両方のサーバーが起動したら、Visualizer 上でプラグインをホストするプロジェクトを用意します。 1. `http://localhost:3000` でローカル Re:Earth Visualizer を開きます。 2. ダッシュボードから新しいプロジェクトを作成します。 3. プロジェクトをダブルクリックして開きます。 4. エディタのヘッダーで **Install Dev Plugins** をクリックし、プレビューサーバーからプラグインを取得してインストールします。 5. **Widgets** タブを開き、シーンにプラグインのウィジェットを追加します。 ノート この手順はウィジェット拡張向けです。InfoboxBlock や StoryBlock の拡張を持つプラグインもインストール手順(ステップ 1〜4)は同じですが、シーンへの追加は **Widgets** タブではなく、レイヤのインフォボックス設定やストーリーページから行います。各拡張タイプがどこに表示されるかは「[拡張タイプの違い](/ja/developer/plugin/overview/extension-types/)」を参照してください。 ## 開発ループ [Section titled “開発ループ”](#開発ループ) 接続できると、日々の作業はとても短くなります。 1. プラグインコードを変更して保存すると、自動的に再ビルドされます。 2. Visualizer のエディタヘッダーで **Reload Dev Plugin Extensions** をクリックすると、更新された拡張コードが読み込まれます。 ページ全体を再読み込みするのではなく、プラグインだけが再読み込みされるため、変更はほぼ即時に反映されます。 ## DEV\_PLUGIN の 2 つのボタン [Section titled “DEV\_PLUGIN の 2 つのボタン”](#dev_plugin-の-2-つのボタン) DEV\_PLUGIN ワークフローでは、Visualizer のエディタヘッダーに 2 つのボタン(どちらもパズルピースアイコン)が追加されます。 ![](/_astro/dev-plugin-buttons-osm2.CLHG-E7i_159rUs.webp) * **Install Dev Plugins** — プレビューサーバーからプラグインを取得し、`.zip` にパッケージ化してインストールします。 * **Reload Dev Plugin Extensions** — ページを再読み込みせずに、プレビューサーバーから拡張コードを再読み込みします。 どちらを押すべきかは、変更内容に応じて次の表で判断してください。 | 変更したもの | 使用するボタン | | ------------------------------ | ---------------------------- | | プロジェクトへの初回セットアップ | Install Dev Plugins | | 拡張コード(TypeScript / JavaScript) | Reload Dev Plugin Extensions | | `reearth.yml`(プラグインマニフェスト) | Install Dev Plugins | # ユーザーが設定できるプロパティを受け取る > インスペクターでユーザーが設定したプロパティを読み取ります。 このガイドを終えると、Re:Earth Visualizer のインスペクターパネルからユーザーが設定できる項目をプラグインに追加し、拡張コードからその値を読み取れるようになります。このガイドは、`reearth.yml` と拡張ファイルの基本的な構造を把握していることを前提としています。 ユーザーが設定できるプロパティを追加するには、`reearth.yml` でスキーマを宣言します。Re:Earth Visualizer がそのスキーマをインスペクターパネルに表示し、拡張コードからは `reearth.extension` を使って値を読み取れます。 ## サンプルコード [Section titled “サンプルコード”](#サンプルコード) この例では、ユーザーが背景色を選択できるカラーピッカーを追加します。拡張コードはその色を読み取り、UI に渡してパネルの背景に適用します。 **reearth.yml** ```yaml id: accept-props-plugin name: Accept Props Plugin version: 1.0.0 extensions: - id: accept-props type: widget name: Accept Props schema: groups: - id: appearance fields: - id: primary_color type: string ui: color title: Primary color defaultValue: "#3a86ff" ``` **accept-props.js** ```javascript const color = reearth.extension.widget?.property?.appearance?.primary_color ?? "#3a86ff"; reearth.ui.show(`
`); ``` ## 結果 [Section titled “結果”](#結果) パネルが地図上に表示されます。インスペクターパネルで別の色を選択すると、プラグインをリロードした際にその色がパネルに反映されます。 ![ユーザーが設定した色のパネルが Re Visualizer の地図上に表示されている](/_astro/accept-props-osm.DjEyI0a4_2pqepg.webp) 地図データ提供:[OpenStreetMap](https://www.openstreetmap.org/copyright) ## 仕組み [Section titled “仕組み”](#仕組み) **`reearth.yml` でスキーマを宣言する** スキーマはウィジェットの `schema` キーの下に記述します。`groups` は設定パネルのセクションを定義し、各 `fields` がひとつの設定項目に対応します。 ```yaml schema: groups: - id: appearance fields: - id: primary_color type: string ui: color title: Primary color defaultValue: "#3a86ff" ``` * **`id`**: コードでフィールドを参照するために使う識別子。 * **`type`**: フィールドの値の型。`string`、`number`、`bool` などが使えます。 * **`ui`**: インスペクターに表示するウィジェットの種類。`color` を指定するとカラーピッカーが表示されます。 * **`title`**: インスペクターに表示されるラベル。 * **`defaultValue`**: 初期値。 **コードで値を読み取る** `reearth.extension` を通じてプロパティにアクセスします。パスは `widget → property → <グループ ID> → <フィールド ID>` の順になります。 ```javascript const color = reearth.extension.widget?.property?.appearance?.primary_color ?? "#3a86ff"; ``` オプショナルチェーン(`?.`)を使うのは、ウィジェット・グループ・フィールドがどれかひとつでも未設定の場合に `undefined` を返すためです。`??` はフォールバック値として機能します。 ## 次のステップ [Section titled “次のステップ”](#次のステップ) * [reearth.extension API リファレンス](https://visualizer.developer.reearth.io/plugin-api/extension/): ウィジェット・インフォボックスブロック・ストーリーブロックのプロパティの完全な一覧 * [プラグインの構造](/ja/developer/plugin/overview/plugin-structure/): スキーマフィールドの完全なリストと各タイプの説明 # レイヤを追加する > データをレイヤとして Visualizer のシーンに追加します。 このガイドを終えると、プラグインから地図にレイヤを追加できるようになります(例:特定の座標にマーカーを配置する)。このガイドは、`reearth.yml` と拡張ファイルの基本的な構造を把握していることを前提としています。 レイヤを追加するには、レイヤのデータと表示方法を記述したレイヤオブジェクトを `reearth.layers.add` に渡します。このメソッドは新しいレイヤの ID を返します。この ID を保持しておくと、後でレイヤを変更・削除できます。 ## サンプルコード [Section titled “サンプルコード”](#サンプルコード) この例では、東京の座標に赤いマーカーをひとつ追加します。 **reearth.yml** ```yaml id: add-layer-plugin name: Add Layer Plugin version: 1.0.0 extensions: - id: add-layer type: widget name: Add Layer ``` **add-layer.js** ```javascript const layerId = reearth.layers.add({ type: "simple", data: { type: "geojson", value: { type: "FeatureCollection", features: [ { type: "Feature", properties: {}, geometry: { type: "Point", coordinates: [139.97422779688281, 35.74642872517698], }, }, ], }, }, marker: { style: "point", pointColor: "#ff0000", pointSize: 12, }, }); if (layerId) { console.log("レイヤを追加しました。ID:", layerId); } else { console.log("レイヤの追加に失敗しました。"); } reearth.camera.flyTo( { lat: 35.74642872517698, lng: 139.97422779688281, height: 200000, }, { duration: 2 } ); ``` ## 結果 [Section titled “結果”](#結果) ウィジェットがロードされると、カメラが東京に移動し、指定した座標に赤いマーカーが表示されます。 ![Re Visualizer の地図上の東京付近に追加された赤いマーカー](/_astro/add-layer-osm.BlqkXXba_SE0cf.webp) 地図データ提供:[OpenStreetMap](https://www.openstreetmap.org/copyright) ## 仕組み [Section titled “仕組み”](#仕組み) `reearth.layers.add` にレイヤオブジェクトをひとつ渡します。オブジェクトには 3 つの重要な部分があります。 * **`type`**: レイヤの種類。データを直接提供するレイヤには `"simple"` を使います。ほとんどの場合これで対応できます。 * **`data`**: レイヤのソースデータを記述します。 * **`type`**: データ形式。この例では `"geojson"` を使用。他にも `"czml"`、`"csv"`、`"3dtiles"`、`"kml"` などがサポートされています。 * **`value`**: データ本体をインラインで指定。外部ソースからデータを読み込む場合は `value` の代わりに `url` を指定できます。 * **外観キー**: Re:Earth Visualizer にデータのレンダリング方法を指示します。この例では `marker` に `style: "point"`、`pointColor`、`pointSize` を指定。他の外観キーには `polyline`、`polygon`、`model` などがあります。 `reearth.layers.add` は新しいレイヤの ID を文字列で返します。レイヤを追加できなかった場合は `undefined` を返します。後で `reearth.layers.override` でレイヤを変更したり、`reearth.layers.delete` で削除したりする場合は、この ID を保持しておいてください。 ノート `reearth.layers.delete` で削除できるのは、プラグイン API 経由で一時的に追加したレイヤのみです。保存済みプロジェクトの一部であるレイヤは削除できません。 ## 次のステップ [Section titled “次のステップ”](#次のステップ) * [reearth.layers API リファレンス](https://visualizer.developer.reearth.io/plugin-api/layers/): レイヤオブジェクトの全項目、すべてのデータ型、外観オプション * [reearth.camera API リファレンス](https://visualizer.developer.reearth.io/plugin-api/camera/): `flyTo` とその他のカメラ操作 * [レイヤにインフォボックスを設定する](/ja/developer/plugin/guides/configure-an-infobox-for-a-layer/): ユーザーがレイヤをクリックしたときにフィーチャの詳細を表示する # 背景地図を変更する > プラグインから組み込みまたはカスタムの背景地図を変更します。 このガイドを終えると、プラグインから背景地図(地球上に表示されるベース画像)を変更できるようになります。このガイドは、`reearth.yml` と拡張ファイルの基本的な構造を把握していることを前提としています。 背景地図を変更するには、`tiles` 配列を指定して `reearth.viewer.overrideProperty` を呼び出します。各エントリがひとつのタイルソースを表します。Re:Earth Visualizer にはいくつかの組み込み背景地図が用意されており、名前で選択できます。また、URL を指定してカスタムのタイルサーバーを使うこともできます。 ノート `overrideProperty` で行った変更は一時的なものです。プロジェクトには保存されず、ページをリロードすると元に戻ります。 ## サンプルコード [Section titled “サンプルコード”](#サンプルコード) この例では、背景地図を国土地理院標準地図に切り替えます。 **reearth.yml** ```yaml id: basemap-plugin name: Basemap Plugin version: 1.0.0 extensions: - id: basemap-demo type: widget name: Basemap Demo ``` **basemap-demo.js** ```javascript reearth.viewer.overrideProperty({ tiles: [ { id: "gsi", type: "japan_gsi_standard", }, ], }); ``` ## 結果 [Section titled “結果”](#結果) ウィジェットがロードされると、地球のベース画像が国土地理院標準地図に切り替わります。 ![Re Visualizer に表示された国土地理院標準地図の背景地図](/_astro/basemap-gsi-attributed.DW27Emiw_Z16Ehsj.webp) ## 仕組み [Section titled “仕組み”](#仕組み) `reearth.viewer.overrideProperty` は実行時にビューアのプロパティを設定します。背景地図を変更するには `tiles` 配列を渡します。指定した画像が現在の背景地図と置き換わります。各タイルエントリには `id`(任意の一意な識別子)と、組み込みの `type` またはカスタムの `url` が必要です。 ### 組み込み背景地図を使う [Section titled “組み込み背景地図を使う”](#組み込み背景地図を使う) Re:Earth Visualizer の組み込み背景地図を使うには、`type` に背景地図の名前を設定します。URL は不要で、各組み込み背景地図はタイルの読み込み先を既に知っています。 | タイプ | 背景地図 | Cesium Ion トークンが必要 | | -------------------- | ------------------ | ------------------ | | `open_street_map` | OpenStreetMap | いいえ | | `japan_gsi_standard` | 国土地理院標準地図 | いいえ | | `carto_light` | CARTO ライト | いいえ | | `default` | Cesium Ion デフォルト画像 | はい | | `default_road` | Cesium Ion ロードマップ | はい | | `default_label` | Cesium Ion ラベル付き画像 | はい | | `black_marble` | 夜の地球 | はい | 「はい」と表示されている背景地図は Cesium Ion から画像を読み込むため、シーンに Cesium Ion のアクセストークンが設定されている場合のみ使用できます。 ### カスタム背景地図を使う [Section titled “カスタム背景地図を使う”](#カスタム背景地図を使う) 上記のリストにないタイルサーバーを使う場合は、標準の `{z}/{x}/{y}` テンプレート形式で `url` を指定します。 ```javascript reearth.viewer.overrideProperty({ tiles: [ { id: "custom", url: "https://example.com/tiles/{z}/{x}/{y}.png", }, ], }); ``` 注意 各背景地図にはそれぞれ利用規約と帰属表示の要件があります。組み込み・カスタムを問わず、背景地図を使用する際はプロバイダーの帰属表示ルールに従い、公開前に利用規約を確認してください。 ## 次のステップ [Section titled “次のステップ”](#次のステップ) * [reearth.viewer API リファレンス](https://visualizer.developer.reearth.io/plugin-api/viewer/): `overrideProperty` とその他のビューアメソッド # プラグインと Re:Earth の間で通信する > プラグインと Re:Earth の間でメッセージを送受信します。 このガイドを終えると、プラグインの UI(iframe)とロジック(拡張コード)の間でメッセージを双方向に送受信できるようになります。このガイドは、`reearth.yml` と拡張ファイルの基本的な構造を把握していることを前提としています。 Re:Earth Visualizer のプラグインは、ロジックを担う拡張コードと UI を担う iframe の 2 つの部分で構成されています。これらは `postMessage` / `on("message")` のパターンを使って通信します。 ## サンプルコード [Section titled “サンプルコード”](#サンプルコード) この例では、ボタンがひとつある UI パネルを作ります。ボタンをクリックするとロジック側にメッセージが送られ、ロジック側はカメラを東京に向け、確認メッセージを UI に返します。 **reearth.yml** ```yaml id: communicate-plugin name: Communicate Plugin version: 1.0.0 extensions: - id: communicate-demo type: widget name: Communicate Demo ``` **communicate-demo.js** ```javascript reearth.ui.show(`

待機中…

`); reearth.extension.on("message", (message) => { if (message?.action === "flyToTokyo") { reearth.camera.flyTo( { lat: 35.6762, lng: 139.6503, height: 150000 }, { duration: 2 } ); reearth.ui.postMessage({ action: "done", message: "東京へ移動しました!", }); } }); ``` ## 結果 [Section titled “結果”](#結果) 地図上にパネルが表示されます。ボタンをクリックするとカメラが東京に向かい、ステータスメッセージが「東京へ移動しました!」に変わります。 ![Re Visualizer の地図上に通信パネルが表示されている](/_astro/communicate-osm.DwQz6isk_2nGFdU.webp) 地図データ提供:[OpenStreetMap](https://www.openstreetmap.org/copyright) ## 仕組み [Section titled “仕組み”](#仕組み) プラグインには 2 つのメッセージの流れがあります。 **UI → ロジック** UI(iframe)は `parent.postMessage` を使って拡張コードにメッセージを送ります。 ```javascript parent.postMessage({ action: "flyToTokyo" }, "*"); ``` 拡張コード側では `reearth.extension.on("message", handler)` で受け取ります。 ```javascript reearth.extension.on("message", (message) => { if (message?.action === "flyToTokyo") { // 処理 } }); ``` **ロジック → UI** 拡張コードは `reearth.ui.postMessage` を使って UI にメッセージを送ります。 ```javascript reearth.ui.postMessage({ action: "done", message: "東京へ移動しました!" }); ``` UI 側では `window.addEventListener("message", handler)` で受け取ります。 ```javascript window.addEventListener("message", function (e) { if (e.data?.action === "done") { document.getElementById("status").textContent = e.data.message; } }); ``` メッセージのペイロードには任意のシリアライズ可能な値を使えます。`action` フィールドはあくまでも規約です。何を送るかは自由に決められます。 ## 次のステップ [Section titled “次のステップ”](#次のステップ) * [reearth.ui API リファレンス](https://visualizer.developer.reearth.io/plugin-api/ui/): `show`、`postMessage` などの完全な一覧 * [reearth.extension API リファレンス](https://visualizer.developer.reearth.io/plugin-api/extension/): メッセージイベントとプロパティアクセス * [プラグインシステムの仕組み](/ja/developer/plugin/overview/how-the-plugin-system-works/): 2 つの部分がどのように分離されているかの詳細 # レイヤにインフォボックスを設定する > レイヤの情報を表示するインフォボックスを設定します。 このガイドを終えると、レイヤにインフォボックスを付与できるようになります。ユーザーがそのレイヤのフィーチャをクリックすると、フィーチャの情報を表示するパネルが開きます。このガイドは、レイヤの追加に慣れていることを前提としています([レイヤを追加する](/ja/developer/plugin/guides/add-a-layer/)を参照)。 インフォボックスはレイヤ自体の `infobox` プロパティとして設定します。インフォボックスにひとつ以上のブロックを追加すると、ユーザーがそのレイヤのフィーチャを選択したときに Re:Earth Visualizer がそれらを表示します。 ## サンプルコード [Section titled “サンプルコード”](#サンプルコード) この例では、いくつかのプロパティを持つマーカーをひとつ追加し、フィーチャが選択されたときにそのすべてのプロパティを自動で表示するインフォボックスを付与します。 **reearth.yml** ```yaml id: infobox-demo-plugin name: Infobox Demo Plugin version: 1.0.0 extensions: - id: infobox-demo type: widget name: Infobox Demo ``` **infobox-demo.js** ```javascript reearth.layers.add({ type: "simple", data: { type: "geojson", value: { type: "FeatureCollection", features: [ { type: "Feature", properties: { name: "東京タワー", height: "333 m", category: "ランドマーク", }, geometry: { type: "Point", coordinates: [139.7454, 35.6586], }, }, ], }, }, infobox: { blocks: [ { pluginId: "reearth", extensionId: "propertyInfoboxBetaBlock", }, ], }, marker: { style: "point", pointColor: "#ff0000", pointSize: 12, }, }); reearth.camera.setView({ lat: 35.6586, lng: 139.7454, height: 80000, heading: 0, pitch: -1.5708, roll: 0, }); ``` ## 結果 [Section titled “結果”](#結果) 東京タワーの位置にマーカーが表示されます。クリックするとインフォボックスが開き、フィーチャのプロパティ(名前、高さ、カテゴリ)が一覧表示されます。 ![Re Visualizer の地図上にフィーチャのプロパティを表示するインフォボックス](/_astro/infobox-osm.BbPnyOYc_Z1wsXTB.webp) 地図データ提供:[OpenStreetMap](https://www.openstreetmap.org/copyright) ## 仕組み [Section titled “仕組み”](#仕組み) インフォボックスはレイヤ自体に設定します。`reearth.layers.add` に渡す `infobox` プロパティを通じて定義します。 ```javascript infobox: { blocks: [ { pluginId: "reearth", extensionId: "propertyInfoboxBetaBlock" } ] } ``` * **`blocks`**: インフォボックスに表示するブロックのリスト(順番通り)。 * **`pluginId`** と **`extensionId`**: 表示するブロックを識別します。ここでは `reearth` / `propertyInfoboxBetaBlock` という組み込みブロックを使用しており、選択されたフィーチャのすべてのプロパティを自動で一覧表示します。ブロックのコードを書かなくても完全なプロパティ表示が得られます。 インフォボックスに表示されるプロパティは、GeoJSON の各フィーチャの `properties` オブジェクトから取得されます。ここでは `name`、`height`、`category` です。プロパティを追加するとインフォボックスにも表示されます。 インフォボックスはレイヤに属しているため、ユーザーがそのレイヤのフィーチャを選択したときだけ表示されます。フィーチャをクリックするまでは何も表示されません。 ## 次のステップ [Section titled “次のステップ”](#次のステップ) * [レイヤを追加する](/ja/developer/plugin/guides/add-a-layer/): このガイドの土台となるレイヤの基本 * [reearth.layers API リファレンス](https://visualizer.developer.reearth.io/plugin-api/layers/): インフォボックスとブロックのオプションを含む完全なレイヤオブジェクト * [拡張タイプの違い](/ja/developer/plugin/overview/extension-types/): InfoboxBlock 拡張タイプとここで作ったものの関係 # UI を表示する > Visualizer プラグインからユーザーインターフェースを表示します。 このガイドを終えると、Re:Earth Visualizer 内でプラグインのカスタム UI を描画できるようになります。ここでは、`reearth.yml` と拡張ファイルからなる基本的なプラグイン構成を理解していることを前提とします。 プラグインは `reearth.ui.show` に HTML を渡すことで UI を表示します。Re:Earth Visualizer はその HTML を iframe 内にレンダリングします。iframe は通常の Web ページのように振る舞うため、標準の HTML / CSS / JavaScript を使って任意の UI を構築できます。 ## サンプルコード [Section titled “サンプルコード”](#サンプルコード) この例では、見出しとスタイル付きボックスを持つシンプルなパネルを描画します。 **reearth.yml** ```yaml id: ui-demo-plugin name: UI Demo Plugin version: 1.0.0 extensions: - id: ui-demo type: widget name: UI Demo ``` **ui-demo.js** ```javascript reearth.ui.show(`

Hello from my plugin

This UI is rendered inside an iframe.

`); ``` ## 結果 [Section titled “結果”](#結果) このウィジェットをシーンに追加すると、メインビューにパネルが表示されます。 ![](/_astro/display-ui-osm.CTsMLc4d_Zke3on.webp) ## 仕組み [Section titled “仕組み”](#仕組み) **`reearth.ui.show` は HTML をレンダリングします** UI は HTML 文字列として `reearth.ui.show` に渡します。UI に必要なマークアップ、スタイル、スクリプトはすべてこの文字列内に含めます。 ```javascript reearth.ui.show(`
...
`); ``` HTML は iframe 内で実行されるため、Visualizer 本体のページから隔離されます。これにより、スタイルが競合しにくく、独立した UI を作れます。 **CSS でサイズを設定します** iframe はコンテンツに合わせてサイズが決まります。ルート要素に対して `width: 240px` のように CSS で寸法を指定してください。`html, body` に `margin: 0` を設定すると、ブラウザ既定の余白が消え、UI が端まで詰まって表示されます。 ## 次に読む [Section titled “次に読む”](#次に読む) * [reearth.ui API リファレンス](https://visualizer.developer.reearth.io/plugin-api/ui/) — `show` / `resize` / `close` など表示関連 API の一覧 * [ユーザーが設定できるプロパティを受け取る](/ja/developer/plugin/guides/accept-user-configurable-properties/) — インスペクターから UI を設定可能にする # 大規模データセットを最適化してレンダリングする > 大規模データセットのレンダリング性能を改善します。 このガイドを終えると、パフォーマンスオプションを有効にして大規模な GeoJSON データセットを効率的に読み込めるようになります。このガイドは、レイヤの追加に慣れていることを前提としています([レイヤを追加する](/ja/developer/plugin/guides/add-a-layer/)を参照)。 座標が何千もある非常に大きな GeoJSON ファイルは、通常の方法で読み込むとレンダリングが遅くなることがあります。Re:Earth Visualizer には `useAsResource` というパフォーマンスオプションがあり、大規模な GeoJSON データをより効率的に処理できます。フィーチャが約 6,000 を超える GeoJSON にはこのオプションを使用してください。 ## サンプルコード [Section titled “サンプルコード”](#サンプルコード) この例では、パフォーマンスオプションを有効にして東京エリアの境界を表す大規模な GeoJSON レイヤを追加します。 **reearth.yml** ```yaml id: large-dataset-plugin name: Large Dataset Plugin version: 1.0.0 extensions: - id: large-dataset type: widget name: Large Dataset ``` **large-dataset.js** ```javascript reearth.layers.add({ type: "simple", data: { type: "geojson", url: "https://reearth.github.io/visualizer-plugin-sample-data/public/geojson/tokyo-boundary.geojson", geojson: { useAsResource: true, }, }, polygon: {}, }); reearth.camera.flyTo( { lat: 35.68, lng: 139.40, height: 176000 }, { duration: 2 } ); ``` ## 結果 [Section titled “結果”](#結果) GeoJSON の境界データが読み込まれ、東京エリア全体にレンダリングされます。`useAsResource` が有効になっているため、Visualizer 側からのスタイリングは適用されず、デフォルトの色で表示されます。外観を変更するには、GeoJSON ファイル自体にスタイルを定義してください(下記参照)。 ![Re Visualizer の地図上にレンダリングされた大規模な GeoJSON 境界レイヤ](/_astro/large-dataset-osm.KD3-Mz3R_qe81h.webp) 地図データ提供:[OpenStreetMap](https://www.openstreetmap.org/copyright) ## 仕組み [Section titled “仕組み”](#仕組み) パフォーマンスオプションはレイヤの `data` ブロック内の `geojson` キーに設定します。 ```javascript data: { type: "geojson", url: "https://example.com/large-data.geojson", geojson: { useAsResource: true, }, } ``` `useAsResource: true` を設定すると、Re:Earth Visualizer は大規模データセット向けに最適化された方法で GeoJSON をレンダリングします。フィーチャが約 6,000 を超える GeoJSON に推奨されます。 注意 `useAsResource` が有効な場合、Visualizer 側からレイヤをスタイリングできません(例:`polygon`、`marker`、`polyline` の外観オプション)。代わりに、GeoJSON ファイルの各フィーチャに標準のスタイルプロパティを直接定義してください。例: ```json "properties": { "stroke": "#fb0404", "stroke-width": 2, "stroke-opacity": 1 } ``` ノート このサンプルで使用している境界データは、国土交通省(MLIT)のオープンデータです。外部データを使用する際は、利用規約を確認し、帰属表示の要件に従ってください。 ## 次のステップ [Section titled “次のステップ”](#次のステップ) * [レイヤを追加する](/ja/developer/plugin/guides/add-a-layer/): このガイドの土台となるレイヤの基本 * [reearth.layers API リファレンス](https://visualizer.developer.reearth.io/plugin-api/layers/): 完全なレイヤとデータオブジェクト # タイムラインを再生する > プラグインからタイムラインの再生を設定、制御します。 このガイドを終えると、プラグインから Re:Earth Visualizer のタイムラインを制御できるようになります。時間範囲の設定、再生・一時停止、速度の調整、時間の進行に応じた処理が可能になります。このガイドは、`reearth.yml` と拡張ファイルの基本的な構造を把握していることを前提としています。 タイムラインは、シーンの時系列データとアニメーションを駆動します。`reearth.timeline` を通じて、プラグインはタイムラインの範囲設定、再生・一時停止、速度変更、進行に応じたイベント受信ができます。 ## サンプルコード [Section titled “サンプルコード”](#サンプルコード) この例では、時計と **再生** ボタン・**一時停止** ボタンを持つ小さなパネルを表示します。**再生** をクリックすると 2023 年を通じてタイムラインが進み、時計が現在時刻をリアルタイムで更新します。 **reearth.yml** ```yaml id: timeline-plugin name: Timeline Plugin version: 1.0.0 extensions: - id: timeline-demo type: widget name: Timeline Demo ``` **timeline-demo.js** ```javascript reearth.ui.show(`

現在時刻: -

`); reearth.timeline?.setTime?.({ start: new Date("2023-01-01T00:00:00Z"), stop: new Date("2023-12-31T23:59:59Z"), current: new Date("2023-01-01T00:00:00Z"), }); reearth.timeline?.setSpeed?.(3600 * 2); reearth.extension.on("message", (message) => { if (message?.action === "play") { reearth.timeline?.play?.(); } if (message?.action === "pause") { reearth.timeline?.pause?.(); } }); reearth.timeline?.on?.("tick", (currentTime) => { reearth.ui.postMessage({ action: "tick", time: currentTime.toISOString() }); }); ``` ## 結果 [Section titled “結果”](#結果) 時計と **再生** ボタン・**一時停止** ボタンを持つパネルが表示されます。**再生** をクリックするまでは何も動きません。クリックすると 2023 年を通じて時計が進みます。**一時停止** をクリックすると、その時点で止まります。 ![Re Visualizer の地図上に表示されたタイムラインコントロールパネル](/_astro/timeline-osm.y4qA4Nez_29T2tx.webp) 地図データ提供:[OpenStreetMap](https://www.openstreetmap.org/copyright) ## 仕組み [Section titled “仕組み”](#仕組み) `reearth.timeline` 名前空間は、タイムラインの範囲設定、再生制御、時間進行への反応のためのメソッドを提供します。 **時間範囲を設定する** `setTime` はタイムラインの範囲と開始位置を定義します。3 つの `Date` 値を持つオブジェクトを渡します。 ```javascript reearth.timeline?.setTime?.({ start: new Date("2023-01-01T00:00:00Z"), stop: new Date("2023-12-31T23:59:59Z"), current: new Date("2023-01-01T00:00:00Z"), }); ``` * **`start`**: タイムラインの開始時刻。 * **`stop`**: タイムラインの終了時刻。 * **`current`**: 再生を開始する位置。 **再生を制御する** `play` は現在位置からタイムラインを開始し、`pause` はリセットせずに停止します。 ```javascript reearth.timeline?.play?.(); reearth.timeline?.pause?.(); ``` **速度を設定する** `setSpeed` はリアルタイムに対するタイムラインの進行速度を制御します。値はリアル 1 秒あたりのタイムライン秒数です。`1` はリアルタイム、`3600 * 2` は 1 秒あたり 2 時間です。 ```javascript reearth.timeline?.setSpeed?.(3600 * 2); ``` **時間の変化に反応する** `tick` イベントは再生中に現在時刻が進むたびに発火します。ハンドラは現在時刻を `Date` として受け取ります。ハンドラは軽量に保ち、ティックごとに重い処理やログ出力を行わないようにしてください。 ```javascript reearth.timeline?.on?.("tick", (currentTime) => { reearth.ui.postMessage({ action: "tick", time: currentTime.toISOString() }); }); ``` ノート タイムラインのメソッドはオプショナルチェーン(`?.`)を使って呼び出します。タイムラインはすべてのコンテキストで利用できるとは限らないためです。 ## 次のステップ [Section titled “次のステップ”](#次のステップ) * [reearth.timeline API リファレンス](https://visualizer.developer.reearth.io/plugin-api/timeline/): `stepType`、`rangeType` を含むタイムラインメソッド・プロパティ・イベントの全一覧 * [プラグインと Re:Earth の間で通信する](/ja/developer/plugin/guides/communicate-between-a-plugin-and-reearth/): UI ボタンが拡張ロジックにメッセージを送る仕組み # 拡張タイプの違い > ウィジェット、InfoboxBlock、StoryBlock の拡張タイプを比較します。 プラグインは拡張を通じて機能を提供します。Re:Earth Visualizer がサポートする拡張タイプは、ウィジェット、InfoboxBlock、StoryBlock の 3 種類です。それぞれインターフェース内の異なる場所に表示され、適した用途も異なります。 拡張タイプによって表示場所とユーザーの操作方法が決まるため、適切なタイプを選ぶことはプラグインを設計する際の最初の判断になります。 | 拡張タイプ | 表示場所 | 適した用途 | | ------------ | -------------------- | -------------------------- | | ウィジェット | メインの地図ビュー上にフローティング表示 | 常に表示する操作パネルや情報 | | InfoboxBlock | 地物のインフォボックス内 | ユーザーが特定の地物を選択したときに表示する詳細情報 | | StoryBlock | ストーリーページ内 | ガイド付きのストーリーに埋め込むリッチコンテンツ | ## ウィジェット [Section titled “ウィジェット”](#ウィジェット) ウィジェットは、Visualizer のメインビュー上にフローティング表示される拡張です。Widget Align System を使って、画面の端や隅に配置できます。 シーンを開いている間は常に表示されるため、検索ボックス、凡例、ライブデータパネル、シーン内の操作を実行するボタンなど、継続的にアクセスする必要がある操作や情報に適しています。 ユーザーのシーン内での操作にかかわらず、地図上に常に表示したい操作や情報にはウィジェットを使用します。 ## InfoboxBlock [Section titled “InfoboxBlock”](#infoboxblock) InfoboxBlock は、ユーザーがレイヤ上の地物を選択したときに開くパネルであるインフォボックス内に表示される拡張です。その地物に関する情報の一部として表示されます。 InfoboxBlock は地物の選択に連動するため、整形されたデータカード、地物の属性から作成したグラフ、外部ソースから取得した詳細など、特定の地物に関連するコンテンツの表示に適しています。 ユーザーが地図上の特定の地物を選択したときだけ、その地物に関する情報を表示したい場合は InfoboxBlock を使用します。 ## StoryBlock [Section titled “StoryBlock”](#storyblock) StoryBlock は、ストーリーページに埋め込まれる拡張です。ストーリーのコンテンツの一部となり、ユーザーが物語を進めるとインラインで表示されます。 StoryBlock は、インタラクティブなグラフ、タイムライン、データに基づく図など、通常のテキストや画像を超えるカスタムコンテンツをストーリーに加える用途に適しています。 メインの地図ビューや地物のインフォボックスではなく、ストーリーページ内にカスタムコンテンツを追加したい場合は StoryBlock を使用します。 # プラグインシステムの仕組み > Visualizer プラグインを構成する WebAssembly と iframe の環境を説明します。 Visualizer のプラグインは、単一のコードとして動作するわけではありません。各プラグインは、別々の環境で動作して相互に通信する 2 つの部分に分かれています。この構成により、コードが実行される場所ごとに、できることとできないことが決まります。 ## プラグインの実行方法 [Section titled “プラグインの実行方法”](#プラグインの実行方法) プラグインが読み込まれると、Visualizer はコードを次の 2 つの環境で実行します。 * Visualizer のデータとプラグインAPIに直接アクセスできる **WebAssembly** 環境 * すべての UI 描画を担当し、標準のブラウザ API を利用できる **iframe** 環境 どちらか一方だけですべてを実行することはできません。WebAssembly 側は Visualizer のデータを読み取って操作できますが、HTML の描画や多くのブラウザ API の利用はできません。iframe 側は HTML の描画やブラウザ API の利用ができますが、Visualizer のデータへ直接アクセスできません。2 つの環境が互いを補完します。 両者は、異なる実行コンテキスト間で安全に通信するための標準的なブラウザ機能である `postMessage` を使って通信します。UI が Visualizer のデータを必要とするときは、WebAssembly 側にデータを要求します。WebAssembly 側はデータを取得し、iframe 側へ送信します。 ## WebAssembly 側 [Section titled “WebAssembly 側”](#webassembly-側) WebAssembly 側はプラグインのエントリーポイントです。プラグインが読み込まれたときに最初に実行され、Visualizer と同じスレッドで同期的に動作します。 **できること:** * Visualizer のシーンデータへアクセスする。 * プラグインAPIを呼び出す。 * レイヤのプロパティの更新など、Visualizer のシーンを部分的に変更する。 * シーンのイベントを購読する。 * `postMessage` を使って iframe 側とデータを送受信する。 **できないこと:** * HTML や UI を直接描画する。UI の描画は iframe 側で行う必要があります。 * 多くのブラウザ API を利用する。利用できるのは `console.log` など一部に限られます。 * 外部サーバーへ HTTP リクエストを送信する。 ノート WebAssembly 側の JavaScript は [QuickJS](https://bellard.org/quickjs/) で実行されます。ユーザーが使用するブラウザにかかわらず、ECMAScript 2020 をサポートします。 ## iframe 側 [Section titled “iframe 側”](#iframe-側) iframe 側は、プラグインの視覚的な要素をすべて処理します。通常のウェブページと同じように動作し、ブラウザ API を利用できます。 **できること:** * 通常のウェブページと同じように HTML を描画する。 * DOM API、Canvas、`fetch` などのブラウザ API を利用する。 * サーバーのレスポンスヘッダーに `Access-Control-Allow-Origin: *` が含まれている場合、外部サーバーへ HTTP リクエストを送信する。 * `postMessage` を使って WebAssembly 側とデータを送受信する。 **できないこと:** * Visualizer のデータへ直接アクセスしたり変更したりする。`postMessage` を通じて WebAssembly 側へ要求する必要があります。 * Visualizer のバックエンドと直接通信する。 * レスポンスヘッダーに `Access-Control-Allow-Origin: *` が含まれていないサーバーへ HTTP リクエストを送信する。iframe は null オリジンでサンドボックス化されています。 * 同じサンドボックス上の理由により、ローカルストレージを利用する。 * 親ページから明示的な権限を必要とするブラウザ API を利用する。たとえば、Clipboard API はサンドボックス化された iframe ではデフォルトで利用できません。 ## 要点 [Section titled “要点”](#要点) | 機能 | WebAssembly 側 | iframe 側 | | ------------------- | ------------- | -------- | | サンドボックス化 | ✅ | ✅ | | エントリーポイント(最初に実行) | ✅ | ❌ | | プラグインAPIへのアクセス | ✅ | ❌ | | HTML の描画 | ❌ | ✅ | | ブラウザ API の利用 | ❌ | ✅ | | `postMessage` による通信 | ✅ | ✅ | ## 制約事項 [Section titled “制約事項”](#制約事項) **`postMessage` のシリアライズ:** `postMessage` で送信できるのは、JSON としてシリアライズ可能なデータだけです。`ArrayBuffer` や `Blob` などのオブジェクトは直接送信できません。バイナリーデータは、送信前に base64 文字列へエンコードしてください。 **プラグインのサイズ:** プラグインは 10 MB 以下の `.zip` ファイルとしてパッケージ化する必要があります。 **静的アセット:** 画像、HTML、CSS などの JavaScript 以外のファイルは、プラグイン内に含めることができません。JavaScript に文字列として埋め込むか、一般公開されたサーバーに配置して URL で参照してください。 **ローカルストレージ:** ローカルストレージは両方の環境で利用できません。データを永続化するには、プラグインAPIが提供するストレージ API または外部サーバーを使用してください。 # プラグイン構成 > マニフェストと拡張のファイルから Visualizer プラグインを構成する仕組みを説明します。 Re:Earth Visualizer のプラグインは、1 つの `reearth.yml` 設定ファイルと、拡張ごとに 1 つ用意する JavaScript ファイルで構成される `.zip` ファイルです。`reearth.yml` はプラグインの情報と拡張を定義し、各 JavaScript ファイルには対応する拡張のロジックを記述します。Visualizer は、これらのファイルを使ってプラグインを読み込み、実行します。 ## `reearth.yml` [Section titled “reearth.yml”](#reearthyml) すべてのプラグインは、`.zip` のルートに `reearth.yml` という名前のファイルを含める必要があります。この YAML ファイルには、名前、バージョン、説明、拡張など、プラグインのメタデータを記述します。 reearth.yml ```yaml id: demo-plugin name: Demo Plugin version: 1.0.0 extensions: - id: demo-widget type: widget name: Demo Widget ``` 注意 `id` フィールドで使用できる文字は、英字(`a-zA-Z`)、数字(`0-9`)、ハイフン(`-`)、アンダースコア(`_`)のみで、最大 100 文字です。`reearth` は予約されているため、ID として使用できません。 サポートされているフィールドの一覧については、[プラグインマニフェストのスキーマ](https://github.com/reearth/reearth-visualizer/blob/main/server/schemas/plugin_manifest.json)を参照してください。 ## 拡張の JavaScript [Section titled “拡張の JavaScript”](#拡張の-javascript) `reearth.yml` で宣言した各拡張には、対応する JavaScript ファイルが必要です。ファイル名は拡張の `id` と完全に一致させてください。たとえば、`id: demo-widget` の拡張には `demo-widget.js` というファイルが必要です。 注意 拡張の `id` と JavaScript のファイル名は、完全に一致させてください。どちらにも空白や特殊文字を使用しないでください。 JavaScript ファイルには、その拡張のロジックを記述します。コードは WebAssembly 側で実行され、グローバルに公開されたプラグインAPIを利用できます。 demo-widget.js ```javascript reearth.ui.show(`

Hello, World!

`); ``` ノート 拡張の JavaScript は [QuickJS](https://bellard.org/quickjs/) で実行されます。ECMAScript 2020 と互換性のあるコードを使用してください。 ## パッケージ化とインストール [Section titled “パッケージ化とインストール”](#パッケージ化とインストール) `reearth.yml` とすべての拡張の JavaScript ファイルを用意したら、1 つの `.zip` ファイルにまとめます。この `.zip` は、任意の Re:Earth Visualizer プロジェクトにインストールできます。 ```text my-plugin.zip ├── reearth.yml └── demo-widget.js ``` 複数の拡張がある場合は、それぞれに対応する JavaScript ファイルを含めます。 ```text my-plugin.zip ├── reearth.yml ├── demo-widget.js └── demo-infobox-block.js ``` ノート プラグインのサイズは 10 MB 以下である必要があります。画像や CSS など、JavaScript 以外のファイルを `.zip` に含めることはできません。詳しくは[制約事項](/ja/developer/plugin/overview/how-the-plugin-system-works/#%E5%88%B6%E7%B4%84%E4%BA%8B%E9%A0%85)を参照してください。 `.zip` を繰り返し作成してインストールする手間を省き、効率よく開発する方法については、[ローカル開発環境をセットアップする](/ja/developer/plugin/get-started/set-up-a-local-development-environment/)を参照してください。 # プラグインとは? > プラグインとは何か、Re:Earth Visualizer で何ができるかを説明します。 プラグインとは、既存のアプリケーションのコアコードを変更せずに、新しい機能を追加するソフトウェアコンポーネントです。機能がプラットフォーム本体に実装されるのを待つ代わりに、自分でプラグインを開発したり、他の人が開発したプラグインをインストールしたりできます。ホストアプリケーションは、実行時にそのプラグインを読み込みます。 プラグインは、日常的に使うさまざまなソフトウェアに存在します。広告をブロックしたりパスワードを保存したりするブラウザ拡張、VS Code に言語サポートを追加するエディター拡張、背景地図に独自データを重ねる地図オーバーレイなどです。いずれも、明確に定義されたインターフェースを通じてホストアプリケーションに接続し、その機能を拡張する自己完結型のコードパッケージです。 ## Re:Earth Visualizer におけるプラグイン [Section titled “Re:Earth Visualizer におけるプラグイン”](#reearth-visualizer-におけるプラグイン) Re:Earth Visualizer のプラグインは、カスタム UI の追加、シーンの操作、データの利用などによって、プラットフォームの機能を拡張します。コードと設定ファイルをまとめたパッケージとしてプロジェクトに追加します。 インストールされたプラグインは、1 つ以上の\*\*拡張(Extension)\*\*を通じて機能を提供します。拡張は、Visualizer のインターフェース内でプラグインの動作を構成する個別の単位です。拡張タイプにはウィジェット、InfoboxBlock、StoryBlock の 3 種類があり、それぞれ目的と表示場所が異なります。 システムレベルでは、Visualizer プラグインはコアアプリケーションを変更せずに機能を追加する拡張の集まりであり、WebAssembly と iframe の 2 つの環境で動作します。詳しくは[拡張タイプの違い](/ja/developer/plugin/overview/extension-types/)を参照してください。 ## プラグインでできること [Section titled “プラグインでできること”](#プラグインでできること) プラグインを使うと、Re:Earth Visualizer のソースコードに手を加えずに、組み込み機能を超えた機能を追加できます。たとえば、次のことができます。 * 外部 API やサービスから取得したデータを、地図上やインフォボックスに表示する。 * フィルター、スライダー、検索入力など、シーンを操作するためのカスタムコントロールを作成する。 * 選択したレイヤのデータを使い、地物の選択に応じた情報を表示する。 * 静的なコンテンツだけでなく、データに応じて変化する要素をストーリーページに追加する。 * ユーザー入力やリアルタイムイベントに応じて、Visualizer 内の操作を自動化する。 ## 代表的なユースケース [Section titled “代表的なユースケース”](#代表的なユースケース) ### ナビゲーション操作 [Section titled “ナビゲーション操作”](#ナビゲーション操作) ナビゲーションウィジェットは、画面上のボタンでカメラを任意の方向へ滑らかに移動し、初期表示へ戻したり、ズームイン・ズームアウトしたりできます。キーボードショートカットや地球を直接操作する方法に代わる、直感的なナビゲーションを提供します。 ![Re Visualizer の地図上に表示されたナビゲーション操作](/_astro/navigation-pan-osm.BqADCcHg_kSpRU.webp) 地図データ: [OpenStreetMap](https://www.openstreetmap.org/copyright) ### 画像オーバーレイ [Section titled “画像オーバーレイ”](#画像オーバーレイ) このウィジェットは、設定可能な画像とキャプションを地図上に直接表示します。画像 URL とキャプションのテキストは **インスペクター** パネルで設定できるため、プラグインのコードを変更せずに更新できます。 ![Re Visualizer の地図上に表示された画像オーバーレイ](/_astro/image-overlay-osm.AgdQaJaf_Z1y2D9F.webp) 地図データ: [OpenStreetMap](https://www.openstreetmap.org/copyright) ### ライブ天気表示 [Section titled “ライブ天気表示”](#ライブ天気表示) 天気ウィジェットは、指定した場所の最新の気象情報を取得し、気温、天気、湿度、風、最終更新時刻を地図上に表示します。 ![Re Visualizer の地図上に表示されたライブ天気ウィジェット](/_astro/weather-widget-osm.DDD8eNBC_ZmsX5G.webp) 地図データ: [OpenStreetMap](https://www.openstreetmap.org/copyright) ### カメラのブックマーク [Section titled “カメラのブックマーク”](#カメラのブックマーク) カメラブックマークウィジェットは、名前を付けて場所を保存し、クリック 1 回で保存した位置へカメラを移動できます。大規模なシーン内の注目地点を簡単に行き来できます。 ![Re Visualizer の地図上に表示されたカメラブックマークウィジェット](/_astro/cam-bookmarks-osm.ix2Ixkcp_35DrU.webp) 地図データ: [OpenStreetMap](https://www.openstreetmap.org/copyright) # プラグインAPIとは? > プラグインが Re:Earth Visualizer と通信するための API を説明します。 プラグインAPIは、プラグインが Re:Earth Visualizer と通信するための仕組みです。Visualizer のソースコードへアクセスしなくても、データの読み取り、ユーザー操作への応答、地図上の表示制御、独自 UI の管理などを行えます。 API 全体は、`reearth` という 1 つのグローバルオブジェクトを通じて利用できます。プラグインに必要なすべての機能は、このオブジェクトからアクセスします。たとえば、カメラの操作には `reearth.camera`、レイヤの操作には `reearth.layers` を使用します。 API は、プラグインが行うことを基準に構成されています。プラグインはユーザーにインターフェースを提供し、地図、レイヤ、データから成るシーンを操作します。API の各要素には次の役割があります。 * **プラグイン自身(`reearth.extension`)**: 設定されたプロパティ、UI とのメッセージ通信、ライフサイクルイベントなど、プラグイン自身のコンテキストを扱います。 * **プラグインのインターフェース(`reearth.ui`、`reearth.modal`、`reearth.popup`)**: メイン UI パネル、ダイアログ、小さなアンカーウィンドウなど、ユーザーが見て操作する要素を扱います。 * **シーン(`reearth.viewer`、`reearth.camera`、`reearth.timeline`)**: ビューアの環境と設定、視点、時間に基づく再生など、ユーザーが見ている空間を扱います。 * **コンテンツ(`reearth.layers`、`reearth.data`)**: 地図レイヤやクライアント側のデータストレージなど、地図に表示するデータとプラグインが保持するデータを扱います。 * **描画・位置ツール(`reearth.sketch`、`reearth.spatialId`)**: 地図上への図形の描画や、空間 ID による位置参照を扱います。 * **システム情報(`reearth.version`、`reearth.apiVersion`、`reearth.engine`)**: Visualizer のバージョンやレンダリングエンジンなど、プラグインが動作する環境の基本情報を提供します。 これらの要素は、どのプラグインでも連携して動作します。イベントも同じ構成に含まれます。`reearth.viewer` はマウスイベント、`reearth.timeline` は `tick`、`reearth.extension` はメッセージを発行します。イベントを監視するときは、そのイベントに対応するオブジェクトへリスナーを登録します。 たとえば、保存した場所へ移動するプラグインでは、`reearth.extension` から設定を読み取り、`reearth.ui` でクリック可能な一覧を表示し、場所が選択されたときに `reearth.camera` で視点を移動します。 利用できるすべてのプロパティとメソッドについては、[API リファレンス](/ja/developer/plugin/api-reference/)を参照してください。 # FAQ > Visualizer プラグイン開発でよくある質問への回答を紹介します。 この FAQ では、個別のガイドを必要としない短い横断的な質問を扱います。目的別の手順は「ガイド」、プロパティやメソッドの詳細は「API リファレンス」を参照してください。 ## はじめに [Section titled “はじめに”](#はじめに) **Q: プラグイン開発を始めるのに、何かインストールが必要ですか?** 不要です。プラグインは 2 つの方法で作れます。1 つはブラウザだけで完結するプラグインプレイグラウンド、もう 1 つはローカル開発環境(自分のエディタ)を使う方法です。Playground は最も早く試せる方法で、ローカル環境はより大きく複雑なプラグインに向いています。 **Q: プラグインにはどんなファイルが必要ですか?** 最低限必要なのは、プラグインと拡張を記述する `reearth.yml` と、拡張ごとに 1 つの JavaScript ファイルです。これらをまとめて `.zip` としてパッケージ化します。 **Q: ウィジェット / InfoboxBlock / StoryBlock の違いは?** ウィジェットは Widget Align System を使ってメインマップビューに配置します。InfoboxBlock は、レイヤ上のフィーチャを選択したときに開くインフォボックス内に表示されます。StoryBlock はストーリーページに埋め込まれます。詳細は[拡張タイプの違い](/ja/developer/plugin/overview/extension-types/)を参照してください。 ## 開発 [Section titled “開発”](#開発) **Q:「Install Dev Plugins」と「Reload Dev Plugin Extensions」はいつ使い分けますか?** 初回セットアップと `reearth.yml` を変更したときは **Install Dev Plugins** を使用します。拡張コードを変更した後は **Reload Dev Plugin Extensions** を使用します。`reearth.yml` の変更は、プラグイン構造の再登録が必要なため、完全インストールが必要です。 **Q: プラグインの UI が表示されないのはなぜですか?** プラグイン UI は `reearth.ui.show` に HTML を渡すことで表示します。何も表示されない場合は、呼び出しが行われているか、また拡張 JavaScript のファイル名が `reearth.yml` 内の `id` と完全一致しているかを確認してください。UI は表示されているが真っ白に見える場合は、スタイルの問題の可能性があります。文字色が背景色と同じだと見えないため、UI 側で文字色と背景色を明示的に指定してください。 **Q: TypeScript は使えますか?** はい。Visualizer が実行するのは JavaScript ですが、TypeScript で書いて JavaScript にコンパイルできます。推奨テンプレートは TypeScript に対応しています。 ## 機能と制限 [Section titled “機能と制限”](#機能と制限) **Q: 外部 API からデータを取得できないのはなぜですか?** 外部サーバーへのリクエストは、拡張ロジック(WebAssembly 側)ではなく、プラグイン UI(iframe 側)から行う必要があります。また、外部サーバーはレスポンスヘッダーに `Access-Control-Allow-Origin` を含めて CORS を許可していなければなりません。そうでない場合、リクエストは失敗します。 **Q: 特定の背景地図やタイルサーバーが読み込めないのはなぜですか?** 一部の背景地図は Cesium Ion のアクセストークンを必要とします。それ以外でも、タイルサーバーが利用できない、または CORS によりブロックされる場合があります。背景地図が表示されない場合、原因はコードではなくタイルソース側にあることが多いです。 **Q: プラグインのサイズ制限はありますか?** あります。プラグインは 10 MB 以下の `.zip` としてパッケージ化する必要があります。画像や CSS などの非 JavaScript ファイルは `.zip` に同梱できません。JavaScript の文字列として埋め込むか、公開サーバーにホストして URL で参照してください。 **Q: プラグインで永続化できるデータを保存できますか?** ローカルストレージは利用できません(プラグイン UI がサンドボックス化された iframe 内で動作するため)。永続化には、プラグイン API が提供するストレージ API、または外部サーバーを利用してください。 ## 公開と共有 [Section titled “公開と共有”](#公開と共有) **Q: Playground で作ったプラグインはどう共有できますか?** **Share** ボタンで共有リンクをコピーするか、**Export** ボタンで `.zip` をダウンロードしてください。非常に大きいプラグインはリンク共有できず、エクスポートのみです。 # ツール > Visualizer プラグイン開発用ツールのドキュメントは準備中です。 注意 このセクションは現在メンテナンス中です。 # Re:Earth Flow ドキュメント > Re:Earth Flow のドキュメントは現在準備中です。 このドキュメントは現在準備中です。公開をお待ちください。 # チュートリアル > Re:Earth のプロダクトを実際に触りながら進めるチュートリアルの一覧です。 チュートリアルは現在準備中です。公開をお待ちください。 # Re:Earth Visualizer ドキュメント > Re:Earth Visualizer のドキュメントは現在準備中です。 このドキュメントは現在準備中です。公開をお待ちください。