Finden Sie Punkte, die innerhalb eines Satzes von Koordinaten liegen


9

Ich habe eine PostGIS-Datenbank und möchte die Punkte finden, die in einer Region liegen (ein Begrenzungsrahmen). Ich habe zwei Koordinatensätze, aus denen ich alle vier Rechteckpunkte erhalten kann, die die Box bilden (falls erforderlich). Meine fragliche Datenspalte heißt 'Punkt' und ist auch vom Typ Punkt.

  • Gibt es sowieso vier Koordinatensätze (lat / long) anzugeben und alle Punkte zu erhalten, die innerhalb der Box liegen.
  • Oder geben Sie zwei Punkte an und lassen Sie die DB die Ecken des Rechtecks ​​berechnen und die darin enthaltenen Punkte zurückgeben

Nur für den Fall, dass mir nicht klar ist, was ich erreichen möchte. Das Äquivalent zu 'Vanilla' SQL, wenn ich ein Lat- und Long-Feld anstelle eines Punktes hätte, wäre:

SELECT * FROM myTable where lat> xMin AND lat < xMax AND long > yMin and long < yMax

AKTUALISIERTE BEARBEITUNG:

Ich versuche die Lösung von underdark. Zuerst hatte ich den ST_MakePoint-Konstruktor nicht (jetzt schon) und ich bekomme immer noch einen sehr ähnlichen Fehler (nur bei einem anderen Zeichen).

SELECT * FROM myTable WHERE ST_Within(ST_MakePoint(point),GeometryFromText('POLYGON((75 20,80 30,90 22,85 10,75 20))',4326))

und ich erhalte diesen Fehler:

ERROR:  function st_makepoint(point) does not exist
LINE 1: SELECT * FROM triples WHERE ST_Within(ST_MakePoint(point),Ge...
                                          ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.


********** Error **********

ERROR: function st_makepoint(point) does not exist
SQL state: 42883
Hint: No function matches the given name and argument types. You might need to add explicit type casts.
Character: 39

BEARBEITEN:

Kurzfristig kann ich es lösen mit:

SELECT * FROM triples WHERE box '((point1),(point2))' @> point

Aber ich muss herausfinden, warum keine der PostGIS-Funktionen für mich nicht funktioniert.


Die bevorzugte Methode besteht darin, nur an einer Stelle zu posten. Wenn dieser Ort unangemessen ist oder nicht funktioniert, kann er leicht migriert werden. Ich werde keine Maßnahmen ergreifen, da Ihre Frage in GIS sein sollte, aber ich möchte Sie dringend bitten, den Cross-Post auf SO zu löschen.
whuber

1
@whuber .. fertig.
Ankur

Funktioniert - GeometryFromText auswählen ('POLYGON ((75 20,80 30,90 22,85 10,75 20))', 4326) -?
Sean

Ich bin mir nicht sicher, was du meinst. Ich habe verschiedene Variationen von dem ausprobiert, was du gesagt hast, und sie haben nicht funktioniert
Ankur

Was ist die "Punkt" -Spalte, auf die Sie in ST_MakePoint (Punkt) verweisen
underdark

Antworten:


9
SELECT * FROM myTable WHERE 
ST_Within(the_geom, GeometryFromText ('POLYGON((75 20,80 30,90 22,85 10,75 20))', 4326))

<- Koordinaten nach Bedarf ersetzen


Entschuldigung für die dumme Frage, aber was ist 'the_geom' ... soll ich die SELECT * FROM myTable-Abfrage aliasen und wird dieser Wert zu 'the_geom'
Ankur

Entschuldigung, natürlich wird die Spalte durchsucht. Ich würde es db_column oder so nennen, aber Postgis-Dokumente denken anders ... es ist sinnvoll, wenn Sie wissen, was es ist.
Ankur

1
Wenn ich dies ausführe, wird eine Fehlermeldung angezeigt, die besagt, dass GeometryFromText nicht vorhanden ist. Ich benutze Postgis 2.0. Ich habe auch st_geomfromtext ausprobiert.
Picardo

@underdark Vielleicht irre ich mich, aber es scheint, dass eine Klammer fehlt.
Davide Pastore

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.