viernes, 15 de julio de 2016

Recomendación bibliográfica para geoprocesamiento en POSTGIS

Pasar del goeprocesamiento en un software comercial de interfase gráfica, soluciones en caja de herramienta y de "ingeniería de ratón" en la que se pueden obtener resultados con hacer click sin tener las bases de conocimiento necearías a un ambiente de modelo relacional y programación es un choque grande para un profesional SIG.
Llevo cerca de 5 años trabajando con postgis (desde la v 1.4) y uno de los  libros de mayor utilidad ha sido PostGIS 2 Análisis Espacial Avanzado de José Carlos Martínez Llario.

Una de las mayores diferencias al trabajar una base de postgis es que permite almacenar varias geometrías en una misma columna ya que hay un tipo de dato genérico "geometry" que no esta limitado a un solo tipo de geometría.
Existen funciones que retornan tipo "geometrycollection" es decir puede retornar punto, linea y polígono en un sólo registro. Esto no es común en el ambiente de software comercial  y de "ingeniería de ratón" por que realiza decisiones de las que el usuario no está enterado. Las geometrías mixtas son el resultado correcto de muchas operaciones espaciales según el "Dimensionally Extended 9-Intersection model" (modelo 9 - interseccional dimensionalmente extendido).
También existen funciones que reciben solo un tipo de geometría, por ejemplo no tiene sentido calcular el área de un punto, por lo que de un resultado de geometrías mixto en la práctica se tiene la necesidad de extraer sólo un tipo de geometría.
Actualmente existe funciones como ST_Relate (condicional),ST_CollectionExtract y ST_CollectionHomogenize que en algunas circunstancias logran este cometido, antes de que se introdujeran estas funciones a postgis esta tarea se podía lograr con una función que encontré en el libro mencionado:

-- Function: stx_extract(geometry, integer)
-- DROP FUNCTION stx_extract(geometry, integer);

CREATE OR REPLACE FUNCTION stx_extract(
    geometry,
    integer)
  RETURNS geometry AS
$BODY$
DECLARE
 geom alias for $1;
 dimension alias for $2;
 out Geometry;
 tipo Varchar;
BEGIN
 tipo:= geometrytype(geom);
 if (tipo = 'LINESTRING') THEN
 if (dimension <> 1) THEN RETURN null;
 ELSE RETURN st_multi(geom);
 END IF;
 ELSIF (tipo = 'POINT') THEN
 if (dimension <> 0) THEN RETURN null;
 ELSE RETURN st_multi(geom);
 END IF;
 ELSIF (tipo = 'POLYGON') THEN
 if (dimension <> 2) THEN RETURN null;
 ELSE RETURN st_multi(geom);
 END IF;
 END IF;
 out := ST_collectionextract(geom,dimension+1);
 IF (ST_isEmpty(out)) THEN
RETURN null;
 END IF;
 RETURN st_Multi(out);
END;
$BODY$
  LANGUAGE plpgsql IMMUTABLE STRICT
  COST 100;
ALTER FUNCTION stx_extract(geometry, integer)
  OWNER TO postgres;

En la actualidad continúo usando las cuatro funciones ya que dependiendo del contexto de uso una función puede ser más pertinente o eficiente que la otra.

jueves, 14 de julio de 2016

Bufer asimétrico y excéntrico

Una aplicación necesaria en proyectos lineales es la de realizar buffer asimétricos. Por ejemplo en líneas de transmisión la franja de tala  de vegetación (azul) está debajo de la línea de transmisión (verde), por lo tanto tiene una excentricidad con respecto al eje de diseño (rojo) que está centrado en la torre.

Solución en arcgis

En arcgis es posible hacer un buffer asimétrico uniendo dos buffer uno de lado izquierdo con un valor  y otro para el lado derecho con un valor diferente esto se puede definir en el campo "Side Type", se requerirían tres operaciones

En la siguiente figura se puede observar el eje en rojo, la flecha señala el sentido de la linea eje del buffer asimétrico. La zona en verde es el buffer que se generó con "Side Type" LEFT, la zona en rojo es el buffer que se generó con "Side Type" RIGHT. Al unir estas dos resultados se tiene una zona de aferencia con una distancia diferente a la izquierda y a la derecha del eje original

Para hacer un buffer excéntrico en arcgis también se requieren tres operaciones, dos buffer hacia el mismo lado de diferente longitud y después la diferencia entre los dos. En la figura se observa un buffer al lado izquierdo de color verde claro y otro hacia el mismo lado de menor longitud en color azul. Al hacer la diferencia (erase en caja de herramientas de arcgis) entre el verde claro y el azul (A-B) se obtiene un buffer excéntrico (en verde oscuro) con respecto al eje original (rojo).

