2017-04-07 45 views
0

我正在使用geodjango创建应用程序。
我有一个模型,如下所示:如何在geodjango中获取重叠对象?

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

可以有2个或多个对象,在我的数据库重叠边界。

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

感谢

回答

2

你有2个选择,这取决于你想要达到什么目的:


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

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

使用示例

现在overlapping_mpolys是一个查询集,包含每个WorldBorder对象的mpolyname='a_name'WorldBorder对象的mpoly重叠。


选项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)) 

使用示例