使用 GeoAlchemy2 和 Spatialite 比较点和多边形/多边形时,ST_Contains 和 ST_Within 返回 -1 值

问题描述 投票:0回答:1

我正在使用 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,而不是预期的布尔值。

https://github.com/whosonfirst-data/whosonfirst-data-admin-ca/blob/d2ebb5f61dc8b6384a01c93e69aa50000dceb153/data/858/952/13/85895213-alt-quattroshapes.geojson

这个形状存在于我的数据库中,应该是返回值,但它似乎不起作用。

注意 - 我已经尝试了我的点中纬度/经度的每种组合以及 ST_Within 与 ST_Contains,并交换了几何图形和点的顺序。如果上面他们错了,那是因为我的大脑现在已经烧焦了,我不知道发生了什么。 :(

任何帮助将不胜感激。我在这里旋转轮胎。

postgis spatialite geoalchemy2
1个回答
0
投票

所以我最终解决了这个问题。这是一个非常基本的修复...我最终不得不在查询本身中使用 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
© www.soinside.com 2019 - 2024. All rights reserved.