Re: consulta sobre postgis para encontrar un punto concreto

From: josego <josego(at)simgia(dot)com>
To: Mario Sileone <msileone(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: consulta sobre postgis para encontrar un punto concreto
Date: 2011-08-25 19:48:30
Message-ID: 4E56A70E.9010802@simgia.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

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

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2011-08-25 19:49:04 Re: Significado de 'Cursor', para los que lo desconocen.
Previous Message luis antony meza alania 2011-08-25 19:32:36 Como devolver datos de un select q esta con group by y count() por medio de una funcion