如何在 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))
我正在使用 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))