Tengo 50 3d linestrings en base de datos postgis, y necesito agregar columna de longitud así que pude usar pgRouting para calcular la ruta más corta con Dijkstra. ¿Cómo puedo añadirlo?
Respuestas
¿Demasiados anuncios?Para geometrías 3D, usted querrá usar ST_Length3D() (lista de funciones en 3D).
Con sólo 50 geometrías, usted puede calcular fácilmente los valores de longitud sobre la marcha. De esa manera usted no necesita añadir la longitud de la columna de antemano. Sólo uso ST_Length3D(the_geom) como un valor de costo.
Si desea agregar una columna, usted tendrá que agregar primero la columna y, a continuación, actualizar sus valores mediante la función length.
Me gustaría ir con una vista.
Solo tienes que:
CREATE OR REPLACE VIEW lines_with_length AS
SELECT
*,
ST_Length3D(the_geom) as "length"
FROM lines
EDITAR:
bien, ¿por qué con un punto de vista?
A) esquema de la alteración. Que no rompa las aplicaciones (lo más probable es que la adición de una columna para no romper nada, pero siempre hay una oportunidad)
B) usted no tiene que mantener la columna a ti mismo. Después de un par de semanas o un par de cambios a la tabla de Djikstra de enrutamiento para comenzar a dar resultados equivocados, debido a que el campo de Longitud sería obsoleta. La vista es el más cuerdo camino a tomar, ya que "automágicamente" actualización de la longitud de la columna.
EDITAR
comprobar si esto funciona
select st_length3d(st_geomfromtext('LINESTRING(0 0 0, 1 1 1)'))
1.73205080756888
también, yo he añadido extra " en la definición de columna. Pruebe a quitar. He actualizado la definición de la vista.
Saludos