v1STABLE

APIドキュメント

SunTrace3DパートナーAPIを使用して、HD 3D都市モデルの生成、太陽光エネルギー収量の計算、ウェブサイトへのインタラクティブ3Dビューアーの埋め込みが可能です。すべてのエンドポイントはJSONと標準HTTPメソッドを使用します。

Markdownで表示(機械可読形式)
1

概要

SunTrace3D APIは、3D都市モデル生成と太陽光エネルギー計算へのプログラムアクセスを提供するRESTfulサービスです。APIは、太陽光分析を自社のアプリケーション、ウェブサイト、ワークフローに統合したいパートナー向けに設計されています。

ベースURL

https://suntrace3d.com/api/v1
REST API
JSONリクエスト/レスポンス
Bearer認証
APIキー認証
HD品質
すべてのAPIモデルはHD

利用可能なエンドポイント

POST/api/v1/models新しいHD 3Dモデルを生成
GET/api/v1/models/:idモデル生成ステータスを確認
POST/api/solar/calculate太陽光エネルギー収量を計算
GET/embed埋め込み可能な3Dビューアー(iframe)
GET/api/healthヘルスチェック(認証不要)
Partner portal showing API keys and usage statistics
パートナーポータル — APIキーの管理、使用統計の表示、埋め込みコードの取得
2

認証

すべてのAPIリクエストは、AuthorizationヘッダーのBearerトークンによる認証が必要です。APIキーはパートナーポータルで管理されます。

APIキーの取得

  1. 1
    アカウントの作成
    まだアカウントをお持ちでない場合は、/auth/signupで登録してください。
  2. 2
    Proへアップグレード
    APIアクセスにはProサブスクリプションが必要です。アカウント設定からアップグレードしてください。
  3. 3
    APIキーを生成
    パートナーポータルにアクセスし、「キーを作成」をクリックします。キーをすぐにコピーしてください — 再度表示されません。
  4. 4
    リクエストで使用
    すべてのAPIリクエストにBearerトークンとしてキーを含めてください。
認証ヘッダーbash
curl -H "Authorization: Bearer st_live_abc123def456..." \
  https://suntrace3d.com/api/v1/models

APIキーを秘密に保管してください

クライアントサイドJavaScript、公開リポジトリ、フロントエンドコードにAPIキーを公開しないでください。キーが漏洩した場合は、パートナーポータルから直ちに取り消して新しいキーを作成してください。

3

3Dモデルの生成

特定の地理的位置のHD 3D都市モデルの生成をリクエストします。モデルは非同期で生成されます — ステータスエンドポイントをポーリングして準備完了を確認してください。

POST/api/v1/models

リクエストボディ

latitudenumberrequired中心点の緯度(-90 から 90)
longitudenumberrequired中心点の経度(-180 から 180)
radiusKmnumberモデル化する範囲の半径(km)(デフォルト: 0.3)

レスポンス

idstringrequiredステータスポーリング用の一意のモデル識別子
statusstringrequired"pending" | "processing" | "ready" | "failed"
modelUrlstringGLBモデルファイルへのURL(準備完了時)
progressnumber生成進捗 0-100(処理中の場合)
stepstring現在の生成ステップの説明
リクエストbash
curl -X POST https://suntrace3d.com/api/v1/models \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "latitude": 44.8699,
    "longitude": 13.8420,
    "radiusKm": 0.3
  }'
レスポンス(保留中)json
{
  "id": "hd_44.8699_13.8420_0.3",
  "status": "pending"
}
レスポンス(準備完了)json
{
  "id": "hd_44.8699_13.8420_0.3",
  "status": "ready",
  "modelUrl": "https://s3.eu-central-1.amazonaws.com/suntrace-models/hd_44.8699_13.8420_0.3/scene.glb"
}

モデルキャッシュ

同じ場所と半径のモデルが既に生成されている場合、APIはキャッシュされた結果をstatus: "ready"として即座に返します。モデルはS3に30日間キャッシュされます。キャッシュされた結果には課金されません。

