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

Python 如何在geodjango中获取重叠对象?,python,django,gis,postgis,geodjango,Python,Django,Gis,Postgis,Geodjango,我正在使用geodjango创建一个应用程序 我有一个这样的模型: class WorldBorder(models.Model): name = models.CharField(max_length=50) mpoly = models.MultiPolygonField() 我的数据库中可能有2个或更多具有重叠边框的对象 如何确定某些对象的边界是否重叠? 如何获取具有重叠边界的对象查询集 谢谢根据您的目标,您有两个选择: 选项1:您可以使用查找: 使用示例: an_mp

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

class WorldBorder(models.Model):
    name = models.CharField(max_length=50)
    mpoly = models.MultiPolygonField()
我的数据库中可能有2个或更多具有重叠边框的对象

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


谢谢

根据您的目标,您有两个选择:
选项1:您可以使用查找:

使用示例:

an_mpoly = WorldBorder.objects.get(name='a_name').mpoly
overlapping_mpolys = WorldBorder.objects.filter(mpoly__overlaps=an_mpoly)
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))
现在,
overlapping\u-mpoly
是一个查询集,包含每个
WorldBorder
对象,该对象与
WorldBorder
对象的
mpoly
重叠,该对象具有
name='a\u-name'


选项2: 如果需要对象到对象的重叠检查,可以使用以下方法:

使用示例:

an_mpoly = WorldBorder.objects.get(name='a_name').mpoly
overlapping_mpolys = WorldBorder.objects.filter(mpoly__overlaps=an_mpoly)
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))


根据您想要实现的目标,您有两种选择:
选项1:您可以使用查找:

使用示例:

an_mpoly = WorldBorder.objects.get(name='a_name').mpoly
overlapping_mpolys = WorldBorder.objects.filter(mpoly__overlaps=an_mpoly)
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))
现在,
overlapping\u-mpoly
是一个查询集,包含每个
WorldBorder
对象,该对象与
WorldBorder
对象的
mpoly
重叠,该对象具有
name='a\u-name'


选项2: 如果需要对象到对象的重叠检查,可以使用以下方法:

使用示例:

an_mpoly = WorldBorder.objects.get(name='a_name').mpoly
overlapping_mpolys = WorldBorder.objects.filter(mpoly__overlaps=an_mpoly)
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))