Höhe, Neigung und Sonnenseite für Immobilienangebote
An Hanglagen fragen Kaufinteressierte, wie hoch ein Haus liegt, wie steil das Grundstück ist und wann es Sonne hat. Fünf Höhenabfragen geben die Antworten, wenn Sie ein Angebot speichern: die Höhe beim Haus und an vier Punkten rundherum.
So funktioniert es
Die Funktion fragt nach der Höhe beim Haus und an vier Punkten 90 m nördlich, südlich, östlich und westlich davon, dem Abstand der Daten. Norden gegen Süden und Osten gegen Westen ergeben den Anstieg in jede Richtung; zusammen ergeben sie die Neigung in Prozent und die Richtung, in die das Gelände abfällt. Dorthin schaut ein Haus an dieser Stelle. Unter 3 % Neigung gilt das Gelände als eben.
Lassen Sie sie auf Ihrem Server laufen, wenn ein Angebot gespeichert wird, und speichern Sie die drei Werte damit. Der Schlüssel bleibt auf dem Server, und die Angebotsseiten schicken uns keine Anfragen.
Python
import math, requests
API = "https://api.overpass.ch/v1/IHR_API_SCHLÜSSEL/elevation"
STEP = 90 # Meter zu den vier Nachbarn, das Raster der Daten
SIDES = ["Norden", "Nordosten", "Osten", "Südosten", "Süden", "Südwesten", "Westen", "Nordwesten"]
def terrain(lat, lon):
"""Höhe, Neigung und Ausrichtung des Geländes bei lat, lon: 5 Abfragen."""
dlat = STEP / 111_320
dlon = STEP / (111_320 * math.cos(math.radians(lat)))
here = [[lat, lon], [lat + dlat, lon], [lat - dlat, lon], [lat, lon + dlon], [lat, lon - dlon]]
r = requests.post(API, json={"locations": here}, timeout=30)
r.raise_for_status()
h, n, s, e, w = (res["elevation"] for res in r.json()["results"])
east, north = (e - w) / (2 * STEP), (n - s) / (2 * STEP) # Anstieg pro Meter
slope = math.hypot(east, north) * 100
downhill = math.degrees(math.atan2(-east, -north)) % 360 # 0 Norden, 90 Osten
return {
"height_m": round(h),
"slope_pct": round(slope),
"faces": SIDES[round(downhill / 45) % 8] if slope >= 3 else "eben",
}
if __name__ == "__main__":
print(terrain(47.2760, 8.6530)) # Meilen, über dem See
Es gibt {'height_m': 529, 'slope_pct': 10, 'faces': 'Südwesten'} aus.
PHP
<?php
const ELEVATION_API = 'https://api.overpass.ch/v1/IHR_API_SCHLÜSSEL/elevation';
// Höhe, Neigung und Ausrichtung des Geländes bei $lat, $lon: 5 Abfragen.
function terrain(float $lat, float $lon): array {
$step = 90; // Meter zu den vier Nachbarn, das Raster der Daten
$dlat = $step / 111320;
$dlon = $step / (111320 * cos(deg2rad($lat)));
$here = [[$lat, $lon], [$lat + $dlat, $lon], [$lat - $dlat, $lon], [$lat, $lon + $dlon], [$lat, $lon - $dlon]];
$answer = file_get_contents(ELEVATION_API, false, stream_context_create(['http' => [
'method' => 'POST',
'header' => "Content-Type: application/json\r\n",
'content' => json_encode(['locations' => $here]),
'timeout' => 30,
]]));
if ($answer === false) {
throw new RuntimeException('Die Höhen-API hat nicht geantwortet');
}
[$h, $n, $s, $e, $w] = array_column(json_decode($answer, true)['results'], 'elevation');
$east = ($e - $w) / (2 * $step); // Anstieg pro Meter
$north = ($n - $s) / (2 * $step);
$slope = hypot($east, $north) * 100;
$downhill = fmod(rad2deg(atan2(-$east, -$north)) + 360, 360); // 0 Norden, 90 Osten
$sides = ['Norden', 'Nordosten', 'Osten', 'Südosten', 'Süden', 'Südwesten', 'Westen', 'Nordwesten'];
return [
'height_m' => (int) round($h),
'slope_pct' => (int) round($slope),
'faces' => $slope >= 3 ? $sides[(int) round($downhill / 45) % 8] : 'eben',
];
}
print_r(terrain(47.2760, 8.6530)); // Meilen, über dem See
Es braucht keine Erweiterung; allow_url_fopen muss eingeschaltet sein, wie es das standardmässig ist. In WordPress rufen Sie die Funktion auf, wenn ein Angebot gespeichert wird (der Hook save_post), und halten die Werte in benutzerdefinierten Feldern.
Im Angebot
Zeigen Sie die Werte, zum Beispiel «529 m über Meer, nach Südwesten ausgerichtet», oder machen Sie aus der Richtung Worte über die Sonne. Für die Nordhalbkugel:
| Ausrichtung | Sonne |
|---|---|
| Süden | fast den ganzen Tag |
| Südosten | am Morgen und über Mittag |
| Südwesten | am Nachmittag und Abend |
| Osten | am Morgen |
| Westen | am Abend |
| Nordosten, Norden, Nordwesten | weniger direkte Sonne, vor allem im Winter |
Auf der Südhalbkugel tauschen Sie Norden und Süden. Als Zahlen gespeichert, funktionieren die Werte auch in einer Suche: height_m >= 1000 für Ferienwohnungen in den Bergen, faces IN ('Süden', 'Südosten', 'Südwesten') für die Sonnenseite.
Was es kostet
Fünf Höhenabfragen pro Angebot, einmal. Für die Angebote, die Sie schon haben, schicken Sie die Punkte von bis zu 2000 Angeboten in einer Anfrage mit 10'000 Orten. Der kostenlose Tarif enthält 1 Million Höhenabfragen im Monat, für private und nicht kommerzielle Nutzung. Für eine Agentur oder ein Portal kostet der Tarif Elevation CHF 5 im Monat zuzüglich MWST und umfasst 50 Millionen Höhenabfragen: 10 Millionen Angebote.
Gut zu wissen
- Die Neigung ist die des Hangs über etwa 200 m. Ein einzelner Garten kann steiler oder flacher sein: Ein Haus auf einer ebenen Terrasse in einem steilen Hang bekommt die Neigung des Hangs.
- Die Daten messen die Oberfläche: In einem Wald oder zwischen grossen Gebäuden ist ein Teil von deren Höhe mit drin. In Dörfern und Städten liegen die Höhen meist innerhalb weniger Meter. Siehe Genauigkeit.
- Verwenden Sie die Position des Gebäudes, zum Beispiel aus Ihrer Adresssuche oder aus der Karte des Angebots. Fünf Meter daneben machen nichts aus; ein paar hundert Meter schon.
- Wo Sie die Werte zeigen, nennen Sie die Quelle der Höhendaten, wie in der Dokumentation beschrieben, zum Beispiel in der Fusszeile der Angebotsseiten.