API request generating a 3D model
APIはHD 3Dモデルを非同期で生成 — 準備完了までステータスエンドポイントをポーリング
4

モデルステータスの確認

このエンドポイントをポーリングしてモデル生成リクエストのステータスを確認します。モデルは pending → processing → ready の段階を経ます。

GET/api/v1/models/:id
リクエストbash
curl https://suntrace3d.com/api/v1/models/hd_44.8699_13.8420_0.3 \
  -H "Authorization: Bearer YOUR_API_KEY"
レスポンス(処理中)json
{
  "id": "hd_44.8699_13.8420_0.3",
  "status": "processing",
  "progress": 65,
  "step": "Generating textures..."
}
レスポンス(準備完了)json
{
  "id": "hd_44.8699_13.8420_0.3",
  "status": "ready",
  "modelUrl": "https://s3.eu-central-1.amazonaws.com/suntrace-models/hd_44.8699_13.8420_0.3/scene.glb",
  "progress": 100,
  "step": null
}

ステータス値

pendingジョブはキューに入り、ワーカーに取得されるのを待っています
processingモデル生成中。progressフィールドでパーセンテージを確認してください。
readyモデル準備完了。modelUrlフィールドにダウンロードURLが含まれています。
failed生成に失敗しました。新しいリクエストを作成して再試行できます。

ポーリングの推奨

5-10秒ごとのポーリングを推奨します。一般的な生成時間は範囲の大きさとサーバー負荷に応じて30-120秒です。progressフィールドはUIに進捗インジケーターを表示するためのパーセンテージ(0-100)を提供します。

5

太陽光エネルギーの計算

特定のパネル構成と場所の年間太陽光エネルギー収量を計算します。このエンドポイントは正確な日射量値のためにPVGIS(太陽光発電地理情報システム)の衛星データを使用します。

POST/api/solar/calculate

リクエストボディ

latitudenumberrequired場所の緯度
longitudenumberrequired場所の経度
tiltDegnumberrequiredパネル傾斜角(度)(0-90)
azimuthDegnumberrequiredパネル方位角(度)(0=北、180=南)
panelAreaM2numberrequiredパネル総面積(平方メートル)
panelEfficiencynumberrequiredパネル効率(0.0 - 1.0、通常 0.18-0.22)
shadingLossFractionnumber遮蔽損失係数(0.0-1.0、デフォルト: 0)

レスポンス

annualYieldKwhnumberrequired推定年間エネルギー収量(kWh)
peakPowerKwnumberrequiredピーク出力(kW)
specificYieldnumberrequired比エネルギー収量(kWh/kWp)
monthlyKwhnumber[]required12か月分の月間kWh値の配列
sourcestringrequiredデータソース識別子("pvgis")
リクエストbash
curl -X POST https://suntrace3d.com/api/solar/calculate \
  -H "Content-Type: application/json" \
  -d '{
    "latitude": 44.8699,
    "longitude": 13.8420,
    "tiltDeg": 35,
    "azimuthDeg": 180,
    "panelAreaM2": 20,
    "panelEfficiency": 0.20,
    "shadingLossFraction": 0.05
  }'
レスポンスjson
{
  "annualYieldKwh": 4982,
  "peakPowerKw": 4.0,
  "specificYield": 1246,
  "monthlyKwh": [248, 305, 412, 465, 522, 548, 562, 530, 445, 368, 280, 232],
  "source": "pvgis"
}

認証不要

ソーラー計算エンドポイントは公開されており、APIキーは不要です。欧州委員会の共同研究センターが管理するPVGIS公開APIを使用しています。

Solar energy calculation API response
ソーラー計算APIが年間収量、ピーク出力、月間内訳を返します
6

ビューアーの埋め込み

iframeを使用してウェブサイトにインタラクティブな3Dソーラービューアーを埋め込みます。埋め込みビューアーには影シミュレーションの時間コントロールが含まれ、デスクトップとモバイルの両方で動作します。

