reemplazando arcmap y autocad con qgis y postgres para ... · inkscape este software nos permite...

23
Reemplazando Arcmap y Autocad con QGis y Postgres para trazar Redes de Agua y Alcantarillado José Venegas Acevedo [email protected] jvenegasperu

Upload: others

Post on 07-Jul-2020

19 views

Category:

Documents


1 download

TRANSCRIPT

Reemplazando Arcmap y Autocad con QGis y Postgres para trazar Redes de Agua y Alcantarillado

José Venegas Acevedo

[email protected]

jvenegasperu

PRESENTACIÓN

José Venegas Acevedo

[email protected]

jvenegasperu

Trabajo en Servicio de Agua Potable y Alcantarillado de la libertad SEDALIB SA en Trujillo – Perú

BIMOSIG Consultores: desarrollo de sistemas de información con inteligencia de negocios sobre Postgres

Miembro de la comunidad de usuarios de Postgres

AGENDA

1.- QUE NECESITAMOS?

2.- QUE HACE CADA UNO?

3.- ICONOGRAFÍA

4.- CONFIG WINDOWS

5.- CONFIG QGIS

José Venegas [email protected] jvenegasperu

6.- CONFIG POSTGRES

7.- DEMO

8.- QUE HAY POR DENTRO?

PREGUNTAS

¿Que necesitamos?

www.postgresql.org www.postgis.net

www.qgis.org https://inkscape.org

¿Que hace cada uno?

https://inkscape.org

INKSCAPE

Este software nos permite dibujar figuras y guardarlas en formato SVG

Aquí lo usamos para dibujar la iconografía que vamos a necesitar al momento de realizar el trazado de las redes de agua y alcantarillado

Recordar realizar las figuras en tamaño pequeño no mas de 100 x 100 pixeles ya que se trata de iconos que se usaran en un mapa

¿Que hace cada uno?

www.postgis.net

Nos permite trabajar con tipos de datos espaciales en postgres implementando la matriz DE-9IM de predicados espaciales

Permite aplicar funciones espaciales a la logica de negocio a traves de plpgsql de postgres como por ejemplo st_intersects dentro de un trigger

Nos provee un standar para el manejo de datos espaciales dentro de la propia base de datos que inclusive soporta datos del tipo raster.

¿Que hace cada uno?

www.qgis.org

Es la interfaz que interactuá con el usuario para efectuar las actividades de trazado de redes de agua y alcantarillado mostrándole al usuario los datos espaciales de acuerdo a los criterios o temáticos que requiera

Permite al usuario interactuar con otros servicios como googlemaps, Google Street View, Openstreetmap, Bing, etc

El usuario puede agregar funcionalidades o plugins de acuerdo a sus requerimientos de trabajo

¿Que Hace Cada Uno?

Permite gestionar los perfiles usuarios por ejemplo Cadista, Operador de Catastro, Jefe de Catastro, Usuario de Consulta, Gerente, etc.

Almacena y mantiene actualizada la nformación para servirla al usuario a traves de las interfaces de escritorio, web o moviles

Garantiza la confiabilidad, seguridad, portabilidad y escalabilidad de la información

ICONOGRAFÍA

CONFIGURACIÓN

Desactivar Compresión Diferencial Remota

Elegir modo en que quieres que se entreguen las actualizaciones Desactivado

Retira aplicaciones preinstaladas que no uses.

Apagar servicios no utilizados

Desactiva servicios en segundo plano como one Drive

Si tienes 4 Gb de RAM o menos configura la memoria virtual a 1.5x y 3X la RAM como minimo y maximo.

WINDOWS

CONFIGURACIÓN

Agregar complementos:

Intersect It

CAD Digitize

Configurar el Auto ensamblado

Opcional puede agregar openlayers plugin y go2streetview para visualizar los servicios de google y otros proveedores

CONFIGURACIÓN

Adicionar scripts de auditoria completa para las tablas espacialesMuym importante guardar todas las operaciones (insert update delete)

Crear los perfiles y usuarios para trabajar con los datos espaciales (Edición, Consulta, otro que requiera)

Asignar los permisos a los perfiles de usuario de acuerdo a las tablas que va a utilizar.

DEMOSTRACIÓN

AHORA VEREMOS UNA PEQUEÑA RED DE AGUA Y ALCANTARILLADO

Rotaciones, Trazados y Medidas de Esquineros Automáticos

QUE HAY POR DENTRO

● Extracto de plpgsql para Rotar Accesorios de Red de Agua● Extracto de plpgslq para Guardar Insert Update Delete● Extracto de plgsql para Borrar Accesorio● Extracto de plpgsql para Trazar Esquinero● Extracto de plpgsql para borrar Esquinero

Extracto Rotación para Tapon de Agua

if (new.tipo = 'TAPON') thenif (cuenta != 1) then

raise exception 'Registro incorrecto el Tapon se coloca solo en una tuberia final se encontraron % tuberias',cuenta;

elseif (cuenta = 1) thenIF (new.the_geom ~= finagua and rotagua <= 180) then

new.rotacion = rotagua + 90;end if;IF (new.the_geom ~= finagua and rotagua > 180) then

new.rotacion = rotagua - 270;end if;

