Trova punti che si trovano all'interno di un insieme di coordinate


9

Ho un db PostGIS e voglio trovare i punti che si trovano all'interno di una regione (un rettangolo di selezione). Ho due serie di coordinate, da cui posso ottenere tutti e quattro i punti rettangolari che formano la casella (se necessario). La mia colonna di dati in questione è denominata "punto" ed è anche di tipo punto.

  • C'è comunque modo di specificare quattro serie di coordinate (lat / long) e ottenere tutti i punti che si trovano all'interno del riquadro.
  • Oppure specifica due punti e lascia che il DB risolva gli angoli del rettangolo e restituisca i punti all'interno

Nel caso in cui non fossi chiaro su ciò che voglio ottenere. L'equivalente con 'vanilla' sql se avessi un campo lat e long anziché un punto sarebbe:

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

MODIFICA AGGIORNATA:

Sto provando la soluzione di underdark. All'inizio non avevo il constatore ST_MakePoint (ora lo faccio) e ricevo ancora un errore molto simile (solo su un carattere diverso).

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

e sto ricevendo questo errore:

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

MODIFICARE:

A breve termine posso risolverlo con:

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

Ma dovrò capire perché nessuna delle funzioni PostGIS non funziona per me.


Il metodo preferito è pubblicare in un solo posto. Se quel luogo è inappropriato o non funziona, può essere facilmente migrato. Non intraprenderò alcuna azione, perché GIS è dove dovrebbe essere la tua domanda, ma ti esorto a eliminare il messaggio incrociato su SO.
whuber

1
@whuber .. fatto.
Ankur,

- seleziona GeometryFromText ('POLYGON ((75 20,80 30,90 22,85 10,75 20))', 4326) - funziona?
Sean,

Non sono sicuro di cosa tu voglia dire. Ho provato diverse varianti di quello che hai detto e non hanno funzionato
Ankur,

Qual è la colonna "punto" a cui fai riferimento in ST_MakePoint (punto)
underdark

Risposte:


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

<- Sostituisci le coordinate se necessario


scusate per la domanda stupida, ma cos'è 'the_geom' ... dovrei alias la query SELECT * FROM myTable e quel valore diventa 'the_geom'
Ankur

Siamo spiacenti, ovviamente è la colonna cercata. Lo chiamerei db_column o qualcosa del genere, ma i documenti di Postgis la pensano diversamente ... ha senso quando sai cos'è.
Ankur,

1
Quando eseguo questo, ricevo un errore che dice che GeometryFromText non esiste. Sto usando Postgis 2.0. Ho anche provato st_geomfromtext.
picardo

@underdark forse mi sbaglio ma sembra che manchi una parentesi.
Davide Pastore,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.