检查多面体是否包含GeoDjango中的点

时间:2015-01-08 21:26:30

标签: gis postgis geodjango

我有一个MultiPolygon字段preferences.locations和一个点字段rental.location。查询以检查租约的位置是否包含在preferences.locations中时,只有rental.location MultiPolygon中的第一个多边形包含preferences.locations时,查询才会成功。

例如,使用以下几何:

point1 = (81.20141954209073, -129.891357421875)
point2 = (40.70875101828792, -73.93179774284363)

preferences.locations = MultiPolygon(
    Polygon(((81.14748070499664, -163.289794921875),

              point1, # contains the first point

              (81.14748070499664, -163.289794921875),
              (81.14748070499664, -163.289794921875),)),

    Polygon(((40.70718949655447, -73.98123621940613),

              point2, # contains the second point

              (40.683762276904055, -73.99702906608582),
              (40.70718949655447, -73.98123621940613),)),
)

rental1.location = Point(*point1)

rental2.location = Point(*point2)

在查询preferences.locations包含哪些租借位置时,如果同时退回两个租借地点,则仅返回第一个租借。

>>> Rental.objects.filter(location__contained=preferences.locations)
[<Rental: Rental object>] # rental1

如何成功检查preferences.locations包含哪些租借位置(无论它们包含哪个多边形)。

1 个答案:

答案 0 :(得分:8)

检查MultiPolygon是否包含Point的正确方法是使用point.intersects(multipolygon)

>>> Rental.objects.filter(location__intersects=preferences.locations)
[<Rental: Rental object>, <Rental: Rental object>]