2015-01-08 2 views
3

멀티 폴리곤 필드 preferences.locations과 포인트 필드 rental.location이 있습니다. 대여 위치가 preferences.locations에 포함되어 있는지 확인하기 위해 쿼리 할 때 rental.locationpreferences.locations MultiPolygon의 첫 번째 다각형에 포함되어있는 경우에만 쿼리가 성공합니다. 이러한 형상으로, 예를 들어다중 다각형에 GeoDjango의 포인트가 포함되어 있는지 확인하십시오.

:

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 의해 렌털의 위치를 ​​포함하는 확인 쿼리 만 제 대여 반환된다. 나는 성공적으로 대여의 위치가 preferences.locations (그들이에 포함하고 다각형에 상관없이)에 포함되는 확인할 수 있습니다 방법

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

.

답변

7

Point가 MultiPolygon에 포함되어 있는지 확인하는 올바른 방법은 point.intersects(multipolygon)을 사용하는 것입니다.

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

고맙습니다! 구별에 혼란 스럽습니다. 왜 포인트가 포함되어 있지 않고 교차합니까? – mccc

+0

자세한 내용은이 답변을 확인하십시오. http://gis.stackexchange.com/a/108536 – yndolok

관련 문제