我正在使用 Spatialite 和 GeoAlchemy2 ORM 并尝试识别给定点所属的邻域。
我的社区存储为从 GeoJSON 文件转换而来的
我已将我的点存储为 EWK(它们现在是字符串,但当我通过测试时,它们将是数据库中的 EWK)。
我并没有真正看到任何有意义的结果,所以我在这里拉扯我的头发。
from geoalchemy2.functions import ST_Contains, ST_Within
from sqlalchemy import select
from app import app, db
from app.models import Neighbourhood
point = 'Point (-79.3438 43.7377)'
with app.app_context():
query = select(Neighbourhood.name).where(ST_Within(Neighbourhood.geometry, point))
results = db.session.scalars(query).all()
上面是我正在尝试运行的一个小示例。奇怪的是 ST_Contains 的值返回 -1,而不是预期的布尔值。
这个形状存在于我的数据库中,应该是返回值,但它似乎不起作用。
注意 - 我已经尝试了我的点中纬度/经度的每种组合以及 ST_Within 与 ST_Contains,并交换了几何图形和点的顺序。如果上面他们错了,那是因为我的大脑现在已经烧焦了,我不知道发生了什么。 :(
任何帮助将不胜感激。我在这里旋转轮胎。
所以我最终解决了这个问题。这是一个非常基本的修复...我最终不得不在查询本身中使用 ST_Point 来投射我的观点。
lon = -79.3808706120814
lat = 43.681118858992335
pnt = ST_Point(lon,lat)
with app.app_context():
query = select(Neighbourhood.name).filter(func.ST_Contains(Neighbourhood.geometry,pnt))
results = db.session.scalars(query).all()
results