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.
Odpowiedzi:
<- w razie potrzeby wymień współrzędne
źródło
Wygląda na to, że chcesz BBOX (Bounding Box) ze swoich punktów - więc ST_Extent byłby korzystny.
BBOX2D
http://www.bostongis.com/postgis_extent_expand_buffer_distance.snippet
udostępni stronę http://postgis.net/docs/ST_Extent.htm, ale serwer ma problemy
źródło