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.