Партнёрский API SunTrace3D позволяет генерировать HD 3D-модели городов, рассчитывать выработку солнечной энергии и встраивать интерактивные 3D-просмотрщики на ваш сайт. Все конечные точки используют JSON и стандартные методы HTTP.
Просмотреть как Markdown (машиночитаемый формат)API SunTrace3D — это RESTful-сервис для программного доступа к генерации 3D-моделей городов и расчётам солнечной энергии. API предназначен для партнёров, которые хотят интегрировать солнечный анализ в свои приложения, сайты или рабочие процессы.
https://suntrace3d.com/api/v1/api/v1/modelsГенерация новой HD 3D-модели/api/v1/models/:idПроверка статуса генерации модели/api/solar/calculateРасчёт выработки солнечной энергии/embedВстраиваемый 3D-просмотрщик (iframe)/api/healthПроверка работоспособности (аутентификация не требуется)
Все API-запросы требуют аутентификации через Bearer-токен в заголовке Authorization. API-ключи управляются через портал партнёров.
curl -H "Authorization: Bearer st_live_abc123def456..." \
https://suntrace3d.com/api/v1/modelsНикогда не раскрывайте ваш API-ключ в клиентском JavaScript, публичных репозиториях или фронтенд-коде. Если ваш ключ скомпрометирован, немедленно отзовите его через портал партнёров и создайте новый.
Запросите генерацию HD 3D-модели города для определённого географического местоположения. Модель генерируется асинхронно — опрашивайте конечную точку статуса, чтобы проверить готовность.
/api/v1/modelslatitudenumberrequiredШирота центральной точки (от -90 до 90)longitudenumberrequiredДолгота центральной точки (от -180 до 180)radiusKmnumberРадиус моделируемой области в км (по умолчанию: 0,3)idstringrequiredУникальный идентификатор модели для опроса статусаstatusstringrequired"pending" | "processing" | "ready" | "failed"modelUrlstringURL к файлу модели GLB (когда готова)progressnumberПрогресс генерации 0-100 (при обработке)stepstringОписание текущего этапа генерации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
}'{
"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"
}Если модель для того же местоположения и радиуса уже была сгенерирована, API возвращает кэшированный результат немедленно со статусом: "ready". Модели кэшируются в S3 на 30 дней. За кэшированные результаты плата не взимается.

Опрашивайте эту конечную точку для проверки статуса запроса генерации модели. Модель проходит несколько этапов: 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
}Рекомендуем опрашивать каждые 5-10 секунд. Типичное время генерации — 30-120 секунд в зависимости от размера области и нагрузки сервера. Поле progress предоставляет процент (0-100) для отображения индикатора прогресса в вашем интерфейсе.
Рассчитайте годовую выработку солнечной энергии для определённой конфигурации панели и местоположения. Эта конечная точка использует спутниковые данные PVGIS (Photovoltaic Geographical Information System) для точных значений облучённости.
/api/solar/calculatelatitudenumberrequiredШирота местоположенияlongitudenumberrequiredДолгота местоположенияtiltDegnumberrequiredУгол наклона панели в градусах (0-90)azimuthDegnumberrequiredАзимут панели в градусах (0=Север, 180=Юг)panelAreaM2numberrequiredОбщая площадь панелей в квадратных метрахpanelEfficiencynumberrequiredКПД панели (0.0 - 1.0, обычно 0.18-0.22)shadingLossFractionnumberКоэффициент потерь от затенения (0.0-1.0, по умолчанию: 0)annualYieldKwhnumberrequiredРасчётная годовая выработка энергии в kWhpeakPowerKwnumberrequiredПиковая выходная мощность в кВтspecificYieldnumberrequiredУдельная выработка в kWh/kWpmonthlyKwhnumber[]requiredМассив из 12 помесячных значений kWhsourcestringrequiredИдентификатор источника данных ("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"
}Конечная точка расчёта солнечной энергии общедоступна и не требует API-ключа. Она использует публичный API PVGIS, поддерживаемый Объединённым исследовательским центром Европейской комиссии.

Встройте интерактивный 3D-просмотрщик солнечной энергии на свой сайт с помощью iframe. Встраиваемый просмотрщик включает элементы управления временем для моделирования теней и работает на компьютере и мобильных устройствах.
latnumberrequiredШирота отображаемого местоположенияlngnumberrequiredДолгота отображаемого местоположенияkeystringrequiredВаш API-ключ для аутентификации<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 применяет ограничения запросов для обеспечения справедливого использования и стабильности системы.
{
"error": "Rate limit exceeded. Maximum 10 generations per hour."
}API использует стандартные коды состояния HTTP. Все ответы об ошибках содержат JSON-тело с полем error, описывающим проблему.
{
"error": "latitude and longitude are required"
}{
"error": "Invalid or revoked API key"
}Поддержка вебхуков для уведомлений о завершении генерации моделей запланирована в будущем обновлении. В настоящее время используйте опрос конечной точки статуса, чтобы проверить готовность моделей.
Обратные вызовы вебхуков будут отправлять POST-запрос на указанный вами URL при завершении генерации модели, устраняя необходимость в опросе. Эта функция включена в наш план развития.
Полные примеры для копирования для распространённых сценариев интеграции.
#!/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']}")
Ознакомьтесь с руководством пользователя для полного обзора 3D-просмотрщика, моделирования теней и функций анализа солнечных панелей.
Руководство пользователя