Znajdź punkty, które mieszczą się w zestawie współrzędnych


9

Mam db PostGIS i chcę znaleźć punkty, które leżą w pewnym regionie (obwiednia). Mam dwa zestawy współrzędnych, z których mogę uzyskać wszystkie cztery punkty prostokąta, które tworzą pole (w razie potrzeby). Moja kolumna danych, o której mowa, nosi nazwę „punkt” i jest również typu punkt.

  • Czy w każdym razie należy podać cztery zestawy współrzędnych (szerokość / długość) i uzyskać wszystkie punkty, które znajdują się w ramce.
  • Lub określ dwa punkty i pozwól DB wyliczyć narożniki prostokąta i zwrócić punkty w środku

Na wszelki wypadek nie jestem pewien, co chcę osiągnąć. Odpowiednikiem „waniliowego” sql, gdybym miał pole lat i długie zamiast punktu, byłoby:

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

ZAKTUALIZOWANA EDYCJA:

Próbuję rozwiązania podmroku. Na początku nie miałem konstruktora ST_MakePoint (teraz mam) i nadal otrzymuję bardzo podobny błąd (tylko na innym znaku).

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

i otrzymuję ten błąd:

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

EDYTOWAĆ:

W krótkim okresie mogę to rozwiązać za pomocą:

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

Ale będę musiał dowiedzieć się, dlaczego żadna z funkcji PostGIS nie działa dla mnie.


Preferowaną metodą jest publikowanie tylko w jednym miejscu. Jeśli to miejsce jest nieodpowiednie lub nie działa, można je łatwo przenieść. Nie zamierzam podejmować żadnych działań, ponieważ GIS powinno być tam, gdzie powinno być twoje pytanie, ale zachęcam do usunięcia postu krzyżowego na SO.
whuber

1
@ whuber .. gotowe.
Ankur

Czy - wybiera GeometryFromText („POLYGON ((75 20,80 30,90 22,85 10,75 20))”, 4326) - działa?
Sean

Nie jestem pewien co masz na myśli. Próbowałem różnych wariantów tego, co powiedziałeś, ale one nie zadziałały
Ankur,

Jaka jest kolumna „punkt”, do której odwołujesz się w ST_MakePoint (punkt)
podmroku

Odpowiedzi:


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

<- w razie potrzeby wymień współrzędne


przepraszam za głupie pytanie, ale czym jest „the_geom” ... czy mam nazywać alias SELECT * FROM myTable i czy ta wartość staje się „the_geom”
Ankur

Przepraszamy, oczywiście, że kolumna jest przeszukiwana. Nazwałbym to db_column lub coś w tym rodzaju, ale doktorzy Postgis myślą inaczej ... to ma sens, gdy wiesz, co to jest.
Ankur

1
Po uruchomieniu tego pojawia się błąd, który mówi, że GeometryFromText nie istnieje. Używam Postgis 2.0. Próbowałem też st_geomfromtext.
picardo

@ w mroku być może się mylę, ale wydaje się, że brakuje nawiasu.
Davide Pastore,

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.