對我有以下簡單的表:SQL查詢點在多邊形使用PostgreSQL
CREATE TABLE tbl_test
(
id serial NOT NULL,
poly polygon NOT NULL
)
WITH (OIDS=FALSE);
然後我嘗試插入一行多邊形:
insert into tbl_test values(1, PolyFromText('POLYGON((0 0, 10 10, 10 0, 0 0))'))
碰上這個錯誤:
column "poly" is of type polygon but expression is of type geometry
這是跛腳。所以我的第一個問題是:
- 我是否真的必須施放?
無論如何,鑄造後它的工作原理。現在我試圖做一個簡單的ST_Contains查詢:
select id, poly from tbl_test where ST_Contains(poly, Point(GeomFromText('POINT(9 2)')))
這給錯誤:
ERROR: function st_contains(polygon, point) does not exist
LINE 1: select id, poly from tbl_test where ST_Contains(poly, Point(...
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
那我該怎麼辦?
以下工作:
select st_contains(st_geomfromtext('POLYGON((0 0, 10 10, 10 0, 0 0))'), st_geomfromtext('POINT(0 0)'))
但是,這可能是因爲這兩個參數的數據類型的幾何形狀。對錶格數據的實際查詢不起作用。
答:
土井!問題是我創建的數據庫不是基於postgis模板數據庫(因此沒有相關的函數和幾何列表等)。 最後,我只想說PostGIS要求您將數百個函數,行和幾張表添加到您的數據庫中,這樣您才能擁有GIS支持是完全跛腳的。它使模式的備份變得複雜得多,而且非常容易出錯(如果你忽略調用AddGeometryColumn並且只是自己添加一個幾何列)那麼天堂禁止。
如果在聚合物中聚合,爲什麼不用你想要找到的點來製作一個「1角」多邊形? – 2009-06-18 13:01:54
我不確定postgres支持1點的多邊形。此外,這是一個問題的解決方法,我不知道是否存在.. – 2009-06-18 13:05:35