python postgis ST_Contains неудачный запрос - PullRequest
3 голосов
/ 15 декабря 2011

Я пробовал следующее, но всегда терпел неудачу,

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 тоже не особо полезен .. Кто-нибудь может увидеть, что что-то идет не так? Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 23 декабря 2011

Это было связано с операторами Python.Я ввел все аргументы sql, используя оператор python%, и он работал.Например,

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 голосов
/ 16 декабря 2011

может быть простым ответом ... st_contains возвращает 't', а не 'true'.Postgres чувствителен к кепке, убедитесь, что не T

...