Como se puede observar en la documentación oficial tanto la función de buffer a un solo lado como la de diferencia tienen la limitación de que requieren la licencia completa y más costosa de arcgis.

Solución en postgres

En postgres se puede crear un nueva función que realiza ya sea un buffer asimétrico o excéntrico recibiendo la geometrìa del eje, los valores numéricos de buffer y las opciones de remate:

CREATE OR REPLACE FUNCTION public.stx_buffer_asim(
    geom geometry,
    i double precision,
    d double precision,
    s text)
  RETURNS geometry AS
$BODY$
DECLARE
BEGIN
RETURN b.geom
FROM
(
    SELECT
    st_buffer(
    st_offsetcurve(a.geom, -(0.5*a.d+0.5*a.i)),
    0.5*(a.d-a.i),
    a.s) geom
    FROM
    (
    SELECT
    least(d,i) i, greatest(i,d) d, s, geom
geom, (2) i, (10) d, 'quad_segs=1'::text s
    )a
)b
;
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
El menor de los dos valores numéricos se toma como el del borde izquierdo. 
least(d,i) i, greatest(i,d)
El parámetro de texto (s) usa la sintaxis de la función buffer de postgis para definir las opciones de terminación y unión de segmentos por ejemplo 'endcap=flat' genera un buffer de terminación plana (que también requiere la licencia más avanzada en Arcgis). La función utiliza dos operaciones y una aproximación diferente. La función offsetcurve (disponible desde postgis 2.0) genera un nuevo eje centrado en la franja asimétrica que se quiere generar
st_offsetcurve(a.geom, -(0.5*a.d+0.5*a.i))

Centrado en este nuevo eje se genera un buffer simétrico


Renombrar y ordenar columnas de tabla en Shape

El Shape es un formato abanderado por ESRI, es limitado pero esto no le ha impedido el posicionarse como el formato por excelencia para intercambio de información espacial.
Existen flujos de trabajo que exigen que los campos se llamen de determinada manera y la alternativa racional es renombrar los campos del insumo en lugar de elaborar de nuevo un modelo o script.
En bases de datos renombrar una columna y ordenarlo es una operación trivial (proyección).
Una de las maneras que tiene ESRI de promover el uso de su formato propietario (gdb) es limitar las funcionalidades del formato shape y a pesar del clamor de sus usuarios esta funcionalidad no ha sido añadida como tampoco el soporte de valores nulos en campo numérico (que peligrosamente el software de ESRI vuelve 0 sin preguntar al usuario).
Una de las limitaciones en funcionalidad que presenta el software de ESRI es que no hay una manera de renombrar un campo, una forma de hacerlo en arcgis requiere varios pasos:

  1. Crear un nuevo campo.
  2. Calcular los valores del nuevo campo con el campo anterior.
  3. Eliminar el campo original 

Hay varias fuentes que explican cómo hacerlo en Arcgis Otra opción es la adquisición de la extensión "Defense Mapping" pero no justifica la inversión de miles de dólares para una operación tan simple.
Es evidente que debería haber una manera más directa de hacerlo. Este proceso puede resultar engorroso cuando son muchos campos ya que vuelve tres operaciones algo que debería ser una sola operación. Por otro lado tiene la ventaja de que en la operación con la calculadora se podría por ejemplo volver numérico una columna que tenga almacenado como texto valores numéricos o volver valores decimales a enteros además de renombrar la nueva columna.

Manipulación del archivo dbf 

Una solución se puede lograr manipulando directamente el archivo dbf, esto no es posible con las últimas versiones de excel ya que aunque abren archivos dbf (IV) no se puede guardar en este formato. Es una práctica común de los software comerciales no soportar los formatos adoptados por software libre. Software gratuitos como libre office y open office abren y guardan en este formato.
Se debe utilizar la codificación adecuada

Al abrir un dbf vemos algo como esto:


Manipulando los encabezados (primera fila del archivo) se puede modificar el nombre, tipo y precisión numérica de los datos, siempre y cuando el contenido de las celdas lo permita. En cada celda del encabezado aparece el nombre del campo separado por una coma sigue la letra N= Numeric o  C= Character que define el tipo, después se define la longitud y precisión del campo. 
La manipulación directa del dbf es de alto riesgo no se deben cambiar el orden de los renglones también se pueden ordenar columnas.

Table mannager de Qgis

La manera mas sencilla de ordenar, eliminar y renombrar campos de un archivo shape es con el table manager de Qgis. Para activar este complemento se debe ingresar al menú Plugins > Manage and install Plugins...

En las últimas versiones el complemento viene instalado en todo caso se puede ubicar fácilmente por la barra de búsqueda

Si aparece en negrilla quiere decir que el complemento está instalado, si no aparece en negrilla basta hacer click sobre el mismo y se activa la opción "install plugin"

