6 votos

¿Cómo agregar la longitud de la columna en una base de datos de PostGIS de pgRouting?

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?

6voto

tobes Puntos 19

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.

4voto

UberAlex Puntos 1854

probar esto, creo que debería funcionar:

ALTER TABLE tableA ADD COLUMN cost_length double precision;
UPDATE tableA SET cost_length = ST_Length3D(the_geom);

4voto

Jon Galloway Puntos 28243

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

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