2016-12-03 16 views
3

를 필터링 내 models.py이 필드가 사용자 및 비즈니스 모델이 있습니다GeoDjango & SpatiaLite은 - 가까운 물체

location = PointField(geography=True) 

을 나는 주소 지오 코딩 서비스를 통해 (EPSG 4326에) Google지도 좌표를 얻고있는 사용자가 지정합니다.
그런 다음 위 필드에 저장합니다 (EPSG 4326).

자, 내가 원하는 것은 사용자의 위치를 ​​기반으로, (예를 들어 1km의) 특정 반경 내의 모든 비즈니스 개체를 얻을 수 있습니다 :

Business.gis.filter(location__distance_lt=(request.user.location, D(km=1))) 

그러나이 작동하지 않습니다,이 나에게 준다 오류 :

그래서이 문제를 올바르게 해결하는 방법을 알고 있습니까? 미리 감사드립니다!

+0

. 그건 그렇게 정확하지는 않지만 저의 경우에는 문제가되지 않습니다. – MikiSoft

+0

안녕하세요 @MikiSoft, 좀 늦은 답변을 올렸습니다. 한번보세요. –

+0

@JohnMoutafis 이봐 요, 내가 전에 설명한 방식으로 오랜 시간 전에 풀었지만, 해결책으로 당신의 노력을 고맙게 여기기 시작했습니다. :) – MikiSoft

답변

0

이론 :

이 그 두 관련이 꽤 모호한 오류는 다음과 같습니다

당신이 측지 등 (좌표계를 사용하고 있기 때문에 EPSG 4326)해야합니다. 거리를도 단위로 제공하십시오. How do I convert kilometres to degrees in Geodjango/GEOS?

마지막으로 나는 dwithin를 사용하는 것이 좋습니다 것입니다 :

여기에 충분히 정확하게도까지 km를 변환하는 방법에 대한 아주 좋은 설명입니다.


문제 요는 :

  • 1km ~= 0.008 deg
  • 지금 쿼리가 보일 것입니다 : 나는 쿼리를 수행하기 전에 예측 시스템으로 변환에 의존

    Business.gis.filter(location__dwithin=(request.user.location, 0.008))