Temukan poin yang terletak di dalam satu set koordinat


9

Saya memiliki dB PostGIS, dan saya ingin menemukan titik-titik yang terletak di dalam suatu wilayah (kotak pembatas). Saya memiliki dua set koordinat, dari mana saya bisa mendapatkan keempat titik persegi panjang yang membentuk kotak (jika perlu). Kolom data saya yang dimaksud bernama 'point' dan juga tipe point.

  • Apakah ada untuk menetapkan empat set koordinat (lat / long) dan mendapatkan semua poin yang ada di dalam kotak.
  • Atau tentukan dua poin dan biarkan DB menentukan sudut-sudut persegi panjang, dan kembalikan poin di dalamnya

Kalau-kalau saya tidak jelas apa yang ingin saya capai. Setara dengan 'vanilla' sql jika saya memiliki bidang lat dan panjang bukannya titik:

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

EDIT DIPERBARUI:

Saya mencoba solusi underdark. Pada awalnya saya tidak memiliki constuctor ST_MakePoint (sekarang saya lakukan) dan saya masih mendapatkan kesalahan yang sangat mirip (hanya pada karakter yang berbeda).

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

dan saya mendapatkan kesalahan ini:

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

EDIT:

Dalam jangka pendek saya bisa menyelesaikannya dengan:

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

Tetapi saya harus mencari tahu mengapa tidak ada fungsi PostGIS yang tidak berfungsi untuk saya.


Metode yang disukai adalah memposting di satu tempat saja. Jika tempat itu tidak pantas atau tidak berfungsi, ia dapat dengan mudah dimigrasikan. Saya tidak akan mengambil tindakan apa pun, karena GIS adalah tempat pertanyaan Anda seharusnya, tetapi saya akan mendorong Anda untuk menghapus postingan silang pada SO.
whuber

1
@whuber .. selesai.
Ankur

Apakah - pilih GeometryFromText ('POLYGON ((75 20,80 30,90 22,85 10,75 20))', 4326) - berfungsi?
Sean

Saya tidak yakin apa yang Anda maksud. Saya mencoba berbagai variasi yang berbeda dari apa yang Anda katakan dan mereka tidak berhasil
Ankur

Apa kolom "titik" yang menjadi referensi Anda di ST_MakePoint (titik)
underdark

Jawaban:


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

<- ganti koordinat seperlunya


maaf untuk pertanyaan bodoh, tapi apa itu 'the_geom' ... apakah saya seharusnya alias SELECT * FROM myTable query dan apakah nilai itu menjadi 'the_geom'
Ankur

Maaf, tentu saja kolom itu sedang dicari. Saya akan menyebutnya db_column atau sesuatu seperti itu, tetapi postgis docs berpikir sebaliknya ... masuk akal ketika Anda tahu apa itu.
Ankur

1
Ketika saya menjalankan ini, saya mendapatkan kesalahan yang mengatakan GeometryFromText tidak ada. Saya menggunakan postgis 2.0. Saya juga mencoba st_geomfromtext.
picardo

@underdark mungkin saya salah tetapi tampaknya tanda kurung hilang.
Davide Pastore

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.