포인트와 직사각형이 실제 경도와 위도를 기반으로하는 직사각형 내에있는 모든 점을 반환하는 쿼리를 실행하고 싶습니다. Geoalchemy2 & ST_Within - 점과 다각형 사이의 유형이 일치하지 않습니까?
이
실패 쿼리입니다 :results = session.query(Store.id).filter(func.ST_Within(Store.location, func.ST_GeomFromEWKT('SRID=4326;POLYGON((150 -33, 152 -33, 152 -31, 150 -31, 150 -33))')))
그것은 불평없이 실행되지만) (results.first 호출 할 때, 나는 다음과 같은 오류 및 경고 참조 :
sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) function st_within(geography, geometry) does not exist LINE 3: WHERE ST_Within(store.location, ST_GeomFromEWKT('SRID=4326;P... ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. [SQL: 'SELECT store.id AS store_id \nFROM store \nWHERE ST_Within(store.location, ST_GeomFromEWKT(%(ST_GeomFromEWKT_1)s )) \n LIMIT %(param_1)s'] [parameters: {'ST_GeomFromEWKT_1': 'SRID=4326;POLYGON((150 -33, 152 -33, 152 -31, 150 -31, 150 -33))', 'param_1': 1}]
내가 할 수 그러나 쿼리는 쿼리에 더미 포인트를 만들어서 (모든 저장소가 일치하도록 만듭니다) :
results = session.query(Store.id).filter(func.ST_Within(func.ST_GeomFromEWKT('SRID=4326;POINT(151 -32)'), func.ST_GeomFromEWKT('SRID=4326;POLYGON((150 -33, 152 -33, 152 -31, 150 -31, 150 -33))')))
이것은 문제가 내 Store.location 필드임을 나타내지 만, [type_coerce (Store.location, Geoography)를 포함하여] 아무 것도 시도하지 않았습니다.
이이 위치 열의 내 SQLAlchemy의 정의입니다 :
location = Column(Geography(geometry_type='POINT', srid=4326))
이 나는 위치에 경도 & 위도를 설정하는 실행 코드 (그리고 나는 또한 func.ST_GeomFromEWKT를 사용 해봤이다() 강요하는 유형) :
stores = session.query(Store)
for store in stores:
store.location = 'SRID=4326;POINT({} {})'.format(store.longitude, store.latitude)
session.commit()
파이썬은 Store.location의 유형은 'geoalchemy2.elements.WKBElement가'나는 문서에서 기대할 수있는 것 인 것을 알려줍니다.
누구든지 검색어를 수정하는 방법에 대한 제안 사항이 있습니까?
참고내가 실행 해요 :
- 의 PostgreSQL 9.6.1
- psycopg2 2.6.2
- SQLAlchemy의 1.1.4 및
- Geoalchemy2 0.4.0