2 votos

Diferencia entre los grados de acimut cuando uso st_project en postgis

difference degrees

Tengo dos puntos p1 y p2.

 SELECT ST_GeomFromText('POINT(92.78488163381019 55.9757874622428)',  4326) as p1,
        ST_GeomFromText('POINT(92.78482645521103 55.97564239375992)', 4326) as p2

grado entre los puntos iguales a 200,824 y distancia entre los puntos es igual a 16,492

SELECT degrees(ST_Azimuth(p1, p2)) as degree,
       ST_Distance_Sphere(p1, p2)  as distance</code></pre>

Pero tengo un grado diferente cuando uso st_Project con estos argumentos:

SELECT degrees(ST_Azimuth(p1, _p2)),
       ST_Distance_Sphere(p1, p2)
FROM (
  SELECT (ST_Project(p1, distance, radians(degree))::geometry as _p2 FROM ...
)

Vuelve:

  st_distance_sphere  ||       degrees
======================||====================
  16.4661410575154    ||  214.150581571718

La diferencia de distancia entre (p1,p2) y (p1,_p2) sólo cambia en 0,02 metros. Pero el grado cambia en 13 grados.

¿Por qué los títulos no son iguales entre sí?

2voto

Markissimo Puntos 410

La culpa es mía. Como dijo Paul Ramsey, utilizo la mezcla de tipos de geografía y geometría al mismo tiempo.

Para resolver esto transformo todos los puntos a geometría (con srid 3576) y en lugar de ST_Project uso ST_Translate( p1, sin(radianes(grados))*distancia1, cos(radianes(grados))*distancia1)

Mi código final es:

SELECT distance1,
       ST_Distance( p1, _p2) as distance2
       degree1,
       degrees(ST_Azimuth( p1, _p2)) as degree2
FROM 
(SELECT p1, p2, distance1, degree1, ST_Translate( p1, sin(radians(degree1))*distance1, cos(radians(degree1))*distance1) as _p2 FROM
  (SELECT p1, p2, ST_Distance(p1, p2) as distance1, degrees(ST_Azimuth(p1, p2)) as degree1 FROM
    (SELECT ST_Transform(ST_GeomFromText('POINT(92.78488163381019 55.9757874622428)', 4326), 3576) as p1, ST_Transform(ST_GeomFromText('POINT(92.78482645521103 55.97564239375992)', 4326),3576) as p2
    ) as points
  ) as foo
) as bar

Resultado: distancia1 == distancia2 y grado1 == grado2

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X