5 votos

Conjunto de datos de la red de rutas marítimas

Ahora estoy trabajando en un sistema para realizar el enrutamiento en una red de rutas marítimas. Ver este conjunto de datos que tengo como base: http://geocommons.com/maps/109850 Tengo postgres y pgrouting en funcionamiento y he podido ejecutar consultas básicas sobre el conjunto de datos anterior después de importarlo a postgres/postgis. Sin embargo, me he encontrado con algunos problemas para los que solicito vuestro consejo.

  1. Muchas líneas tienen un duplicado, así que digamos que la línea A va de la ID de origen 1 a la ID de origen 2 y la línea B va de la ID de origen 2 a la ID de origen 1 y se solapan completamente. Esto se puede experimentar muchas veces, y francamente, estaría feliz de deshacerse de ellos para que finalmente pudiera tener una red con una sola polilínea por dirección.

  2. He descubierto que los atributos de valor de distancia del conjunto de datos referenciado son falsos. Me di cuenta de esto cuando comprobé el conjunto de datos con Global Mapper utilizando la herramienta de información. En la ventana que aparece, se puede ver el cuadro de texto de la geometría con los datos de los límites y la longitud. En una línea que inspeccioné aparecía un valor de longitud de 5300 algunos kilómetros mientras que el valor máximo en la columna de longitud del conjunto de datos era de 110. Busco una manera de adquirir esos valores de longitud de la polilínea, y asignarlos a una nueva columna de atributos. Ya he encontrado posts sobre cómo hacer esto en qgis y arcgis, pero ninguno de ellos proporcionó los resultados que quería obtener. El conjunto de datos de la ruta está en WGS84, latlon

¡Espero que las líneas anteriores tengan sentido, y agradezco cualquier ayuda! ¡Gracias de antemano!

Tamas

6voto

Symmetric Puntos 158

El primer paso para eliminar la geometría duplicada es ejecutar una consulta como ésta:

DELETE FROM lanes WHERE lanes.gid < (SELECT MAX(l.gid) FROM lanes As l WHERE l.the_geom && lanes.the_geom AND ST_Equals(lanes.the_geom, l.the_geom));

Cuando ejecuto eso en el mismo conjunto de datos que tú, elimina 1984 geometrías. También se podrían eliminar las geometrías que tienen campos iguales desde/hasta, pero yo no lo hice porque podría haber más de una ruta válida entre nodos, por ejemplo si hay restricciones de profundidad debido a bancos de arena o naufragios.

En cuanto a la length es la longitud en grados. Ahora bien, esto no tiene ningún sentido porque los grados no son una medida de longitud, sino de separación angular. Así que para calcular la longitud en metros sobre el esferoide WGS84, puedes utilizar:

SELECT "Length0" as degrees, ST_Length2D_Spheroid(the_geom, 'SPHEROID["WGS84",6378137,298.257223563]') as metres FROM lanes WHERE gid = 4512;

Que devuelve la longitud para una ruta transatlántica:

 degrees |      metres
---------+------------------
  77.946 | 6571424.23409884

He añadido una columna adicional y he calculado la longitud utilizando el ST_Length2D_Spheroid() función:

ALTER TABLE lanes ADD COLUMN length_m integer;
UPDATE lanes SET length_m = ROUND(ST_Length2D_Spheroid(the_geom, 'SPHEROID["WGS84",6378137,298.257223563]'));

Aquí he redondeado al metro más cercano, pero no hay razón para no guardarlos como double precision en caso de necesitar una precisión de micras.

Además, la cuadrícula regular de 10 grados que cubre la mayor parte del globo no necesariamente devuelve la ruta más corta, ya que no son líneas ortogonales, sino líneas de rumbo. Dicho esto, los navegantes utilizan a veces las líneas de rumbo para facilitar su trazado en una carta, aunque el GPS suele eliminar esta necesidad hoy en día.

Además, tendrás problemas si quieres cruzar la línea internacional de la fecha porque no hay conexión topológica entre los nodos de ambos lados del mapa. Esta es un área de la que no sé mucho, pero es posible que desee consultar los nodos coincidentes y añadir líneas con 0 en el length_m columna que une los dos nodos.

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