Το API Συνεργατών SunTrace3D σας επιτρέπει να δημιουργείτε HD τρισδιάστατα μοντέλα πόλεων, να υπολογίζετε ηλιακή ενεργειακή απόδοση και να ενσωματώνετε διαδραστικές τρισδιάστατες προβολές στον ιστότοπό σας. Όλα τα endpoints χρησιμοποιούν JSON και τυπικές μεθόδους HTTP.
Προβολή ως Markdown (αναγνώσιμο από μηχανές)Το API SunTrace3D είναι μια υπηρεσία RESTful για προγραμματιστική πρόσβαση σε δημιουργία τρισδιάστατων μοντέλων πόλεων και υπολογισμούς ηλιακής ενέργειας. Το API έχει σχεδιαστεί για συνεργάτες που θέλουν να ενσωματώσουν ηλιακή ανάλυση στις δικές τους εφαρμογές, ιστότοπους ή ροές εργασίας.
https://suntrace3d.com/api/v1/api/v1/modelsΔημιουργία νέου HD τρισδιάστατου μοντέλου/api/v1/models/:idΈλεγχος κατάστασης δημιουργίας μοντέλου/api/solar/calculateΥπολογισμός ηλιακής ενεργειακής απόδοσης/embedΕνσωματώσιμη τρισδιάστατη προβολή (iframe)/api/healthΈλεγχος υγείας (δεν απαιτεί πιστοποίηση)
Όλα τα αιτήματα API απαιτούν πιστοποίηση μέσω Bearer token στην κεφαλίδα Authorization. Τα κλειδιά API διαχειρίζονται μέσω της Πύλης Συνεργατών.
curl -H "Authorization: Bearer st_live_abc123def456..." \
https://suntrace3d.com/api/v1/modelsΜην εκθέτετε ποτέ το κλειδί API σας σε JavaScript πλευράς πελάτη, δημόσια αποθετήρια ή κώδικα front-end. Αν το κλειδί σας παραβιαστεί, ανακαλέστε το αμέσως από την Πύλη Συνεργατών και δημιουργήστε ένα νέο.
Ζητήστε τη δημιουργία ενός HD τρισδιάστατου μοντέλου πόλης για μια συγκεκριμένη γεωγραφική τοποθεσία. Το μοντέλο δημιουργείται ασύγχρονα — ελέγξτε το endpoint κατάστασης για να δείτε πότε θα είναι έτοιμο.
/api/v1/modelslatitudenumberrequiredΓεωγραφικό πλάτος κεντρικού σημείου (-90 έως 90)longitudenumberrequiredΓεωγραφικό μήκος κεντρικού σημείου (-180 έως 180)radiusKmnumberΑκτίνα της περιοχής μοντελοποίησης σε km (προεπιλογή: 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 επιστρέφει αμέσως το αποθηκευμένο αποτέλεσμα με status: "ready". Τα μοντέλα αποθηκεύονται σε S3 για 30 ημέρες. Δεν χρεώνεστε για αποθηκευμένα αποτελέσματα.

Ελέγξτε αυτό το endpoint για την κατάσταση ενός αιτήματος δημιουργίας μοντέλου. Το μοντέλο περνά από πολλά στάδια: 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) για εμφάνιση δείκτη προόδου στη διεπαφή χρήστη σας.
Υπολογίστε την ετήσια ηλιακή ενεργειακή απόδοση για μια συγκεκριμένη διαμόρφωση πάνελ και τοποθεσία. Αυτό το endpoint χρησιμοποιεί δορυφορικά δεδομένα PVGIS (Φωτοβολταϊκό Γεωγραφικό Πληροφοριακό Σύστημα) για ακριβείς τιμές ακτινοβολίας.
/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Μέγιστη ισχύς εξόδου σε kWspecificYieldnumberrequiredΕιδική απόδοση σε 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"
}Το endpoint υπολογισμού ηλιακής ενέργειας είναι δημόσια διαθέσιμο και δεν απαιτεί κλειδί API. Χρησιμοποιεί το δημόσιο API PVGIS που συντηρείται από το Κοινό Κέντρο Ερευνών της Ευρωπαϊκής Επιτροπής.

Ενσωματώστε μια διαδραστική τρισδιάστατη ηλιακή προβολή στον ιστότοπό σας χρησιμοποιώντας ένα 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"
}Η υποστήριξη Webhook για ειδοποιήσεις ολοκλήρωσης μοντέλων σχεδιάζεται για μελλοντική έκδοση. Προς το παρόν, χρησιμοποιήστε τον έλεγχο στο endpoint κατάστασης για να δείτε πότε τα μοντέλα είναι έτοιμα.
Τα webhook callbacks θα στέλνουν ένα αίτημα 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']}")
Δείτε τον Οδηγό Χρήσης για μια πλήρη παρουσίαση της τρισδιάστατης προβολής, της προσομοίωσης σκιών και των δυνατοτήτων ανάλυσης ηλιακών πάνελ.
Οδηγός Χρήσης