2011-12-15 48 views
3

我一直在嘗試以下,但總是失敗,蟒蛇PostGIS的ST_Contains未能查詢

roomTypeSQL = "SELECT spftype FROM cameron_toll_spatialfeatures WHERE ST_Contains(ST_GeomFromText(%s), ST_geomFromWKB(geometry)) = 'True';" 
roomTypeData = (pointTested) # "POINT(-3.164005 55.926378)" 
.execute(roomTypeSQL, roomTypeData) 

我想從我的表,該表包含特定點的多邊形。我也試過ST_Within,這也失敗了。我認爲我的問題與點和多邊形的格式有關,但是我嘗試了幾乎所有的組合,而且沒有任何工作。我試圖定義我的多邊形,它的工作,但我必須做一個從數據庫的多邊形。我的postgresql日誌文件也不是特別有用.. 任何人都可以看到任何錯誤? 在此先感謝!

回答

0

這與Python操作符有關。我正確輸入了所有使用python%操作符的sql參數,並且它工作正常。像這樣,

roomTypeSQL = "SELECT spftype FROM cameron_toll_spatialfeatures WHERE ST_Contains(ST_GeomFromText(%s),ST_geomFromWKB(geometry))=%s;" 

roomTypeData = (pointTested,'t') # "POINT(-3.164005 55.926378)" 

.execute(roomTypeSQL, roomTypeData) 

python操作符有時可能會非常令人沮喪。它並不總是按預期工作。我有一些SQL命令的例子,我不得不直接在SQL命令中放置參數。儘管在Python文檔中不可取,但此方法仍可行。

0

可能是一個簡單的答案... st_contains返回't'而不是'true'。 Postgres是敏感的,確保不是T