埋め込みURLパラメーター

latnumberrequired表示する場所の緯度
lngnumberrequired表示する場所の経度
keystringrequired認証用のAPIキー
基本的な埋め込みコードhtml
<iframe
  src="https://suntrace3d.com/embed?lat=44.8699&lng=13.8420&key=YOUR_API_KEY"
  width="100%"
  height="500"
  frameborder="0"
  allow="fullscreen"
  style="border-radius: 12px; border: 1px solid #e5e7eb;">
</iframe>
レスポンシブ埋め込み(推奨)html
<div style="position: relative; width: 100%; padding-bottom: 56.25%; overflow: hidden; border-radius: 12px;">
  <iframe
    src="https://suntrace3d.com/embed?lat=44.8699&lng=13.8420&key=YOUR_API_KEY"
    style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border: none;"
    allow="fullscreen">
  </iframe>
</div>

埋め込み機能

インタラクティブな3Dオービット、パン、ズーム
影シミュレーション用タイムスライダー
レスポンシブ — モバイル対応
Google 3D Tilesフォトリアリスティックモデル
追加のJavaScript不要
フルスクリーン対応
Embedded 3D viewer in an iframe
埋め込みビューアーにはタイムコントロールが含まれ、デスクトップとモバイルの両方で動作
7

レート制限

APIは公平な使用とシステムの安定性を確保するためにレート制限を適用します。

モデル生成
POST /api/v1/models
10リクエスト
1時間あたり、APIキーごと
ステータスポーリング
GET /api/v1/models/:id
制限なし
必要に応じてポーリング
ソーラー計算
POST /api/solar/calculate
制限なし
パブリックエンドポイント
埋め込み表示
GET /embed
制限なし
無制限の表示
レート制限超過レスポンス (429)json
{
  "error": "Rate limit exceeded. Maximum 10 generations per hour."
}
8

エラーハンドリング

APIは標準HTTPステータスコードを使用します。すべてのエラーレスポンスには問題を説明するerrorフィールドを持つJSONボディが含まれます。

HTTPステータスコード

200成功 — リクエストが正常に完了しました
400Bad Request — パラメーターが不足または無効です
401Unauthorized — APIキーが不足または無効です
404Not Found — モデルIDが存在しません
429Too Many Requests — レート制限を超過しました
503Service Unavailable — 外部サービス(PVGIS)がダウンしています
エラーレスポンスの例json
{
  "error": "latitude and longitude are required"
}
認証エラーjson
{
  "error": "Invalid or revoked API key"
}
9

Webhook

モデル完了通知のためのWebhookサポートは、将来のリリースで予定されています。現在はステータスエンドポイントのポーリングを使用してモデルの準備完了を確認してください。

近日公開

Webhookコールバックは、モデル生成が完了した際に指定されたURLにPOSTリクエストを送信し、ポーリングの必要をなくします。この機能はロードマップに含まれています。

10

完全な例

一般的な統合シナリオのための完全なコピー&ペースト可能な例。

モデルを生成して完了を待つ

Bash — 完全なワークフローbash
#!/bin/bash
API_KEY="YOUR_API_KEY"
BASE_URL="https://suntrace3d.com"

# 1. Request model generation
echo "Requesting model generation..."
RESPONSE=$(curl -s -X POST "$BASE_URL/api/v1/models" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"latitude": 44.8699, "longitude": 13.8420, "radiusKm": 0.3}')

MODEL_ID=$(echo $RESPONSE | jq -r '.id')
STATUS=$(echo $RESPONSE | jq -r '.status')
echo "Model ID: $MODEL_ID (status: $STATUS)"

