El 25/08/11 14:37, Mario Sileone escribió:
El 25/08/2011 14:55, josego escribió:
El 25/08/11 10:48, Mario Sileone escribió:
El 25/08/2011 11:33, josego escribió:
Hola a todos.
Tengo una base de datos espacial. En una tabla tengo el nombre de calle,
la geometría y su numero de inicio y su fin.
Ejemplo la calle SICILIA tiene una geomertia con un numero de inicio 100
hasta 200.

En la tabla existen nueve filas sobre la calle SICILIA con su geometría
especifica pero con números diferentes. Osea cada cien números. Lo que
quisiera hacer una consulta que si yo introduzco un numero a la calle
SICILIA por ejemplo 150 me ubique mas o menos en ese punto.

*Lo que hice es esta sentencia -->
SELECT
X(startPoint(calle.the_geom)) as coordenada_inicio_X,
Y(startPoint(calle.the_geom)) as coordenada_inicio_Y,
calle.gid
FROM
calles_polyline AS calle
WHERE
calle.calle = 'SICILIA' and ((calle.desde <= 100) and (calle.hasta >=
199));*


Pero me coloca el punto inicial que comienza la calle con su numero. Yo
quisiera que me coloque el punto exacto. como podría hacer??.

muchas gracias, jose

Mira: hay un par de funciones muy interesantes para lo que estás
buscando.

una de ellas y la que más puede resultarte es
ST_Line_Interpolate_Point(geometría, posicion), que toma el largo de
la geometría como una razón de 0 a 1, y si le pasas en posición el
parámetro 0,5 te devolverá un punto en la mitad de la geometría.

Si esto lo pasas a una diferencia entre la altura final y la inicial,
sabiendo que tu geometría tiene una razón entre 0 y 1, creo que tienes
la solución.

Saludos.


Muchas gracias.. Estuve viendo la función y creo que me va ayudar lo que
necesito. Ahora el problema que tengo que el tipo de dato es un
multilinestring y no un linestring. No se como podría resolver eso. Si
alguien tiene alguna idea. Estoy buscando y no encuentro anda..
desde ya muchas gracias
saludos, jose


Puedes obtener de cuantas Linestring se compone con ST_NumGeometries(geometria) y luego extrayendo cada una con ST_GeometryN(geometría, orden). De esta manera puedes obtener cada una de las geometrías que contiene tu multilinestring. De ahi en mas o bien armas una sola geometría con todos los elementos o generas los registros correspondientes para cada geometría, eso ya queda a tu criterio y necesidad.

Saludos.


Ya pude solucionar.
La sentencia que use fue la siguiente.

*SELECT
X(ST_Line_Interpolate_Point(ST_GeometryN(calle.the_geom, 1), 0.773869347)) as coordenadaX, Y(ST_Line_Interpolate_Point(ST_GeometryN(calle.the_geom, 1), 0.773869347)) as coordenadaY
FROM
    calles_polyline AS calle
WHERE
calle.calle = 'SICILIA' and ((calle.desde <= 100) and (calle.hasta >= 199));*


Muchísimas gracias por todo. Ya esta solucionado. XD
saludos, jose


Responder a