v1STABILNA

Dokumentacja API

API partnera SunTrace3D pozwala generować modele HD miast 3D, obliczać uzysk energii solarnej i osadzać interaktywne przeglądarki 3D na Twojej stronie. Wszystkie punkty końcowe używają JSON i standardowych metod HTTP.

Wyświetl jako Markdown (czytelny maszynowo)
1

Przegląd

API SunTrace3D to usługa RESTful zapewniająca programowy dostęp do generowania modeli miast 3D i obliczeń energii solarnej. API jest przeznaczone dla partnerów, którzy chcą zintegrować analizę solarną ze swoimi aplikacjami, stronami internetowymi lub procesami roboczymi.

Bazowy URL

https://suntrace3d.com/api/v1
REST API
Żądania/odpowiedzi JSON
Uwierzytelnianie Bearer
Uwierzytelnianie kluczem API
Jakość HD
Wszystkie modele API są w HD

Dostępne punkty końcowe

POST/api/v1/modelsGeneruj nowy model HD 3D
GET/api/v1/models/:idSprawdź status generowania modelu
POST/api/solar/calculateOblicz uzysk energii solarnej
GET/embedOsadzalna przeglądarka 3D (iframe)
GET/api/healthSprawdzenie kondycji (bez uwierzytelniania)
Partner portal showing API keys and usage statistics
Portal partnera — zarządzaj kluczami API, przeglądaj statystyki użycia i pobieraj kod osadzania
2

Uwierzytelnianie

Wszystkie żądania API wymagają uwierzytelniania za pomocą tokena Bearer w nagłówku Authorization. Kluczami API zarządzasz w Portalu partnera.

Uzyskanie klucza API

  1. 1
    Utwórz konto
    Zarejestruj się na /auth/signup, jeśli jeszcze tego nie zrobiłeś.
  2. 2
    Uaktualnij do Pro
    Subskrypcja Pro jest wymagana do dostępu do API. Uaktualnij w ustawieniach konta.
  3. 3
    Wygeneruj klucz API
    Odwiedź Portal partnera i kliknij „Utwórz klucz”. Skopiuj klucz natychmiast — nie zostanie ponownie wyświetlony.
  4. 4
    Użyj w żądaniach
    Dołącz klucz do wszystkich żądań API jako token Bearer.
Nagłówek uwierzytelnianiabash
curl -H "Authorization: Bearer st_live_abc123def456..." \
  https://suntrace3d.com/api/v1/models

Chroń swój klucz API

Nigdy nie ujawniaj klucza API w kodzie JavaScript po stronie klienta, publicznych repozytoriach ani kodzie front-end. Jeśli Twój klucz zostanie skompromitowany, natychmiast go unieważnij w Portalu partnera i utwórz nowy.

3

Generowanie modelu 3D

Wyślij żądanie wygenerowania modelu HD miasta 3D dla określonej lokalizacji geograficznej. Model jest generowany asynchronicznie — odpytuj punkt końcowy statusu, aby sprawdzić, kiedy jest gotowy.

POST/api/v1/models

Treść żądania

latitudenumberrequiredSzerokość geograficzna punktu centralnego (-90 do 90)
longitudenumberrequiredDługość geograficzna punktu centralnego (-180 do 180)
radiusKmnumberPromień obszaru do modelowania w km (domyślnie: 0.3)

Odpowiedź

idstringrequiredUnikalny identyfikator modelu do odpytywania statusu
statusstringrequired"pending" | "processing" | "ready" | "failed"
modelUrlstringURL do pliku modelu GLB (gdy gotowy)
progressnumberPostęp generowania 0-100 (podczas przetwarzania)
stepstringOpis bieżącego kroku generowania
Żądaniebash
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
  }'
Odpowiedź (oczekujące)json
{
  "id": "hd_44.8699_13.8420_0.3",
  "status": "pending"
}
Odpowiedź (gotowe)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"
}

