2012-07-03 148 views
1

我遇到了使用PostGIS(1.5.4)數據的問題。這可能是因爲我對這項技術不夠熟悉,看不到明顯的(我是一個擁有近4個小時經驗的普通專家),但我遇到了一個我一直無法用Google解決的錯誤。我有一個表,其中包括Polygon數據(和是的,我檢查;列類型是幾何,而不是多邊形 - Postgres本地類型)。當我嘗試在表上運行查詢以查找哪個形狀包含特定問題時,就會出現問題。PostGIS轉換問題

我使用下面的查詢:

SELECT * 
FROM geo_shape 
WHERE ST_Contains(geoshp_polygon, POINT(-97.4388046000, 38.1112251000)); 

我收到的錯誤是「錯誤:功能st_contains(幾何,點)不存在」。我嘗試使用CAST()函數,但得到'錯誤:不能將類型幾何轉換爲多邊形'。我猜這個問題與數據的存儲方式有關--PGAdmin將其顯示爲十六進制數據。我嘗試使用ST_GeomFromHEXEWKB()只是一個預感,但收到'錯誤:函數st_geomfromhexewkb(幾何)不存在'。

我很困惑這個問題是什麼,所以任何想法都將非常感激。

回答

2

st_contains需要GEOM,GEOM作爲參數...

試試這個...

SELECT * FROM geo_shape 
WHERE ST_Contains(geoshp_polygon, 
     GeomFromText('POINT(-97.4388046000 38.1112251000)')); 

Editted改正,問題點的數據。 ST_geomfromtext會起作用,有點好奇它有什麼不同

+0

兩個問題:你的意思是'ST_GeomFromText',並且你有一個分析錯誤 - 無效的幾何體。 –

+0

這實際上適用於我 - 分析錯誤來自POINT數據中的逗號,並且出於某種原因,該函數可以在前面或前面使用ST_。謝謝! – Crash

2

你不能將PostgreSQL的geometric data types與PostGIS的幾何類型混合在一起,這就是爲什麼你會看到這個錯誤。我建議使用的PostGIS's geometry contstructors一個助陣:

SELECT * 
FROM geo_shape 
WHERE ST_Contains(geoshp_polygon, 
        ST_SetSRID(ST_MakePoint(-97.4388046000, 38.1112251000),4326); 

還是一個非常快速的文本的方法是拼湊well-known text

SELECT 'SRID=4326;POINT(-97.4388046000 38.1112251000)'::geometry AS geom; 

(這將輸出WKB的幾何類型)。

+0

出於某種原因,這不斷給我一個錯誤,指出'在兩個具有不同SRID的幾何圖形上操作'。不知道這是因爲'geometry_columns'表不正確或什麼。 – Crash

+0

這是一個有用的錯誤,因爲您的空間參考(SRID)必須匹配。在'geometry_columns'表中找到'geo_shape.geoshp_polygon'的SRID,或者使用[ST_SRID](http://postgis.refractions.net/docs/ST_SRID.html)直接查詢。如果您需要從一個空間參考轉換到另一個空間參考(例如,WGS84到NAD83 UTM10N),則使用[ST_Transform](http://postgis.refractions.net/docs/ST_Transform.html)。 –