Ajustar geometrías

En algunos casos es necesario agustar puntos o polígonos porque hay diferencias entre, por ejemplo, las calles de google y las calles en formato shape que nos dió nuestro cliente. En ese caso se puede usar la función translate para arreglar el problema de la siguiente forma:

update direccionesdecalle set the_geom = ST_Translate(the_geom,-0.0005,0.0005);

En este caso la corrección sería de 0.0005 grados ya que estamos trabajando en wgs84 (srid 4326).
Espero les sirva.
Saludos.

Agregar proyección 900913

Bueno gente acá les dejo el insert a utilizar si quieren agregar la proyección de google a postgis.

INSERT into spatial_ref_sys (srid, auth_name, auth_srid, srtext, proj4text) values (900913 ,'EPSG',900913,'GEOGCS["WGS 84", DATUM["World Geodetic System 
1984", SPHEROID["WGS 84", 6378137.0, 298.257223563,AUTHORITY["EPSG","7030"]], AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich", 0.0, AUTHORITY["EPSG","8901"]], NIT["degree",0.017453292519943295], AXIS["Longitude", EAST], AXIS["Latitude", NORTH],AUTHORITY["EPSG","4326"]], PROJECTION["Mercator_1SP"],PARAMETER["semi_minor", 6378137.0], 
PARAMETER["latitude_of_origin",0.0], PARAMETER["central_meridian", 0.0], PARAMETER["scale_factor",1.0], PARAMETER["false_easting", 0.0], PARAMETER["false_northing", 0.0],UNIT["m", 1.0], AXIS["x", EAST], AXIS["y", NORTH],AUTHORITY["EPSG","900913"]] |','+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m 
+nadgrids=@null +no_defs');

Saludos.

Crear un polígonos a partir de puntos

Hace un par de días que empecé con esta tarea, que al principio parecía muy fácil. Es más seguro que ustedes piensan en este momento que es fácil. Pero es realmente algo bastante difícil de lograr, de hecho no encontré nada que sirva más que un par de select anidados con un makepolygon al final. Creo que este es el triunfo del mes, o al menos hasta ahora. Por tal motivo, y porque no quiero volver a ver esto por un tiempo, por favor no me pregunten sobre esto, si lo entienden me alegro mucho y espero que les ayude, caso contrario lean de nuevo.

Continue reading

geonetwork en debian plesk

Hace un par de días uno de mis clientes de hosting me pidió para hostear un geonetwork, hace un tiempo atrás me lo había pedido otro cliente, en esa oportunidad no lo hice yo si no un colega, la solución de mi colega fue agregar un Virtualbox donde hosteaba windows, y ahí dentro poner el geonetwork, en su momento me pareció disparatado tener que llegar a esto, pero parecía una mejor idea que instalar entorno gráfcio.
Hoy ya casí dos años después me puse a buscar la mejor forma de hacer esto y econtré como hacerlo sin instalar X11 ni Xwindows ni nada en linux. Acá va el post, espero que los disfruten.

Continue reading

Busquedas sin acentos en postgres

Gene muy rápidamente les voy a decir como solucioné este tema, el problema es que quiero “linkear” por nombre pero en distintas tablas difieren los acentos. Entonces como indican en este post, creamos una función:

CREATE OR REPLACE FUNCTION unaccent_string(text)
RETURNS text
IMMUTABLE
STRICT
LANGUAGE SQL
AS $$
SELECT translate(
    $1,
    'áãäåāăąÁÂÃÄÅĀĂĄèééêëēĕėęěĒĔĖĘĚìíîïìĩīĭÌÍÎÏÌĨĪĬóôõöōŏőÒÓÔÕÖŌŎŐùúûüũūŭůÙÚÛÜŨŪŬŮ',
    'aaaaaaaaaaaaaaaeeeeeeeeeeeeeeeiiiiiiiiiiiiiiiiooooooooooooooouuuuuuuuuuuuuuuu'
);
$$;

Me gustó la escrita en sql porque su compatibilidad y sencilles sobre todo, ahora solo tenemos que hacer algo como:

update regiones set the_geom = (select the_geom from barrios where unaccent_string(barrios.nombre) = unaccent_string(regiones.nombre)) where idtiporegiones = 11;

Y con eso debería andar. Espero les sirva.

Una zona para el usuario

Bueno, siguiendo mas o menos el esquema de mi último post, y de los anteriores relacionados. La idea de este post es crear un trigger que cuando se genere un nuevo usuario guarde en la tabla regiones una zona, la zona va a ser su dirección “expandida” 400 metros. Veámos cómo quedaría eso..

Continue reading

Registrar cambios en tablas con un trigger genérico

Bueno gente, cuando empecé a investigar este tema ví muchas versiones, algunos que decían que era imposible hacerlo con pgsql, otros que sí o sí había que usar plperl, otros que solo con tablelog, en fin.. los que me conocen saben que cuanto más difícil parece la tarea más ganas me dan de hacerla.
El escenario es el siguiente, tenemos varías tablas en una base de datos, y queremos que cuando se hagan cambios en esa tabla se cree otra tabla que guarde estos cambios.

Bueno gente, cuando empecé a investigar este tema ví muchas versiones, algunos que decían que era imposible hacerlo con pgsql, otros que sí o sí había que usar plperl, otros que solo con tablelog, en fin.. los que me conocen saben que cuanto más difícil parece la tarea más ganas me dan de hacerla.El escenario es el siguiente, tenemos varías tablas en una base de datos, y queremos que cuando se hagan cambios en esa tabla se cree otra tabla que guarde estos cambios.

Continue reading

Calcular un área a partir de un punto

Hola gente, esto que estoy por publicar no tendrá mucho sentido para algunos, es una abstracción de la función buffer. Pero el problema es que buffer no es una función muy recomendada para zonas grandes por la cantidad de CPU y RAM que usa. Es por eso que la encapsulé en otra función, luego publicaré aquí mismo la función completa.

Continue reading