Postgis: Polígonos y Círculos... Agregar y Rescatar

From: Andrés P(dot)P(dot) <solopostgres(at)gmail(dot)com>
To: pgsql-es-ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Postgis: Polígonos y Círculos... Agregar y Rescatar
Date: 2015-02-16 20:38:59
Message-ID: CAHohBGsZL57UGS4ReRXb1t1AqEeo6sqK=qmsmaDAfxawE0gN0A@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Buenas Tardes Estimados

Perdonen lo extenso... pero necesito que tengan paciencia y lean esto y me
den sugerencias....O.. que me den ejemplos claros de como crear y rescatar
círculos .... jeje..

Tengo una tabla que guarda geocercas y como no tengo dominado el tema
decidí crearla con dos campos (entre otros) uno de tipo polygon y otro
"circular".. pensando que talvez no se podían guardar bajo el mismo tipo..:

....
geof_type smallint,
geof_circ_data geometry(CIRCULARSTRING,4326),
geof_poli_data geometry(POLYGON,4326),
....

===============================================================
Para guardar los polígonos y rescatarlos para su visualización en los mapas
no hemos tenido problemas... sin embargo, en los círculos tengo
problemillas...

CIRCULOS: Los puedo guardar.. rescatar.. pero lo que rescato pareciera no
ser lo que guardé originalmente.

Crear(guardar) círculos... he probado con dos formas...

*FORMA1:*
create function add_geofence_circle(....,p_points varchar,p_radius
integer)....
....
...
insert into *tabla.....(geof_poli_data).**.*
*values(...**ST_Buffer(ST_MakePoint(v_x, v_y)::geography,
p_radius)::geometry,...);*
*...*
*...*
end;

*FORMA2:*
modifico por: *ST_BUFFER(ST_Transform(ST_SetSRID(ST_MakePoint(v_x,
v_y)::geometry, 4326), 4326), p_radius)::geometry,*

en ambas formas v_x y v_y son las coordenadas por separado que extraigo
desde p_point.. y p_radius es el radio en metros...
...actualmente lo estoy guardando en el campo de la tabla que definí de
tipo polygon ya que en el primer intento lo intenté hacer en el
circularstring pero me reclamó....... y entre pruebas y pruebas me di
cuenta que al parecer "se puede" guardar un círculo en un geometry de tipo
polygon.... y en eso estoy ahora...

Bueno, ahora, al rescatar hago lo siguiente:

create function get_geofence_circle(geof_id integer)...
....
....
return query select ....
....
*st_x(st_astext(st_centroid(geof_poli_data)))::numeric AS coord_x,*

*st_y(st_astext(st_centroid(geof_poli_data)))::numeric AS coord_y,*
*round(CAST(ST_Distance_Sphere(ST_Centroid(geof_poli_data),*
*
ST_makepoint(ST_XMax(geof_poli_data),ST_YMax(geof_poli_data))) As
numeric),2) as radius*
...
...
end;

con lo cual rescato "supuestamente" las coordenadas del centro y radio...
pero por lo que veo en las pruebas, los resultados son diferentes a lo que
ingresé...

*Lo siguiente muestra mi duda:*

*Los datos que INGRESO al Procedimiento que guarda:*

*Punto(p_point)='-33.36867110547236,-70.82817077636719'*

*Radio(p_radius)= 2000 (supuestamente en metros)*

*Si guardo con la Forma1, al momento de rescatar obtengo:*

* r_geofence_center_x | r_geofence_center_y | r_geofence_radius*
*---------------------+---------------------+-------------------*

* -33.3686711054724 | -70.8281726313121 | 2819.15 .. no
exacto, es el más "cercano" pero 820 metros de diferencia en el radio es
mucho..*
*Si guardo con la Forma2, al momento de rescatar obtengo:*

* r_geofence_center_x | r_geofence_center_y | r_geofence_radius*
*---------------------+---------------------+-------------------*
* -33.3686711054725 | -70.8281707763673 | 17568804.27 *
*.. centro más preciso, pero el radio claramente no..*

*Estará mala la forma de guardar, de rescatar, de ambas??..*
===============================================================

Que estoy haciendo mal?.. entendiendo mal?.... Lo que he hecho ha sido en
base a lo que he entendido del postgis y sus funciones y algunos ejemplos
que he encontrado.. polígonos , ningún problema... pero círculos no hay
muchos ejemplos claros...

Alguna ayudita.. guía, ejemplos claros..?.. referencia geográfica..
Chile.. todo el territorio..

Se agradece desde ya..

Slds.
AP.

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message MARIA ANTONIETA RAMIREZ SOLIS 2015-02-16 21:29:02 REPLICACION STREAMING
Previous Message raul andrez gutierrez alejo 2015-02-14 14:16:05 Re: restaurar DB a mano