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)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.
https://suntrace3d.com/api/v1/api/v1/modelsGeneruj nowy model HD 3D/api/v1/models/:idSprawdź status generowania modelu/api/solar/calculateOblicz uzysk energii solarnej/embedOsadzalna przeglądarka 3D (iframe)/api/healthSprawdzenie kondycji (bez uwierzytelniania)
Wszystkie żądania API wymagają uwierzytelniania za pomocą tokena Bearer w nagłówku Authorization. Kluczami API zarządzasz w Portalu partnera.
curl -H "Authorization: Bearer st_live_abc123def456..." \
https://suntrace3d.com/api/v1/modelsNigdy 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.
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.
/api/v1/modelslatitudenumberrequiredSzerokość geograficzna punktu centralnego (-90 do 90)longitudenumberrequiredDługość geograficzna punktu centralnego (-180 do 180)radiusKmnumberPromień obszaru do modelowania w km (domyślnie: 0.3)idstringrequiredUnikalny identyfikator modelu do odpytywania statusustatusstringrequired"pending" | "processing" | "ready" | "failed"modelUrlstringURL do pliku modelu GLB (gdy gotowy)progressnumberPostęp generowania 0-100 (podczas przetwarzania)stepstringOpis bieżącego kroku generowaniacurl -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
}'{
"id": "hd_44.8699_13.8420_0.3",
"status": "pending"
}{
"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"
}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.

Odpytuj ten punkt końcowy, aby sprawdzić status żądania generowania modelu. Model przechodzi przez kilka etapów: pending → processing → ready.
/api/v1/models/:idcurl https://suntrace3d.com/api/v1/models/hd_44.8699_13.8420_0.3 \
-H "Authorization: Bearer YOUR_API_KEY"{
"id": "hd_44.8699_13.8420_0.3",
"status": "processing",
"progress": 65,
"step": "Generating textures..."
}{
"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
}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.
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.
/api/solar/calculatelatitudenumberrequiredSzerokość geograficzna lokalizacjilongitudenumberrequiredDługość geograficzna lokalizacjitiltDegnumberrequiredKąt nachylenia panelu w stopniach (0-90)azimuthDegnumberrequiredAzymut panelu w stopniach (0=Północ, 180=Południe)panelAreaM2numberrequiredCałkowita powierzchnia paneli w metrach kwadratowychpanelEfficiencynumberrequiredWydajność panelu (0.0 - 1.0, zwykle 0.18-0.22)shadingLossFractionnumberWspółczynnik strat zacieniania (0.0-1.0, domyślnie: 0)annualYieldKwhnumberrequiredSzacowany roczny uzysk energii w kWhpeakPowerKwnumberrequiredMoc szczytowa w kWspecificYieldnumberrequiredUzysk właściwy w kWh/kWpmonthlyKwhnumber[]requiredTablica 12 miesięcznych wartości kWhsourcestringrequiredIdentyfikator źródła danych ("pvgis")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
}'{
"annualYieldKwh": 4982,
"peakPowerKw": 4.0,
"specificYield": 1246,
"monthlyKwh": [248, 305, 412, 465, 522, 548, 562, 530, 445, 368, 280, 232],
"source": "pvgis"
}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.

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.
latnumberrequiredSzerokość geograficzna lokalizacji do wyświetlenialngnumberrequiredDługość geograficzna lokalizacji do wyświetleniakeystringrequiredTwój klucz API do uwierzytelniania<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><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>
API wymusza limity zapytań w celu zapewnienia uczciwego użytkowania i stabilności systemu.
{
"error": "Rate limit exceeded. Maximum 10 generations per hour."
}API używa standardowych kodów statusu HTTP. Wszystkie odpowiedzi błędów zawierają treść JSON z polem error opisującym problem.
{
"error": "latitude and longitude are required"
}{
"error": "Invalid or revoked API key"
}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.
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.
Kompletne, gotowe do skopiowania przykłady dla typowych scenariuszy integracji.
#!/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"
ficonst 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));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']}")
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