# 2. Poll until ready
while [ "$STATUS" != "ready" ] && [ "$STATUS" != "failed" ]; do
  sleep 5
  RESPONSE=$(curl -s "$BASE_URL/api/v1/models/$MODEL_ID" \
    -H "Authorization: Bearer $API_KEY")
  STATUS=$(echo $RESPONSE | jq -r '.status')
  PROGRESS=$(echo $RESPONSE | jq -r '.progress // 0')
  echo "Status: $STATUS ($PROGRESS%)"
done

# 3. Get the model URL
if [ "$STATUS" = "ready" ]; then
  MODEL_URL=$(echo $RESPONSE | jq -r '.modelUrl')
  echo "Model ready: $MODEL_URL"
else
  echo "Generation failed"
fi

JavaScript/Node.js統合

Node.js — 生成とポーリングjavascript
const API_KEY = 'YOUR_API_KEY';
const BASE_URL = 'https://suntrace3d.com';

async function generateModel(lat, lng) {
  // 1. Request generation
  const res = await fetch(`${BASE_URL}/api/v1/models`, {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${API_KEY}`,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({ latitude: lat, longitude: lng }),
  });

  const { id, status, modelUrl } = await res.json();

  // If already cached, return immediately
  if (status === 'ready') return { id, modelUrl };

  // 2. Poll until ready
  return pollStatus(id);
}

async function pollStatus(modelId) {
  while (true) {
    await new Promise(r => setTimeout(r, 5000)); // Wait 5s

    const res = await fetch(`${BASE_URL}/api/v1/models/${modelId}`, {
      headers: { 'Authorization': `Bearer ${API_KEY}` },
    });

    const data = await res.json();
    console.log(`Status: ${data.status} (${data.progress || 0}%)`);

    if (data.status === 'ready') return data;
    if (data.status === 'failed') throw new Error('Generation failed');
  }
}

// Usage
generateModel(44.8699, 13.8420)
  .then(data => console.log('Model URL:', data.modelUrl))
  .catch(err => console.error(err));

Python統合

Python — 生成とソーラー計算python
import requests
import time

API_KEY = "YOUR_API_KEY"
BASE_URL = "https://suntrace3d.com"

def generate_model(lat: float, lng: float) -> dict:
    """Generate an HD 3D model and wait for completion."""
    # Request generation
    res = requests.post(
        f"{BASE_URL}/api/v1/models",
        headers={"Authorization": f"Bearer {API_KEY}"},
        json={"latitude": lat, "longitude": lng, "radiusKm": 0.3},
    )
    data = res.json()

    if data["status"] == "ready":
        return data

    # Poll until ready
    model_id = data["id"]
    while True:
        time.sleep(5)
        res = requests.get(
            f"{BASE_URL}/api/v1/models/{model_id}",
            headers={"Authorization": f"Bearer {API_KEY}"},
        )
        data = res.json()
        print(f"Status: {data['status']} ({data.get('progress', 0)}%)")

        if data["status"] == "ready":
            return data
        if data["status"] == "failed":
            raise Exception("Generation failed")

def calculate_solar(lat: float, lng: float, tilt: float = 35, azimuth: float = 180) -> dict:
    """Calculate solar energy yield for a panel configuration."""
    res = requests.post(
        f"{BASE_URL}/api/solar/calculate",
        json={
            "latitude": lat,
            "longitude": lng,
            "tiltDeg": tilt,
            "azimuthDeg": azimuth,
            "panelAreaM2": 20,
            "panelEfficiency": 0.20,
        },
    )
    return res.json()

# Usage
model = generate_model(44.8699, 13.8420)
print(f"Model URL: {model['modelUrl']}")

solar = calculate_solar(44.8699, 13.8420)
print(f"Annual yield: {solar['annualYieldKwh']} kWh")
print(f"Monthly: {solar['monthlyKwh']}")
API integration code examples in multiple languages
API統合のためのBash、JavaScript、Pythonの完全なコード例

SunTrace3Dは初めてですか?

3Dビューアー、影シミュレーション、ソーラーパネル分析機能の完全なウォークスルーについては、ユーザーガイドをご覧ください。

ユーザーガイド