Django PostgreSQL PostGIS 空间查询不正确

3

我有以下模型:

class Item(Model):
    lat_lng = PointField(geography=True, null=True)

Item.objects.create(lat_lng=Point(-95.864468, 36.075450))
bbox1 = (-168.3984375, 25.16517336866393, -52.03125, 75.32002523220804)
bbox2 = (-145.1953125, 25.16517336866393, -52.03125, 63.07486569058663)
bbox1 包含 bbox2, 但是 Item.objects.filter(lat_lng__coveredby=Polygon.from_bbox(bbox1)) 没有返回物品,而 Item.objects.filter(lat_lng__coveredby=Polygon.from_bbox(bbox2)) 返回了物品。

我是否漏掉了什么?

更新:

如果我移除了 geographic=True,那么一切都正常了。这个标志代表什么?

1个回答

1
使用geography时,使用大圆弧而不是直线。这仍然适用于连接边界框角的线。
假设box1包含box2是错误的。它们可能相交,但一个不完全包含另一个。
Box1比Box2更宽,因此其南部边界(表示为大圆弧)将向北超过Box2边界,因此该点位于Box1南侧但在Box2内。

所以,我需要在检查距离和coveredby时使用geography=False吗? - Paul R
不一定要选择......这个决定取决于您的数据和目标。您只需要了解大圆弧与直线之间的差异,它们都有各自的用途。您可以搜索“几何与地理”以获取更多信息。 - JGH
如果我有一个边界框和一个纬度-经度点,如何检查该点是否在圆内? - Paul R
https://docs.djangoproject.com/en/3.1/ref/contrib/gis/ - JGH
如果不是为了纬度/经度,我就无法理解什么情况下会使用geography=True? - Paul R
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接