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


person Antony    schedule 15.12.2011    source источник


Ответы (2)


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

person Twelfth    schedule 15.12.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.

person Antony    schedule 23.12.2011