Bir koordinat kümesinde yer alan noktaları bulma


9

Bir PostGIS db var ve bazı bölge (sınırlayıcı kutu) içinde yalan noktaları bulmak istiyorum. Kutuyu oluşturan dört dikdörtgen noktanın tümünü (gerekirse) alabileceğim iki koordinat kümesi var. Söz konusu veri sütunuma 'point' adı verildi ve aynı zamanda tip noktası.

  • Dört koordinat seti (enlem / boylam) belirtmek ve kutunun içindeki tüm noktaları almak için yine de var mı?
  • Veya iki nokta belirtin ve DB'nin dikdörtgenin köşelerini çözmesine izin verin ve noktaları

Ne elde etmek istediğim konusunda net olmamam durumunda. Bir nokta yerine lat ve uzun bir alan olsaydı 'vanilya' sql ile eşdeğer:

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

GÜNCELLEME DÜZENLEME:

Underdark'ın çözümünü deniyorum. İlk başta ST_MakePoint yapıcı (şimdi yapıyorum) yoktu ve hala çok benzer bir hata alıyorum (sadece farklı bir karakterde).

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

ve bu hatayı alıyorum:

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

DÜZENLE:

Kısa vadede çözebilirim:

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

Ama PostGIS işlevlerinin hiçbirinin neden benim için çalışmadığını çözmek zorundayım.


Tercih edilen yöntem yalnızca bir yerde yayınlamaktır. Bu yer uygun değilse veya çalışmazsa kolayca taşınabilir. Ben herhangi bir işlem yapmayacağım, çünkü CBS sorunuzun olması gereken yer, ama ben SO çapraz mesaj silmenizi tavsiye ediyorum.
whuber

1
@whuber .. bitti.
Ankur

- GeometryFromText'i seçin ('POLYGON ((75 20,80 30,90 22,85 10,75 20))', 4326) - çalışıyor mu?
Sean

Ne demek istediğinizi tam olarak anlamadım. Söylediklerinizin çeşitli varyasyonlarını denedim ve işe yaramadılar
Ankur

ST_MakePoint'teki (nokta) referansınızdaki "nokta" sütunu nedir
underdark

Yanıtlar:


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

<- koordinatları gerektiği gibi değiştirin


Özür aptal soru için ama ne 'the_geom' ... mıyım diğer adına myTable sorgusu SELECT * gerekiyordu ve bu değer haline gelir 'the_geom'
Ankur

Üzgünüm, elbette aranan sütun. Ben buna db_column ya da bunun gibi bir şey derdim, ama postgis dokümanlar başka türlü düşünüyor ... ne olduğunu bildiğinizde mantıklı.
Ankur

1
Bunu çalıştırdığımda, GeometryFromText yok diyor bir hata alıyorum. Postgis 2.0 kullanıyorum. Ayrıca st_geomfromtext'i de denedim.
picardo

@ yıldırım belki yanılıyorum ama parantez eksik görünüyor.
Davide Pastore

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.