Pamięć podręczna modeli

Jeśli model dla tej samej lokalizacji i promienia został już wygenerowany, API natychmiast zwraca wynik z pamięci podręcznej ze statusem: „ready”. Modele są przechowywane w pamięci podręcznej S3 przez 30 dni. Nie ponosisz opłat za wyniki z pamięci podręcznej.

API request generating a 3D model
API generuje modele HD 3D asynchronicznie — odpytuj punkt końcowy statusu, aż będzie gotowy
4

Sprawdzanie statusu modelu

Odpytuj ten punkt końcowy, aby sprawdzić status żądania generowania modelu. Model przechodzi przez kilka etapów: pending → processing → ready.

GET/api/v1/models/:id
Żądaniebash
curl https://suntrace3d.com/api/v1/models/hd_44.8699_13.8420_0.3 \
  -H "Authorization: Bearer YOUR_API_KEY"
Odpowiedź (przetwarzanie)json
{
  "id": "hd_44.8699_13.8420_0.3",
  "status": "processing",
  "progress": 65,
  "step": "Generating textures..."
}
Odpowiedź (gotowe)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
}

Wartości statusu

pendingZadanie jest w kolejce i czeka na pobranie przez worker
processingModel jest generowany. Sprawdź pole progress, aby zobaczyć procent.
readyModel jest gotowy. Pole modelUrl zawiera URL do pobrania.
failedGenerowanie nie powiodło się. Możesz spróbować ponownie, tworząc nowe żądanie.

Zalecenia dotyczące odpytywania

Zalecamy odpytywanie co 5-10 sekund. Typowy czas generowania to 30-120 sekund w zależności od rozmiaru obszaru i obciążenia serwera. Pole progress podaje procent (0-100) do wyświetlenia wskaźnika postępu w interfejsie.

5

Obliczanie energii solarnej

Oblicz roczny uzysk energii solarnej dla określonej konfiguracji panelu i lokalizacji. Ten punkt końcowy wykorzystuje dane satelitarne PVGIS (Photovoltaic Geographical Information System) dla dokładnych wartości nasłonecznienia.

POST/api/solar/calculate

Treść żądania

latitudenumberrequiredSzerokość geograficzna lokalizacji
longitudenumberrequiredDługość geograficzna lokalizacji
tiltDegnumberrequiredKąt nachylenia panelu w stopniach (0-90)
azimuthDegnumberrequiredAzymut panelu w stopniach (0=Północ, 180=Południe)
panelAreaM2numberrequiredCałkowita powierzchnia paneli w metrach kwadratowych
panelEfficiencynumberrequiredWydajność panelu (0.0 - 1.0, zwykle 0.18-0.22)
shadingLossFractionnumberWspółczynnik strat zacieniania (0.0-1.0, domyślnie: 0)

Odpowiedź

annualYieldKwhnumberrequiredSzacowany roczny uzysk energii w kWh
peakPowerKwnumberrequiredMoc szczytowa w kW
specificYieldnumberrequiredUzysk właściwy w kWh/kWp
monthlyKwhnumber[]requiredTablica 12 miesięcznych wartości kWh
sourcestringrequiredIdentyfikator źródła danych ("pvgis")
Żądaniebash
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
  }'
Odpowiedźjson
{
  "annualYieldKwh": 4982,
  "peakPowerKw": 4.0,
  "specificYield": 1246,
  "monthlyKwh": [248, 305, 412, 465, 522, 548, 562, 530, 445, 368, 280, 232],
  "source": "pvgis"
}

Nie wymaga uwierzytelniania

Punkt końcowy obliczeń solarnych jest publicznie dostępny i nie wymaga klucza API. Korzysta z publicznego API PVGIS utrzymywanego przez Wspólne Centrum Badawcze Komisji Europejskiej.

