2 votos

ST_MakeLine no devuelve los valores de latitud/longitud correctos

Tengo una tabla con valores de latitud, longitud y geom:

 index |         longitude         |         latitude          |                        geom                        | cluster_id 
-------+---------------------------+---------------------------+----------------------------------------------------+------------
 18002 | 10.5185737487922670000000 | 52.2491934541062800000000 | 0101000020110F00000CCD0946EADD3141FD8A5F36DF1C5A41 |          1
 19088 | 10.5185833538704580000000 | 52.2492122543443860000000 | 0101000020110F00002A04C357EBDD314170632611E01C5A41 |          1
 20256 | 10.5185842237361060000000 | 52.2492442532568550000000 | 0101000020110F000058108D70EBDD3141FECB8485E11C5A41 |          1
  9420 | 10.5185872545577310000000 | 52.2492660247580400000000 | 0101000020110F00003139ECC6EBDD31417342DF82E21C5A41 |          1

He calculado mi columna geom así:

UPDATE coordinates SET geom = ST_Transform(ST_SetSRID(ST_MakePoint(longitude, latitude), 4326), 3857)

Calculo el cluster_id en mi script python utilizando un algoritmo de clustering (DBSCAN).

Estoy intentando hacer una LineString dentro de clusters, usando esta consulta:

SELECT ST_AsGeoJSON(ST_MakeLine(v.geom)) FROM (SELECT geom FROM vehicle_coordinates WHERE cluster_id = 1) as v;

Un ejemplo de resultado de la consulta es: [[1173235.91018827,6845036.84972168],[1173242.1166575,6845037.7691405],[1173248.6137255,6845039.6218353],[1173253.66564705,6845041.21341728]]

Obviamente, esto no tiene sentido, ya que deberían ser coordenadas GPS válidas. No estoy seguro de lo que estoy haciendo mal.

3voto

Jay Bazuzi Puntos 194

Esto:

UPDATE coordinates 
 SET geom = ST_Transform(
             ST_SetSRID(
               ST_MakePoint(longitude, latitude),
               4326
               ),
             3857
            )

está transformando tus coordenadas lat-long en las dos columnas en una geometría en SRID 3857, que no es grados lat-long - es un sistema cartesiano utilizado por Google Maps (y otros sistemas de mapas web) y es aproximadamente una medida en metros.

Esto es lo que probablemente desee para un algoritmo de agrupación, por lo que sus distancias están en metros. Para volver a lat-long, transforma tu geometría a SRID 4326. I piense en

update coordinate set geom = st_transform(geom, 4326);

puede si no, es fácil encontrar ayuda sobre la transformación de sistemas de coordenadas PostGIS.

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