elseraise exception 'Debe colocar el tapon en una tuberia';

end if;end if;

Extracto auditoria para guardar (insert update delete)

CREATE FUNCTION public.ap_accesorios_audit_upd() RETURNS trigger LANGUAGE 'plpgsql' COST 100 VOLATILE NOT LEAKPROOF STRICT ROWS 0AS $BODY$

DECLARE rows_affected INTEGER; BEGIN IF TG_OP = 'INSERT' THEN INSERT INTO ap_accesorios_audit (audit_action, audit_new) VALUES ('I', NEW ); RETURN NEW; ELSIF (TG_OP = 'DELETE') THEN INSERT INTO ap_accesorios_audit (audit_action, audit_new) VALUES ('D', OLD ); ELSIF (TG_OP = 'UPDATE') THEN INSERT INTO ap_accesorios_audit (audit_action, audit_old, audit_new) VALUES ('U', OLD , NEW );

Extracto auditoria para guardar (insert update delete)

RETURN NEW; ELSE RAISE EXCEPTION 'TG_OP % is none of INSERT, UPDATE or DELETE.', TG_OP; END IF; GET DIAGNOSTICS rows_affected = ROW_COUNT; IF rows_affected = 1 THEN IF TG_OP IN ('INSERT', 'UPDATE') THEN RETURN NEW; ELSE RETURN OLD; END IF; ELSE RAISE EXCEPTION 'INSERT failed on ap_accesorios_audit'; END IF; END $BODY$;

ALTER FUNCTION public.ap_accesorios_audit_upd() OWNER TO postgres;

Extracto para guardar (insert update delete)

-- DROP TRIGGER ap_accesorios_audit_upd ON public.ap_accesorios;

CREATE TRIGGER ap_accesorios_audit_upd BEFORE INSERT OR DELETE OR UPDATE ON public.ap_accesorios FOR EACH ROW EXECUTE PROCEDURE public.ap_accesorios_audit_upd();

Extracto para Trazar EsquineroCREATE FUNCTION public.trazo_esquinero2() RETURNS trigger LANGUAGE 'plpgsql' COST 100 VOLATILE NOT LEAKPROOF ROWS 0AS $BODY$

DECLARE distancia numeric;

BEGIN

distancia = (select valor_numero from parametros where tabla = 'ap_accesorios' and parametro = 'distancia' and activo = 1);delete from accesorio_mz3 where id_accesorio = NEW.gid;

insert into accesorio_mz3 (id_accesorio,id_manzana,punto)SELECT id_accesorio,id_manzana,(dp).geom as puntoFROM ( SELECT a.gid as id_accesorio,c.gid as id_manzana,ST_DumpPoints(c.the_geom) AS dp FROM cat_manzana c, ap_accesorios a WHERE ST_DWithin(a.the_geom,c.the_geom,distancia) and c.gid in (SELECT b.gid FROM ap_accesorios as d, cat_manzana as bWHERE ST_DWithin(d.the_geom,b.the_geom,distancia) and d.gid = a.gid and a.gid = new.gidGROUP BY a.gid,b.gid, a.tipo,b.nombre_municipal ) ) as foo;

delete from accesorio_mz4 where id_accesorio = NEW.gid;

Extracto para Trazar Esquineroinsert into accesorio_mz4 (id_accesorio,id_manzana,punto)select distinct on(punto) * from accesorio_mz3;delete from accesorio_mz7 where gid = NEW.gid;

insert into accesorio_mz7 (gid,id_manzana,tipo,geo1,st_distance)SELECT a.gid,b.id_manzana,a.tipo,b.punto, ST_Distance (a.the_geom, b.punto)FROM ap_accesorios as a, accesorio_mz4 as bWHERE ST_DWithin(a.the_geom,b.punto,distancia) and a.gid = new.gidGROUP BY a.gid,b.id_manzana,a.the_geom,b.punto, a.tipoorder by ST_Distance (a.the_geom, b.punto) desc;

delete from accesorio_mz8 where gid = new.gid;insert into accesorio_mz8 (gid,id_manzana,tipo,geo1,st_distance)select * from accesorio_mz7 where gid = new.gid order by st_distance limit 3;delete from ap_esquinero where ap_accesorio_id = new.gid;

insert into ap_esquinero (distancia,the_geom,ap_accesorio_id,tipo_accesorio)--select st_distance,ST_MakeLine(a.the_geom,st_GeomFromEWKT('SRID=32717;'||b.st_astext||'')),b.gid,b.tiposelect st_distance,ST_MakeLine(a.the_geom,b.geo1),b.gid,b.tipofrom ap_accesorios a join accesorio_mz8 b on a.gid = b.gidand a.gid = new.gid;

--select * from accesorio_mz3 where id_accesorio = 1610

RETURN NEW; END;

$BODY$;

Extracto Borrar Esquinero

CREATE FUNCTION public.delete_esquinero1() RETURNS trigger LANGUAGE 'plpgsql' COST 100 VOLATILE NOT LEAKPROOF ROWS 0AS $BODY$

DECLARE

BEGIN

delete from ap_esquinero where ap_accesorio_id = old.gid;

RETURN NEW; END;

$BODY$;

PREGUNTAS

José Venegas Acevedo

[email protected]

jvenegasperu