Geodätische Linie mit gleichmäßig verteilten Punkten verdichten
Verdichten Sie eine geografische Linie, indem Sie in jedes Segment zusätzliche Breiten- und Längengradpunkte einfügen.
Im Browser ausführen – kostenlos
Geben Sie eine geordnete Linie und den maximalen Abstand in Metern an. Das Ergebnis folgt dem kürzeren Großkreisbogen und stellt sicher, dass keine erzeugte Lücke diesen Abstand überschreitet. Die ursprünglichen Punkte bleiben in ihrer Reihenfolge erhalten; Anzahlen und Entfernungsangaben erleichtern Ihnen die Prüfung, Kartendarstellung und Weiterverarbeitung in räumlichen Abläufen, ohne dass Sie dafür eine Desktop-GIS-Anwendung benötigen.
Wählen Sie den Abstand passend zur Weiterverarbeitung
Eine Linienverdichtung ist sinnvoll, wenn ein Arbeitsschritt häufigere Stützstellen benötigt, als die Ausgangsgeometrie enthält. Beginnen Sie mit einer geordneten Liste aus Datensätzen mit lat und lon. Legen Sie anschließend mit spacing_m die größte zulässige Lücke in Metern fest. Der Rechner untersucht jedes ursprüngliche Segment einzeln. Ist ein Segment bereits kürzer als der gewünschte Abstand, bleibt es eine einzige Lücke und es wird kein unnötiger Punkt ergänzt. Ist es länger, wird es in die kleinste ganze Zahl gleich langer geodätischer Abschnitte geteilt, die den Höchstwert einhalten. Der Abstand ist somit eine Obergrenze und keine Vorgabe, dass jede Lücke exakt denselben Wert besitzen muss. Da jedes Segment separat geteilt wird, bleibt sein Endpunkt erhalten und das nächste Segment beginnt genau am ursprünglichen Punkt. Grobe Abstände eignen sich für Übersichtskarten; feinere Werte sind für Gelände- oder Abdeckungsabfragen, Animationen und Berechnungen mit kurzen Kanten gedacht. Sehr kleine Werte können große Ergebnisse erzeugen. Die Fähigkeit lehnt Ausgaben oberhalb der dokumentierten Grenze ab, statt die Linie unbemerkt abzuschneiden.
So funktioniert die sphärische Geodäsie
Je zwei aufeinanderfolgende Koordinaten bestimmen ein Segment auf einer Kugel. Der Algorithmus wandelt beide Endpunkte in dreidimensionale Einheitsvektoren um, misst ihren Mittelpunktswinkel und interpoliert entlang des kürzeren Großkreisbogens. Die Entfernung ergibt sich aus diesem Winkel multipliziert mit earth_radius_m; voreingestellt ist der konventionelle mittlere Erdradius. Das Verfahren behandelt den Übergang über den Antimeridian korrekt: Eine Linie von 179 Grad Ost nach 179 Grad West nimmt den kurzen Weg über die Datumsgrenze. Außerdem werden Breiten- und Längengrad nicht wie ebene kartesische Koordinaten behandelt, denn diese Näherung wird auf langen Strecken oder in Polnähe sichtbar ungenau. Ursprüngliche und eingefügte Koordinaten sind deterministisch und werden für zuverlässige JSON-Vergleiche stabil gerundet. Identische aufeinanderfolgende Punkte bleiben erhalten, weil sie strukturelle Bedeutung haben können, obwohl ihre Lücke null ist. Exakt antipodische Endpunkte werden abgelehnt: Gegenüberliegende Punkte lassen sich durch unendlich viele Großkreise verbinden, sodass kein eindeutiger kürzerer Weg existiert. Für ellipsoidische Vermessungsaufgaben beachten Sie bitte, dass eine konfigurierbare Kugel und nicht das vollständige WGS-84-Ellipsoid verwendet wird.
Ergebnis lesen und prüfen
Das wichtigste Ergebnis ist vertices, eine geordnete Liste, die Sie als Koordinaten serialisieren oder in das Geometrieformat Ihrer Anwendung übertragen können. Die erste und letzte Koordinate entsprechen den ursprünglichen Endpunkten; jeder innere Ausgangspunkt erscheint an seiner Segmentgrenze. Zusätzlich liefert die Antwort input_vertices, output_vertices und inserted_vertices. Damit ist die Erweiterung nachvollziehbar und Sie können Speicher- oder Darstellungsbudgets überwachen. total_distance_m ist die Summe der ursprünglichen geodätischen Segmentlängen. max_segment_distance_m bezeichnet die größte tatsächliche Lücke nach der Teilung und sollte, abgesehen von belangloser Fließkommarundung, höchstens dem angeforderten Abstand entsprechen. Prüfen Sie dieses Feld, wenn die Verdichtung eine nachgelagerte Abtastanforderung absichert. Bewahren Sie bei der Umwandlung in GeoJSON die Reihenfolge; beachten Sie jedoch, dass Koordinatenpaare dort üblicherweise den Längengrad vor dem Breitengrad führen, während diese API benannte Eigenschaften lat und lon nutzt. Die reine Berechnung führt keine Netzwerkanfragen aus und speichert Ihre Linie nicht. Interaktive Prüfungen sind im Browser möglich; automatisierte API-Aufrufe kosten $0.002 je Anfrage und liefern dieselbe deterministische Struktur.
Anwendungsfälle
Route für regelmäßige Stichproben vorbereiten
Ergänzen Sie genügend Punkte, bevor Sie Höhe, Wetter, Funkabdeckung oder andere entlang der Route veränderliche Werte abfragen.
Darstellung langer Kanten verbessern
Stellen Sie lange geografische Kanten mit Großkreis-Zwischenpunkten dar, damit projizierte oder animierte Pfade dem vorgesehenen Verlauf folgen.
Linien mit gemischter Auflösung vereinheitlichen
Wenden Sie eine gemeinsame maximale Lücke auf Linien an, deren Ausgangspunkte in unregelmäßigen Abständen erfasst wurden.
Häufige Fragen
Legt spacing_m einen exakten Abstand zwischen allen Punkten fest?
Nein. Der Wert ist die größte zulässige Lücke. Jedes Ausgangssegment wird in gleich lange geodätische Abschnitte geteilt, die ihn nicht überschreiten.
Bleiben die ursprünglichen Punkte erhalten?
Ja. Alle bleiben in derselben Reihenfolge; neue Punkte werden zwischen aufeinanderfolgenden Ausgangspunkten eingefügt.
Funktioniert die Berechnung über den Antimeridian hinweg?
Ja. Die Interpolation folgt dem kürzeren Großkreisbogen, einschließlich des kurzen Übergangs zwischen Längengraden nahe 180 Grad.
Warum werden antipodische Endpunkte abgelehnt?
Gegenüberliegende Punkte bestimmen keinen eindeutigen Großkreis. Die Ablehnung verhindert die willkürliche Wahl eines Weges.
Beruht die Berechnung auf dem WGS-84-Ellipsoid?
Nein. Sie nutzt eine sphärische Großkreisgeometrie mit konfigurierbarem Radius; voreingestellt ist der mittlere Erdradius.
Was kostet eine API-Anfrage?
Jede Anfrage kostet $0.002. Die deterministische Berechnung ruft keine externen Dienste auf.
Für Entwickler — API-Zugang
Alles auf dieser Seite ist auch per API verfügbar. Dieser Abschnitt richtet sich an Teams, die es in ihre eigenen Systeme einbinden möchten; alle anderen nutzen einfach das Tool oben.
Endpunkt
Authentifizierung per Bearer-Token. Ein einziger POST stellt die Aufgabe in die Warteschlange; das Ergebnis erhalten Sie per Webhook oder über einen signierten Link.
Aufruf aus Ihrem Stack
curl -X POST https://api.kit.forhosting.com/geo/densify-line \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"line":[{"lat":37.7749,"lon":-122.4194},{"lat":37.8044,"lon":-122.2711},{"lat":37.6879,"lon":-122.4702}],"spacing_m":5000}'const res = await fetch("https://api.kit.forhosting.com/geo/densify-line", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"line": [
{
"lat": 37.7749,
"lon": -122.4194
},
{
"lat": 37.8044,
"lon": -122.2711
},
{
"lat": 37.6879,
"lon": -122.4702
}
],
"spacing_m": 5000
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/geo/densify-line",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"line": [
{
"lat": 37.7749,
"lon": -122.4194
},
{
"lat": 37.8044,
"lon": -122.2711
},
{
"lat": 37.6879,
"lon": -122.4702
}
],
"spacing_m": 5000
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/geo/densify-line", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"line":[{"lat":37.7749,"lon":-122.4194},{"lat":37.8044,"lon":-122.2711},{"lat":37.6879,"lon":-122.4702}],"spacing_m":5000}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"line":[{"lat":37.7749,"lon":-122.4194},{"lat":37.8044,"lon":-122.2711},{"lat":37.6879,"lon":-122.4702}],"spacing_m":5000}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/geo/densify-line", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Beispiel-Anfrage
{
"line": [
{
"lat": 37.7749,
"lon": -122.4194
},
{
"lat": 37.8044,
"lon": -122.2711
},
{
"lat": 37.6879,
"lon": -122.4702
}
],
"spacing_m": 5000
}Beispiel-Antwort
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "geo.densify_line",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}Die API arbeitet asynchron: Sie erhalten sofort eine task_id. Polling ist mit 1 Anfrage pro Sekunde erlaubt.
Preis
Der Preis steht auf der Seite – keine Tokens, keine Credits. Fehlgeschlagene Aufgaben werden nicht berechnet.
Limits
max_points | 10000 |
max_output_vertices | 100000 |
Fehler
| HTTP | Code | Bedeutung |
|---|---|---|
401 | unauthorized | Der API-Schlüssel fehlt oder ist ungültig – prüfen Sie den Authorization-Header (Bearer). |
402 | insufficient_balance | Ihr Guthaben reicht für diese Aufgabe nicht aus – Aufladungen verfallen nicht. |
404 | unknown_type | Unbekannter Aufgabentyp – prüfen Sie das Feld „type“ gegen den Katalog. |
429 | rate_limited | Zu viele Anfragen – warten Sie kurz; Polling ist mit 1 Anfrage pro Sekunde erlaubt. |