Punkt-in-Polygon
Der Punkt (1, 1) liegt im Rechteck mit den Ecken (0, 0), (4, 0), (4, 3) und (0, 3): Ein Strahl nach rechts kreuzt den Umriss einmal, und eine ungerade Zahl bedeutet innen. Uhrzeigersinn und Gegenrichtung funktionieren gleichermaßen. Kostenlos in Ihrem Browser.
- Kostenlos
- Läuft in Ihrem Browser
- Ohne Anmeldung
- Ihre Daten bleiben auf Ihrem Gerät
Im Browser ausführen – kostenlos
Läuft direkt in Ihrem Browser – kostenlos. Ihre Datei verlässt Ihren Browser nicht und wird an keinen Server übertragen.
Ein Punkt-in-Polygon-Test beantwortet eine grundlegende Frage der algorithmischen Geometrie: liegt ein Abfrageort bei einer geschlossenen Form aus einem geordneten Eckpunkt-Ring im Inneren der Form? Vermessung, Kartenprodukte, Spiel-Kollisionsmasken, Logistik-Geofences und Geometrie-Labore im Unterricht brauchen dieselbe deterministische Antwort statt einer Handskizze. Dieser Prüfer implementiert den klassischen Gerade-ungerade-Raycasting-Algorithmus auf planaren Koordinaten: ein horizontaler Halbstrahl wird vom Testpunkt zur positiven Unendlichkeit geworfen, jede Polygonkante wird auf eine echte Kreuzung geprüft, und die Parität der Kreuzungszahl entscheidet innen versus außen. Punkte genau auf einer Kante oder einem Eckpunkt gelten als innen und erhalten ein Rand-Flag, damit Closed-Set-Nutzer keinen zweiten Durchlauf brauchen. Das Polygon wird implizit geschlossen — Sie müssen den ersten Eckpunkt am Ende nicht wiederholen — und Eckpunkte können als Objekte mit x- und y-Feldern oder als Zwei-Element-Arrays geliefert werden. Bei weniger als drei Eckpunkten schlägt die Anfrage mit einem klaren Validierungsfehler fehl, weil ein Polygon mindestens ein Dreieck braucht.
Wie der Gerade-ungerade-Raycasting-Test funktioniert
Starten Sie mit einem endlichen Abfragepunkt mit Koordinaten x und y und einer geordneten Liste von mindestens drei planaren Eckpunkten, die ein einfaches geschlossenes Polygon bilden, wenn aufeinanderfolgende Eckpunkte verbunden werden und der letzte zum ersten zurückführt. Der Algorithmus verlangt keine Uhrzeiger- oder Gegen-Uhrzeiger-Reihenfolge; beide Orientierungen sind unter der Gerade-ungerade-Regel gültig. Vom Abfragepunkt aus stellen Sie sich einen horizontalen Strahl vor, der nur nach rechts läuft, nie nach links.
Gehen Sie jede Kante des Polygons ab und entscheiden Sie, ob diese Kante den Strahl kreuzt. Horizontale Kanten werden ignoriert, damit keine mehrdeutigen Doppelzählungen entstehen. Wenn eine Kante die Strahlhöhe überspannt — ein Endpunkt streng oberhalb des Abfrage-y und der andere nicht — wird das exakte x des Schnittpunkts mit einem linearen Parameter entlang der Kante berechnet.
Liegt das Abfrage-x streng links von diesem Schnitt, trägt die Kante eine Kreuzung bei; fällt der Schnitt mit der Abfrage innerhalb einer winzigen numerischen Toleranz zusammen, wird der Punkt als auf dem Rand klassifiziert. Nach Verarbeitung aller Kanten bedeutet eine ungerade Kreuzungszahl innen und eine gerade außen — das klassische Jordan-Kurven-Paritätsargument spezialisiert auf einen horizontalen Strahl. Koordinaten müssen endlich sein; NaN und Infinity werden abgelehnt.
Wo Punkt-in-Polygon-Prüfungen in der Praxis vorkommen
Logistik- und Lieferprodukte fragen, ob ein Kurier-GPS-Fix in einem Nachbarschaftspolygon liegt, bevor ein zonenspezifischer Tarif angeboten wird, und brauchen eine deterministische Antwort, die zwischen Browser-Kartenvorschau und Server nicht driftet. Spiele und interaktive Medien nutzen achsenausgerichtete oder freiformige Kollisionsmasken als Eckpunkt-Ringe und prüfen Spieler- oder Projektilpositionen jedes Frame ohne einen schweren GIS-Stack. Unterrichtsmodule zur algorithmischen Geometrie lehren Raycasting, Jordan-Kurven-Intuition und Gleitkomma-Grenzfälle; ein einziges vertrauenswürdiges Orakel, das sowohl das Inside-Flag als auch die rohe Kreuzungszahl liefert, hilft Studierenden, Hausaufgaben schrittweise zu prüfen.
Stadtplanung und Katasterwerkzeuge klassifizieren Stichprobenpunkte gegen Gebäudegrundrisse oder Zonierungspolygone in frühen Entwurfsreviews, wenn volle Topologie-Datenbanken noch nicht angebunden sind. Wenn Sie später Polygonumfang, Polygonfläche, Großkreis-Geodäsie, Multipolygon-Löcher mit der Nonzero-Winding-Regel oder sphärische Containment auf dem WGS84-Ellipsoid brauchen, behandeln Sie diese als getrennte Suchabsichten und Landings statt diese planare Punkt-in-Polygon-Prüferseite zu überladen.
Anwendungsfälle
Geofence-Zugehörigkeit für Logistik
Klassifizieren Sie GPS- oder Kartenklick-Punkte gegen Lieferzonen und Nachbarschaftspolygone mit einem deterministischen Inside-Flag, das Browser-Vorschauen und Backend-Preise teilen.
Hit-Tests für Spiele und UI
Prüfen Sie, ob Cursor, Spieler oder Projektil in einer freiformigen polygonalen Maske liegt, ohne eine volle GIS-Bibliothek in den Client zu importieren.
Häufige Fragen
Welchen Algorithmus nutzt dieser Punkt-in-Polygon-Prüfer?
Gerade-ungerade-Raycasting: ein horizontaler Halbstrahl vom Abfragepunkt zählt Kreuzungen mit Polygonkanten; ungerade bedeutet innen, gerade außen.
Was geschieht, wenn das Polygon weniger als drei Eckpunkte hat?
Ein Polygon braucht mindestens drei Eckpunkte; ein Segment oder Einzelpunkt ist kein gültiger Ring für Containment.
Spielt die Eckpunkt-Reihenfolge eine Rolle (Uhrzeigersinn vs. Gegen-Uhrzeigersinn)?
Beide Orientierungen funktionieren unter der Gerade-ungerade-Regel. Die Reihenfolge muss um den Rand sequentiell bleiben; gemischte Eckpunkte erzeugen eine andere (meist selbstschneidende) Form.
Was passiert, wenn der Punkt genau auf dem Rand liegt?
Ein Punkt genau auf einer Kante oder einem Eckpunkt gilt als innen, und das Ergebnis markiert ihn zusätzlich als Randpunkt. Eine Markierung, die Sie auf die Zaunlinie setzen, zählt also als enthalten.
Muss ich den ersten Eckpunkt am Ende wiederholen?
Nein. Das Polygon wird automatisch geschlossen, der letzte Eckpunkt wird mit dem ersten verbunden. Geben Sie einfach mindestens drei Eckpunkte in Reihenfolge an, jeweils als Paar aus x und y.
Verwandte Tools
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/point-in-polygon \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"x":1,"y":1,"polygon":[{"x":0,"y":0},{"x":4,"y":0},{"x":4,"y":3},{"x":0,"y":3}]}'const res = await fetch("https://api.kit.forhosting.com/geo/point-in-polygon", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"x": 1,
"y": 1,
"polygon": [
{
"x": 0,
"y": 0
},
{
"x": 4,
"y": 0
},
{
"x": 4,
"y": 3
},
{
"x": 0,
"y": 3
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/geo/point-in-polygon",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"x": 1,
"y": 1,
"polygon": [
{
"x": 0,
"y": 0
},
{
"x": 4,
"y": 0
},
{
"x": 4,
"y": 3
},
{
"x": 0,
"y": 3
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/geo/point-in-polygon", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"x":1,"y":1,"polygon":[{"x":0,"y":0},{"x":4,"y":0},{"x":4,"y":3},{"x":0,"y":3}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"x":1,"y":1,"polygon":[{"x":0,"y":0},{"x":4,"y":0},{"x":4,"y":3},{"x":0,"y":3}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/geo/point-in-polygon", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Beispiel-Anfrage
{
"x": 1,
"y": 1,
"polygon": [
{
"x": 0,
"y": 0
},
{
"x": 4,
"y": 0
},
{
"x": 4,
"y": 3
},
{
"x": 0,
"y": 3
}
]
}Beispiel-Antwort
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "geo.point_in_polygon",
"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.
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. |
Technische Hinweise
Wie der Gerade-ungerade-Raycasting-Test funktioniert
Randtreffer kurzschließen zu innen mit on_boundary wahr, damit auf der Zaunlinie gezeichnete Marker als enthalten gelten. Die gesamte Pipeline ist deterministische Gleitkommaarithmetik: keine Zufallsseeds, keine Zeitstempel, keine Netzaufrufe und keine Modelldrift, sodass identische Eingaben immer identisches JSON erzeugen. Degenerierte Ringe mit weniger als drei Eckpunkten werden mit invalid_input abgelehnt statt ein Segment stillschweigend als Polygon zu behandeln.
Was Sie senden und was Sie zurückerhalten
Senden Sie den Testpunkt als Pflicht-Zahlenfelder x und y und das Polygon als Pflicht-Array unter dem Feld polygon mit mindestens drei Eckpunkten. Optionale verschachtelte point-Objekte werden für Clients unterstützt, die die Abfrage bereits als eine Struktur packen. Hat das polygon-Array Länge null, eins oder zwei, schlägt die Anfrage mit der Meldung fehl, dass ein Punkt-in-Polygon-Test mindestens drei Eckpunkte braucht, damit Aufrufer die Geometrie korrigieren statt raten. Jeder Eckpunkt kann ein Objekt mit x und y oder ein Array aus zwei Zahlen sein; Aliasse vertices und points werden für den Ring ebenfalls akzeptiert. Fehlende Felder, nicht-numerische Strings, NaN und Infinity schlagen mit invalid_input fehl und werden nicht berechnet. Bei Erfolg enthält die Antwort inside als Boolean, on_boundary als Boolean, ein bereinigtes point-Objekt, das bereinigte polygon-Array, n als Eckpunktzahl, crossings als die ganzzahlige Strahl-Kanten-Zahl des Paritätstests, method auf ray_casting und rule auf even_odd. Typische Smoke-Checks: ein Einheitsquadrat mit Abfrage bei eins Komma eins innen, eine Abfrage weit außerhalb des Quadrats außen, und ein Dreieck mit Punkt auf einer Seite innen mit on_boundary wahr. Der Preis erfolgreicher API-Aufrufe ist die veröffentlichte Basis von $0.002 pro Element; Validierungsfehler verbrauchen kein Prepaid-Guthaben.
Wo Punkt-in-Polygon-Prüfungen in der Praxis vorkommen
Weil diese Fähigkeit eine reine Parse-Engine ist, ist der API-Preis die veröffentlichte Basis von $0.002 pro erfolgreichem Element und fehlgeschlagene Validierung wird nicht berechnet.
Integrationsbeispiele
Algorithmische Geometrie im Unterricht
Demonstrieren Sie Raycasting, Parität und Rand-Grenzfälle mit stabilem JSON inklusive Kreuzungszahlen zur schrittweisen Prüfung.
Technische Fragen
Zählen Punkte auf der Kante als innen?
Ja. Liegt die Abfrage auf einer Kante oder einem Eckpunkt innerhalb einer winzigen numerischen Toleranz, ist inside wahr und on_boundary wahr.
Was kostet es?
Das Browser-Werkzeug ist kostenlos und läuft lokal. API-Anfragen nutzen Prepaid-KIT-Guthaben zu $0.002 pro erfolgreichem Element; ungültige Eingabe wird nicht berechnet.