From: | Mario Sileone <msileone(at)gmail(dot)com> |
---|---|
To: | josego <josego(at)simgia(dot)com> |
Cc: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: consulta sobre postgis para encontrar un punto concreto |
Date: | 2011-08-25 18:37:26 |
Message-ID: | 4E569666.5040306@gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
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.
--
Mario Sileone
From | Date | Subject | |
---|---|---|---|
Next Message | Alvaro Herrera | 2011-08-25 19:16:28 | Re: Significado de 'Cursor', para los que lo desconocen. |
Previous Message | Miguel Angel Hernandez Moreno | 2011-08-25 18:17:30 | Re: Regresa el Numero de filas afectadas en un funcion |