Una vez instalado el plugin se debe activar poniendo la x en la casilla

Para empezar una edición el complemento se encuentra en la barra de vector

El complemento tiene una interfaz muy sencilla que permite ordenar, renombrar, insertar nuevos campos y "clonar" repetir con otro nombre el contenido de una columna existente.

Esta es la mejor manera de llevar una tabla de un shape a la forma necesaria para un flujo de trabajo. Automáticamente se hace una copia de respaldo del archivo dbf y se hacen todas las operaciones necesarias, la segunda pestaña muestra una vista preliminar con los datos de la tabla antes de materializar los cambios en el nuevo dbf.


domingo, 10 de julio de 2016

Introducción a los drones


Por lo general la información que se puede obtener de fuentes secundarias es restringida, desactualizada, costosa y de calidad técnica pobre cuando lo confrontamos frente a un insumo elaborado para nuestras necesidades. La adquisición directa de información es la que nos permite generar insumos adecuados para nuestros flujos de trabajo.
Uno de los mayores costos para hacer captura con sensores aerotransportados es el mismo peso del piloto y del sensor. Es por ello que han entrado en la vanguardía en SIG los drones. Los drones se vuelven una alternativa para captuar información espacial que nos permite elaborar fotomosaicos y modelos digitales al transportar sensores de video, fotográficos, Lidar o radar.
Los drones son naves livianas operadas de tal manera que no requieren tener un piloto a bordo.
Los módelos más usados por el público en general son de motor eléctrico. Originalmente en Europa se les llamaba "Queens" por el ruido que generaba su motor eléctrico como el de la Reina Abeja. Al pasar a américa se les denominó "drones" ahora por el zángano de las abejas.

Nomenclaturas


El término mas representativo es "dron". Sin embargo se usan abreviaturas que vale la pena tener claros.

UAV: Unmaned Air Vehicle traduce exactamente "vehículo aéreo sin un hombre" en español la equivalencia se hace con la sigla VAN "vehículo aéreo no tripulado". Por lo general designa a vehículos programados que realizan sus funciones de manera autónoma a manera de disparar y olvidar. La tendencia internacional en legislación es a prohibir la operación de este tipo de artefactos. Se favorece el uso de vehículos que aunque no están pilotados, tengan la capacidad de reaccionar a su entorno, esta capacidad se le atribuye al piloto humano, aunque se hacen progresos en la actualidad en la que una inteligencia artificial ha demostrado más destreza en combate que un piloto experimentado.

RPAS: Remotely Piloted Aircraft System traduce sistema de vehículo aéreo remotamente pilotado   se refiere a todos los componentes, tecnologías e individuos que permiten a un piloto humano maniobrar remotamente una aeronave.

RAP: si quitamos la letra S y dejamos la sigla RAP tenemos un vehículo aéreo remotamente pilotado  que es la sigla usada para describir la aeronave que hace parte de una RAPS

Un ejemplo de un RAPS se puede ver en la carrera de drones realizada en Dubai en 2016

Legislación


Los drones son un tema nuevo y altamente tecnológico llevado por la necesidad y habilidad de personas entusiastas cómo es común la legislación va un paso detrás de los desarrollos sin embargo ya hay vestigios de los aspectos relevantes a tener en cuenta.

Elevación

Se tiende a ponerles un límite de vuelo por debajo de los 500 pies esto se ha traducido en legislación al sistema métrico a 150m.

Peso

Se han establecido intervalos de acuerdo a su peso en kilogramos así:
0-2, 2-25, 25-150 150 ó más

Contacto visual

Para drones de entre 0-2 kg no se requiere contacto visual entre el operario y la aeronave. para drones entre 2-25 kg se requiere contacto visual esto puede llegar a cubrir una distancia de 500m suficiente para cubrir unas 80 Ha. Los drones de peso mayor a 25kg no se consideran de uso común entre el público en general.

Uso

También existen aspectos relacionados con el uso. Por ejemplo en Chile esta prohibido su utilización para firmar manifestaciones y en general donde se tenga aglomeraciones de personas (que uso podría tener un registro visual de una manifestación en contra o a favor del gobierno?). Los drones son usados por periodistas para obtener imágenes y videos, que pueden llegar a ser imposibles de controlar, para un gobierno la legislación puede ser una manera de imponer censura y control por ejemplo en Estados Unidos existió un veto por 18 años (hasta 2009) a publicar en los medios imágenes de féretros militares señalado como una manera de esconder ante el público en general el costo humano de la guerra. Por ello no solo se deben atender normas legales sino también se deben tener normas éticas que involucra consentimiento, seguridad, respeto a los espacios públicos, privacidad y pertinencia de la información.