거리

2016-10-13 7 views
1

나는 다음과 같은 문제가있다 :거리

당신이 볼 수 있듯이
SRID=3857;POINT Z (62780.8532226825 5415035.177460473 100) 
SRID=3857;POINT Z (62785.8532226825 5415035.177460473 70) 

,이 X 좌표 5m의 차이이며, :
나는 예를 들어, 두 점을 생성 Z 좌표에서 30m. django 셸에서 a.distance(b)을 실행하면 이 반환됩니다. 잘못된 것입니다. psql의 쉘에서 실행 whenIi

그러나 :

SELECT ST_3DDistance(a.coordinates, b.coordinates) 
FROM restapi_entityxyz a, restapi_entityxyz b 
WHERE a.external_id='6841zef1561' AND b.external_id='1G23Fzd'; 

이 반환 정답이다

st_3ddistance 
------------------ 
30.4138126514911 

합니다.

geodjango에 버그가 있거나 버그가 있습니까?
이러한 계산을 수행하려면 사용자 지정 라이브러리를 사용해야합니까?

내 환경은 다음과 같다 :

  • 파이썬 3.5,
  • 장고,
  • PostgreSQL의 9.4 + PostGIS와
  • GDAL 및 파이썬 라이브러리를 많이
  • .
+0

나는 익숙하지 않다 geodjango를 사용하지만 버그 또는 기능 부족 일 수 있습니다.'psycopg2','aiopg' 또는'asyncpg'를 직접 사용하는 것은 어떨까요? – shongololo

+0

안녕하세요, @ GwydionFR 궁금 해서요, 제 대답이 도움이 되었습니까? –

+0

안녕하세요 @ 존 마우 타 피스, 나는이 프로젝트에서 더 이상 일할 수 없으므로 관련이 없습니다. 그러나 저에게는이 일을위한 기능이 있어야합니다. 개발자로서 나는 단순한 유클리드 거리라고 할지라도 내부 처리를 모른 채 이러한 종류의 계산법을 사용하기를 원합니다. – GwydionFR

답변

1

django 거리 방법은 3D 점 (높이 포함)의 거리를 계산하는 것이 아니라 2D를 계산하는 방법입니다. Calculating distance between two points using latitude longitude and altitude (elevation)

  • 합시다 :

    우리는 하나가 여기에 설명 된 것처럼, 사용자 정의 차원 거리 계산 방법을 만들어 것을 해결할 수
    polar_point_1 = (long_1, lat_1, alt_1)

    polar_point_2 = (long_2, lat_2, alt_2)

  • 각 점을 직교 좌표로 변환합니다. 이 공식을 이용하여 uivalent :

    x = alt * cos(lat) * sin(long) 
    y = alt * sin(lat) 
    z = alt * cos(lat) * cos(long) 
    

    당신은 각각 p_1 = (x_1, y_1, z_1)p_2 = (x_2, y_2, z_2) 포인트가됩니다.

  • 마지막으로 유클리드 공식을 사용

    dist = sqrt((x_2-x_1)**2 + (y_2-y_1)**2 + (z_2-z_1)**2) 
    


여기 내 대답의 두 번째 부분에서 유사한 문제의 확인 된 솔루션 : 3d distance calculations with GeoDjango