Solar energy calculation API response
API obliczeń solarnych zwraca roczny uzysk, moc szczytową i rozkład miesięczny
6

Osadzanie przeglądarki

Osadź interaktywną przeglądarkę 3D analizy solarnej na swojej stronie za pomocą iframe. Osadzona przeglądarka zawiera kontrolki czasu do symulacji cieni i działa zarówno na komputerach, jak i urządzeniach mobilnych.

Parametry URL osadzania

latnumberrequiredSzerokość geograficzna lokalizacji do wyświetlenia
lngnumberrequiredDługość geograficzna lokalizacji do wyświetlenia
keystringrequiredTwój klucz API do uwierzytelniania
Podstawowy kod osadzaniahtml
<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>
Responsywne osadzanie (zalecane)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>

Funkcje osadzanej przeglądarki

Interaktywna orbita, przesuwanie i zoom 3D
Suwak czasu do symulacji cieni
Responsywna — działa na urządzeniach mobilnych
Fotorealistyczne modele Google 3D Tiles
Nie wymaga dodatkowego JavaScript
Obsługa pełnego ekranu
Embedded 3D viewer in an iframe
Osadzalna przeglądarka zawiera kontrolki czasu i działa zarówno na komputerach, jak i urządzeniach mobilnych
7

Limity zapytań

API wymusza limity zapytań w celu zapewnienia uczciwego użytkowania i stabilności systemu.

Generowanie modelu
POST /api/v1/models
10 zapytań
na godzinę, na klucz API
Odpytywanie statusu
GET /api/v1/models/:id
Bez limitu
Odpytuj w razie potrzeby
Obliczenia solarne
POST /api/solar/calculate
Bez limitu
Publiczny punkt końcowy
Wyświetlenia osadzonych widoków
GET /embed
Bez limitu
Nieograniczona liczba wyświetleń
Odpowiedź przy przekroczeniu limitu (429)json
{
  "error": "Rate limit exceeded. Maximum 10 generations per hour."
}
8

Obsługa błędów

API używa standardowych kodów statusu HTTP. Wszystkie odpowiedzi błędów zawierają treść JSON z polem error opisującym problem.

Kody statusu HTTP

200Sukces — żądanie zakończone pomyślnie
400Złe żądanie — brakujące lub nieprawidłowe parametry
401Brak autoryzacji — brakujący lub nieprawidłowy klucz API
404Nie znaleziono — identyfikator modelu nie istnieje
429Zbyt wiele zapytań — przekroczono limit zapytań
503Usługa niedostępna — usługa zewnętrzna (PVGIS) jest niedostępna
Przykład odpowiedzi błędujson
{
  "error": "latitude and longitude are required"
}
Błąd uwierzytelnianiajson
{
  "error": "Invalid or revoked API key"
}
9

Webhooki

Obsługa webhooków do powiadomień o zakończeniu generowania modelu jest planowana w przyszłych wersjach. Obecnie używaj odpytywania punktu końcowego statusu, aby sprawdzić, kiedy modele są gotowe.

Wkrótce

Callbacki webhooków będą wysyłać żądanie POST na określony przez Ciebie URL po zakończeniu generowania modelu, eliminując potrzebę odpytywania. Ta funkcja jest w naszym planie rozwoju.

10

Pełne przykłady

Kompletne, gotowe do skopiowania przykłady dla typowych scenariuszy integracji.

Generuj model i czekaj na ukończenie

Bash — pełny przepływ pracybash
#!/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

Integracja JavaScript/Node.js

Node.js — generuj i odpytujjavascript
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));

Integracja Python

Python — generuj i oblicz energię solarną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
Kompletne przykłady kodu w Bash, JavaScript i Python do integracji z API

Nowy w SunTrace3D?

Zapoznaj się z Przewodnikiem użytkownika, aby poznać pełny opis przeglądarki 3D, symulacji cieni i funkcji analizy paneli słonecznych.

Przewodnik użytkownika