2014-02-12 24 views
0

我想找出一個點是否在圓內或不使用PostgreSQL的圓內。 多邊形內的點,我用下面的查詢。我也需要一些等效的圈子查詢。點是PostgreSQL的

SELECT a 
FROM a_table 
WHERE 
ST_within(a::geometry,ST_GeomFromText('Polygon((50 -80.98 , 20.99 -90.99 , 90.98 -99.99 , 50 -80.98))')); 

的圈子,我想這下面的查詢:

SELECT a 
FROM a_table 
WHERE 
ST_within(a::geometry,ST_GeomFromText('POINT(10 20)',10)); 

SELECT a 
FROM a_table 
WHERE 
ST_within(a::geometry,ST_GeomFromText('circle((10 20),10)')); 

但是這兩個給象這樣的錯誤:

ERROR: parse error - invalid geometry 
SQL state: XX000 
Hint: "714" <-- parse error at position 4 within geometry 

ERROR: parse error - invalid geometry 
SQL state: XX000 
Hint: "ci" <-- parse error at position 2 within geometry 
+0

它不清楚您是否使用了PostGIS的幾何形狀或PostgreSQL的幾何形狀。他們是非常不同的,不能混合。此外,以搜索一個點是否是另一個的半徑範圍內,用[ST_DWithin](http://postgis.net/docs/ST_DWithin.html)來指定的距離。 –

回答

3
select a 
from a_table 
where a <@ circle '((10, 20),10))'; 

Geometric Functions

select point '(1,1)' <@ circle '((0,0), 1)'; 
?column? 
---------- 
f 

select point '(1,1)' <@ circle '((0,0), 1.5)'; 
?column? 
---------- 
t 
+0

在我的查詢是PostgreSQL類型「點」的列名。並且您的查詢也不起作用。 – virtual

+0

@hina它錯過了一個逗號。請再試一次 –

+0

你確定,關於這個查詢,爲什麼我們使用<@,請你詳細說明這個查詢在postgresql中是如何工作的 – virtual