v1مستقر

وثائق API

يتيح لك API شركاء SunTrace3D توليد نماذج مدن HD ثلاثية الأبعاد، وحساب إنتاج الطاقة الشمسية، وتضمين عارضات ثلاثية الأبعاد تفاعلية في موقعك الإلكتروني. تستخدم جميع نقاط النهاية JSON وطرق HTTP القياسية.

عرض بصيغة Markdown (قابل للقراءة آليًا)
1

نظرة عامة

API SunTrace3D هي خدمة RESTful للوصول البرمجي إلى توليد نماذج المدن ثلاثية الأبعاد وحسابات الطاقة الشمسية. صُمم API للشركاء الذين يرغبون في دمج التحليل الشمسي في تطبيقاتهم أو مواقعهم الإلكترونية أو سير عملهم.

عنوان URL الأساسي

https://suntrace3d.com/api/v1
REST API
طلب/استجابة JSON
مصادقة Bearer
مصادقة بمفتاح API
جودة HD
جميع نماذج API بجودة HD

نقاط النهاية المتاحة

POST/api/v1/modelsتوليد نموذج HD ثلاثي الأبعاد جديد
GET/api/v1/models/:idالتحقق من حالة توليد النموذج
POST/api/solar/calculateحساب إنتاج الطاقة الشمسية
GET/embedعارض ثلاثي الأبعاد قابل للتضمين (iframe)
GET/api/healthفحص الحالة (دون مصادقة)
Partner portal showing API keys and usage statistics
بوابة الشركاء — إدارة مفاتيح API وعرض إحصائيات الاستخدام والحصول على كود التضمين
2

المصادقة

تتطلب جميع طلبات API المصادقة عبر Bearer token في رأس Authorization. تتم إدارة مفاتيح API من خلال بوابة الشركاء.

الحصول على مفتاح API

  1. 1
    إنشاء حساب
    سجّل في /auth/signup إذا لم يكن لديك حساب بعد.
  2. 2
    الترقية إلى Pro
    اشتراك Pro مطلوب للوصول إلى API. قم بالترقية من إعدادات حسابك.
  3. 3
    إنشاء مفتاح API
    زُر بوابة الشركاء وانقر على "إنشاء مفتاح". انسخ مفتاحك فورًا — لن يظهر مرة أخرى.
  4. 4
    الاستخدام في الطلبات
    أدرج المفتاح في جميع طلبات API كـ Bearer token.
رأس المصادقةbash
curl -H "Authorization: Bearer st_live_abc123def456..." \
  https://suntrace3d.com/api/v1/models

حافظ على سرية مفتاح API

لا تكشف أبدًا مفتاح API في JavaScript من جانب العميل أو المستودعات العامة أو الكود الأمامي. إذا تم اختراق مفتاحك، قم بإلغائه فورًا من بوابة الشركاء وأنشئ مفتاحًا جديدًا.

3

توليد نموذج ثلاثي الأبعاد

اطلب توليد نموذج مدينة HD ثلاثي الأبعاد لموقع جغرافي محدد. يتم توليد النموذج بشكل غير متزامن — استعلم عن نقطة نهاية الحالة للتحقق من الجاهزية.

POST/api/v1/models

نص الطلب

latitudenumberrequiredخط عرض نقطة المركز (-90 إلى 90)
longitudenumberrequiredخط طول نقطة المركز (-180 إلى 180)
radiusKmnumberنصف قطر المنطقة المراد نمذجتها بالكيلومتر (افتراضي: 0.3)

الاستجابة

idstringrequiredمعرّف النموذج الفريد لاستعلام الحالة
statusstringrequired"pending" | "processing" | "ready" | "failed"
modelUrlstringعنوان URL لملف النموذج GLB (عند الجاهزية)
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 ثلاثية الأبعاد بشكل غير متزامن — استعلم عن نقطة نهاية الحالة حتى الجاهزية
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 نسبة مئوية (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[]requiredمصفوفة من 12 قيمة شهرية بوحدة 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. تستخدم API PVGIS العام الذي يديره مركز الأبحاث المشترك التابع للمفوضية الأوروبية.

Solar energy calculation API response
يعيد API الحساب الشمسي الإنتاج السنوي وذروة الطاقة والتفصيل الشهري
6

تضمين العارض

ضمّن عارضًا شمسيًا تفاعليًا ثلاثي الأبعاد في موقعك الإلكتروني باستخدام iframe. يتضمن عارض التضمين عناصر تحكم زمنية لمحاكاة الظلال ويعمل على أجهزة الكمبيوتر والأجهزة المحمولة.

معاملات عنوان 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>

ميزات التضمين

تدوير وتحريك وتكبير تفاعلي ثلاثي الأبعاد
شريط تمرير زمني لمحاكاة الظلال
متجاوب — يعمل على الأجهزة المحمولة
نماذج واقعية من Google 3D Tiles
لا حاجة لـ JavaScript إضافي
دعم ملء الشاشة
Embedded 3D viewer in an iframe
يتضمن العارض القابل للتضمين عناصر تحكم زمنية ويعمل على أجهزة الكمبيوتر والأجهزة المحمولة
7

حدود المعدل

يفرض API حدود معدل لضمان الاستخدام العادل واستقرار النظام.

توليد النماذج
POST /api/v1/models
10 طلبات
في الساعة، لكل مفتاح 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 القياسية. تتضمن جميع استجابات الأخطاء نصًا بصيغة JSON مع حقل error يصف المشكلة.

رموز حالة HTTP

200نجاح — تم تنفيذ الطلب بنجاح
400طلب غير صالح — معاملات مفقودة أو غير صالحة
401غير مصرّح — مفتاح API مفقود أو غير صالح
404غير موجود — معرّف النموذج غير موجود
429طلبات كثيرة — تم تجاوز حدود المعدل
503الخدمة غير متاحة — الخدمة الخارجية (PVGIS) معطّلة
مثال على استجابة خطأjson
{
  "error": "latitude and longitude are required"
}
خطأ في المصادقةjson
{
  "error": "Invalid or revoked API key"
}
9

Webhooks

دعم Webhooks لإشعارات اكتمال النموذج مخطط لإصدار مستقبلي. حاليًا، استخدم الاستعلام على نقطة نهاية الحالة للتحقق من جاهزية النماذج.

قريبًا

ستقوم Webhooks بإرسال طلب POST إلى عنوان URL الذي تحدده عند اكتمال توليد النموذج، مما يلغي الحاجة للاستعلام. هذه الميزة في خارطة الطريق.

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
أمثلة كود كاملة في Bash وJavaScript وPython لتكامل API

جديد على SunTrace3D؟

اطلع على دليل المستخدم للحصول على شرح كامل للعارض ثلاثي الأبعاد ومحاكاة الظلال وميزات تحليل الألواح الشمسية.

دليل المستخدم