如何在 geodjango 中获取重叠对象?

How to get overlapping objects in geodjango?

我正在使用 geodjango 创建一个应用程序。
我有一个这样的模型:

class WorldBorder(models.Model):
    name = models.CharField(max_length=50)
    mpoly = models.MultiPolygonField()

我的数据库中可能有 2 个或更多具有重叠边框的对象。

如何确定某些对象是否具有重叠边框?
如何获取具有重叠边界的对象的查询集?

谢谢

您有 2 个选项,具体取决于您想要实现的目标:


选项 1: 您可以使用 __overlaps 查找:

使用示例:

an_mpoly = WorldBorder.objects.get(name='a_name').mpoly
overlapping_mpolys = WorldBorder.objects.filter(mpoly__overlaps=an_mpoly)

现在 overlapping_mpolys 是一个查询集,包含 mpoly 与具有 [=18= 的 WorldBorder 对象的 mpoly 重叠的每个 WorldBorder 对象].


选项 2: 如果您需要 object to object 重叠检查,您可以使用 GEOS API overlaps 方法:

使用示例:

mpoly_1 = WorldBorder.objects.get(name='name_1').mpoly
mpoly_2 = WorldBorder.objects.get(name='name_2').mpoly

if mpoly_1.overlaps(mpoly_2):
    print("{} and {} are overlapping".format(mpoly_1, mpoly_2))