Contar registros iguales en un campo con Scripting en gvSIG

Si disponemos de una tabla en gvSIG podemos obtener el número de registros que hay por cada uno de los distintos valores de un campo, la cantidad de veces que se repite cada valor.

Para ello tendremos que crear un nuevo script en gvSIG, desde el menú Herramientas->Scripting->Editor de Scripts (este menú se llama “Scripting Composer” hasta la versión 2.2).

Una vez creado, con el nombre que deseemos, copiamos el siguiente código en él:

from gvsig import *
import commonsdialog
from org.gvsig.andami import Utilities
import os, time

from gvsig import *

from org.gvsig.app.project.documents.table import TableManager

def loadTable(format, **parameters): 

    try:
        application = ApplicationLocator.getManager()
        datamanager =  application.getDataManager()
       
        # Loding the data store
        store_parameters = datamanager.createStoreParameters(format)
        copyToDynObject(parameters, store_parameters)
        store = datamanager.openStore(format, store_parameters)       

        # Creating a Table document and initialize with the data store
        project = currentProject()
        table = project().createDocument(TableManager.TYPENAME)
        table.setStore(store)
        table.setName(store.getName())

        # Add the Table document to the project
        project().addDocument(table)
       
    except Throwable, ex:
        raise RuntimeException("Can't load table, "+ str(ex)) 
 
    return table

def loadDBF(dbffile):
  table = loadTable(format="DBF",DbfFile=dbffile)
  return table

      
def getTempFile(name, ext):
    tempdir = Utilities.TEMPDIRECTORYPATH
    if not os.path.isdir(tempdir):
      os.makedirs(tempdir)
    t = time.time()
    f = os.path.join(
      tempdir,
      "%s-%x%x%s" % (name,t,(t-int(t)) * 10000,ext)
    )
    return f
    
def main(*args):
    print "Count values"
    table = currentTable()
    field = str(commonsdialog.inputbox("Name of the field"))
    try:
        features = table.features()
    except:
        commonsdialog.msgbox("Table not opened")
    count = dict()
    for f in features:
        ff = str(f.get(field))
        if ff in count.keys():
            count[ff] += 1
        else:
            count[ff] = 1
    print count
    sch = createSchema()
    sch.append('ID','STRING',15)
    sch.append('COUNT','INTEGER',20)
    dbf = createDBF(sch, getTempFile("count"+field,".dbf"))
    print type(dbf())
    print "full name: ", dbf.getFullName()
    #Insert table data

    dbf.edit()
    for k,v in count.iteritems():
      f = dbf.createNewFeature()
      f.set('ID',k)
      f.set('COUNT',v)
      dbf.insert(f)

    dbf.commit()

    d = loadDBF( dbf.getFullName())
    print dbf.getFullName()
    return

Después guardamos dicho script.

Ahora ya sobre la Vista de gvSIG, ponemos la capa sobre la que queramos realizar el cálculo activa y abrimos su tabla de atributos. Después abrimos el lanzador de scripts (menú Herramientas->Scripting->Lanzador de Scripts; este menú se llama “Scripting Launcher” hasta la versión 2.2).

Con doble-click sobre el Script que habíamos creado se abrirá una ventana donde podremos escribir el nombre del campo sobre el que queramos realizar el cálculo. Tras aceptar se habrá creado una nueva tabla con los resultados. Iremos al Gestor de proyectos (en el menú Mostrar), y en el documento “Tabla” tendremos la nueva tabla creada.

Counter_esp

Dicha tabla es temporal, por lo que si la queremos mantener podremos exportarla a una tabla dbf en disco (menú Tabla->Exportar a).

 

Posted in development, gvSIG Desktop, scripting, spanish | 1 Comment

Camino a gvSIG 2.3: Datos LiDAR

En gvSIG 2.3 tendremos acceso a una nueva fuente de datos que cada vez es más utilizada, los datos LiDAR. gvSIG 2.3 proporciona drivers para leer y escribir LiDAR en gvSIG siguiendo la especificación de LAS. También se proporciona una herramienta de recorte de datos para exportar un subconjunto de datos LIDAR.

Drivers

El usuario tendrá 2 opciones para trabajar con ficheros LAS, basadas en la implementación en gvSIG de 2 librerías diferentes, cada una de ellas con sus ventajas:

  • El proveedor basado en JGrasstools que es de lectura/escritura.

  • El proveedor basado en Whitebox que es de sólo lectura, pero actualmente ofrece mejor rendimiento que el basado en Jgrasstools.

Lidar_gvSIG_01

Aclarado/simplificación

Ambos drivers incluyen dos parámetros de “aclarado” (simplificación), que permiten leer un subconjunto del total de puntos disponibles en el fichero LAS. El aclarado permite dibujar rápidamente ficheros enormes a pequeñas escalas (en las que no se requiere un nivel de detalle tan elevado como el que provee el fichero):

  • ThinningDivisor: lee 1 de cada n puntos (1/n), por ejemplo thinningDivisor=10 carga el 10% del total de puntos disponibles

  • ThinningResolution: Carga aproximadamente n puntos por unidad cuadrada de la capa; por ejemplo, thinningResolution=0.0001 carga 0.0001 puntos/m2 (asumiendo que las unidades de la proyección de la capa de ejemplo son metros), o lo que es lo mismo, 100 puntos/km²

Atributos

Los ficheros LAS poseen un conjunto de campos obligatorios (fijos) y otros opcionales que dependen de formato de datos de punto que se especifique en la cabecera del fichero LAS.

Los campos obligatorios son:

  • CLASSIFICATION (clasificación de coberturas del suelo)
  • POINTX (coordenada x del punto)
  • POINTY (coordenada y del punto)
  • POINTZ (coordenada z del punto, útil para simbolizar elevaciones del terreno)
  • INTENSITY (intensidad)
  • RETURNNUM (número de retorno del punto)
  • NUMBEROFRETURNS (número de retornos para este pulso láser)

Los campos opcionales son:

  • COLOR (color del punto, expresado como un entero “long” de Java que contiene el valor RGB)
  • TIME (tiempo absoluto de captura, expresado tal como genera Data.getTime())
  • WEEKTIME (tiempo relativo de captura, expresado como tiempo GPS semanal)

Lidar_gvSIG_02

Herramienta de exportación

La herramienta de recorte permite elegir un subconjunto de los datos para exportarlo a un nuevo fichero LAS.

Lidar_gvSIG_03

La herramienta permite elegir una extensión geométrica para filtrar los datos (sólo se exportarán los puntos que estén comprendidos en la extensión geométrica seleccionada). Las opciones posibles son:

  • No realizar un filtrado por extensión geométrica.

  • Filtrar los datos usando la extensión visible en la vista activa.

  • Filtrar usando una extensión geométrica especificada por el usuario.

LiDAR_gvSIG_04

Es importante remarcar que si hemos cargado la capa en la vista usando las opciones de “aclarado” (simplificación) de datos, la herramienta de exportación respetará estas opciones, con lo cual se exportará la versión simplificada de los datos.

Y para acabar os dejamos con un par de vídeos relacionados con la carga de datos LiDAR en gvSIG:

Posted in gvSIG Desktop, spanish | Tagged , , | 3 Comments

Camino a gvSIG 2.3: Reproyectar Vistas 2D a Vistas 3D

En la próxima versión de gvSIG 2.3 vamos a tener varias mejoras (y muy llamativas) relacionadas con las Vistas 3D. Una de las fundamentales es la capacidad de reproyectar una Vista 2D a una Vista 3D.

En gvSIG 2.2 sólo podemos aplicar Vistas 3D a Vistas 2D con EPSG: 4326. Esto cambiará en la próxima versión, y el usuario podrá trabajar en cualquier proyección sin que eso impida poder utilizar las Vistas 3D.

Os dejamos con un vídeo en que mostramos esta nueva funcionalidad:

Posted in gvSIG Desktop, spanish | Tagged , , , | 4 Comments

From Aaron Swartz to the access to the free scientific knowledge

001

In Europe we are very grateful because the ministers of Competitiveness of the European Union (EU)gave recently their support to all European articles, publicly funded or public-private are accessible free of charge for 2020. Thus, the member states of the European Union want to ensure that the knowledge generated by our scientists can be reused. It is proposed that European scientists should not be judged by the number of produced publications but by the social impact of their work. .

The first thing that came up when we read the new, it is the potential great economic profit linked to the scientific progress.

If citizens invest a portion of our taxes to train technicians, scientists and intellectuals, it would be stupid that the fruit of their labor, it was not available for their financial supporters, for the society. Anyone would not conceal the knowledge generated by our scientists to the rest of our scientists and this way, slowing the natural progress of science itself, based on the sum of efforts. Something that perfectly sums up the famous quote of Isaac Newton ” If I have seen further it is by standing on the shoulders of Giants.”

We congratulate ourselves and , on the other hand, we should think about the long road that we still have to walk in. Let´s think in the amount of money (millions and millions of euros) spent by our administrations in privative software. Knowledge not accessible for us. Let´s imagine the technological growth that would cause a measure announced such as the one applied to the software´s world. Hopefully, the time will come when we can finally announce that the European Union definitely commits to free software, and it will stop spending on licenses to invest in knowledge. Scientific knowledge, also at the level of software, can be reused.

It is a great moment to remember the sadly deceased Aaron Swartz. If we can congratulate ourselves today for this new is thanks to people like Aaron, who decided to face the perverse logic that knowledge should not be freely accessible.

Source: http://english.eu2016.nl/latest/news/2016/05/27/all-european-scientific-articles-to-be-freely-accessible-by-2020

Posted in english, opinion | Leave a comment

Accediendo a un Feature por posición en gvSIG desktop 2.3.0.

Hola a todos.
Una pregunta que suelen hacer los desarrolladores que habiendo desarrollado aplicaciones para gvSIG 1 pasan a desarrollar con gvSIG 2 es…

¿ como puedo  obtener una feature concreta por posición ?

Es una operación que se realizaba habitualmente en gvSIG 1.
La respuesta rápida es que no se puede. Dicho esto comentaré algunas opciones para rodearlo.

El API de acceso a datos de gvSIG 2 esta pensado para que se acceda de forma óptima tanto a fuentes de datos locales, como pueda ser un shape, como a remotas, entre las que hemos dedicado una especial atención el acceso a BBDD relacionales. Acceder por posición a una feature de un shape es relativamente simple y eficiente. De hecho, es posiblemente el acceso natural al shape. Apenas tiene coste. Sin embargo, cuando estamos accediendo a una tabla de una BBDD relacional, el acceso por posición, además de no ser nada eficiente, puede que no nos dé los resultados que deseamos. Cuando intentemos recuperar features de una BBDD, suponiendo que está correctamente configurado el servidor, el coste más alto solemos encontrarlo en la latencia de la red, pudiendo estar incluso alrededor del segundo el coste de recuperar una feature, y costando lo mismo recuperar una que mil. Como el API de acceso a datos de gvSIG es el mismo independientemente de la fuente de datos a la que se este accediendo, la decisión que se tomó en su diseño fue ofrecer un API que pudiese usarse tanto para fuentes de datos locales, como el shape, como remotas, como una BBDD, eliminándose la funcionalidad de acceso aleatorio de este.

Dicho así, tan rotundamente, no es del todo cierto. El API incluye una forma de acceso aleatorio, que no por posición. Podemos obtener de una Feature su FeatureReference para más tarde poder volver a recuperar la Feature entera. Esta recuperación posterior de la Feature provocará un acceso a la fuente de datos para hacerlo, así que deberíamos tener cuidado con el uso de esta funcionalidad. Además, la FeatureReference implementa el interface Persistent, lo que nos permite almacenar referencias a features en la persistencia del proyecto o del plugin de forma transparente.

Otra forma de acceso aleatorio sobre una fuente de datos es indicando el parámetro posición al método fastiterator, pero tenemos que tener en cuenta que si la fuente de datos no soporta esa operación se iteraría desde el principio de esta saltando las features previas hasta llegar a la posición indicada. Por suerte, el proveedor de datos de PostgreSQL funcione correctamente a la hora de realizar esta operación.

De todos modos, estas dos operaciones no son lo mas adecuado para acceder por posición a una Feature.

Incluido en el API de acceso a datos se encuentra otra una utilidad que nos permite paginar los datos y acceder a ellos por posición de forma transparente. Dependiendo del tamaño de página que indiquemos y el tipo de explotación que queramos hacer de los datos puede ser una opción aceptable. Evidentemente, para recuperar una sola feature por posición, no es lo aconsejable. Se trata del FeaturePagingHelper. para crear uno de ellos a partir de un FeatureStore se haría con:

...
DataManager manager = DALLocator.getDataManager();
FeaturePagingHelper featurePager = manager.createFeaturePagingHelper(featureStore, query, pageSize);
...

Donde le indicaríamos el FeatureStore sobre el que queremos crear el FeaturePagingHelper, un FetureQuery, que puede ser null si queremos recuperar todas las features sin filtrado, y el tamaño de página que queremos usar.

El FeaturePagingHelper tiene métodos como:

Feature getFeatureAt(long index)

Que nos permite recuperar una Feature por posición, o un:

long getTotalSize()

Que nos permite obtener el número de features totales.
De todos modos el método mas interesante probablemente sea:

List<Feature> asList()

Que nos devuelve un adaptador a List de features basado en el FeaturePagingHelper. Eso nos permite acceder a las features de un FeatureStore como si se tratase de una lista standard de java, funcionando de forma transparente no importa de cual sea la fuente de datos. En gvSIG esto es usando en el documento Tabla y tiene unos rendimientos aceptable.

Bueno, he comentado como podéis rodear el problema del acceso por posición a las Features de un FeatureStore, ahora toca la recomendación. Siempre que sea posible utilizar los iteradores o visitors sobre los FeatureSet. En gvSIG, usar iteradores y visitors es lo más eficiente. Si estáis migrando código a gvSIG y os encontráis algoritmos que se basan en el acceso aleatorio a la fuente de datos, en lugar de intentar migrar el código tal cual, intentad sustituir el algoritmo basado en acceso aleatorio por otro basado en iterar sobre los datos.

Como siempre, espero que os sea de utilidad.

Un saludo a todos.
Joaquin

Posted in gvSIG Desktop | Leave a comment

Camino a gvSIG 2.3: Bing Maps, Google Maps y Google Street View

Presentamos un par de novedades que vendrán incluidas en gvSIG 2.3, la próxima versión de vuestro SIG de escritorio favorito.

Por un lado tenemos el acceso a los datos de Bing Maps y Google Maps, permitiendo al usuario de gvSIG seleccionar entre los distintos tipos de información geográfica que ofrecen.

Aunque supongo que no habrá nadie que no los conozca, Google Maps es un servicio de mapas creado por Google y Bing Maps el equivalente creado por Microsoft.

Bing Maps permite acceder a las modalidades de callejero (carretera), imágenes de satélite (aéreo) e imágenes con etiquetas. Por su parte, Google nos presenta las opciones de callejero (carretera), satélite, terreno e híbrido.

Google Street View proporciona panorámicas a nivel de calle (360 grados de movimiento horizontal y 290 grados de movimiento vertical), permitiendo a los usuarios ver partes de la ciudad en las coordenadas seleccionadas.

Os dejamos con un vídeo que muestra estas nuevas herramientas que estarán disponibles en breve en gvSIG:

Antes de irnos, recuerda que si te estás planteando ayudar a que gvSIG siga creciendo, te animamos a que contribuyas al proyecto.

Posted in gvSIG Desktop, spanish | Tagged , , , , | 3 Comments

Camino a gvSIG 2.3: buscador de referencias catastrales (España)

Mientras parte del equipo está finalizando alguno de los nuevos desarrollos que formaran parte de gvSIG 2.3, ya hemos reiniciado la fase de estabilización de dicha versión con el objetivo de tenerla disponible lo antes posible. Es buen momento para que nos ayudéis aportando recursos, pensad que los proyectos colaborativos se sostienen en gran parte gracias a la colaboración de unos y otros.

Dicho esto volvamos al tema del post, que no es otro que comentar una de las próximas novedades que estará disponible en la nueva versión de gvSIG. Es una herramienta que será útil para los usuarios españoles de gvSIG y también un buen ejemplo de utilidades “locales” que pueden integrarse en la aplicación.

Muchos usuarios de información geográfica, como urbanistas, topógrafos o arquitectos, además de un Sistema de Información Geográfica como gvSIG necesitan consultar la Sede Electrónica del Catastro, donde está disponible el buscador de referencias catastrales. No deja de ser engorroso el tener que estar consultando aplicaciones distintas y no integradas.

Precisamente esto es lo que hemos hecho, integrar el buscador de referencias catastrales dentro del propio gvSIG. De este modo, cualquier usuario de gvSIG podrá localizar un determinado inmueble bien por su referencia catastral, bien por su localización y tanto para Catastro de rústica como de urbana.

En el siguiente vídeo vemos como cargamos la capa WMS del Catastro y posteriormente realizamos distintas búsquedas catastrales, obteniendo los mismos resultados que nos daría la Sede Electrónica del Catastro y todo ello sin salir de gvSIG.

Seguro que esto facilita la vida a más de uno…

Posted in gvSIG Desktop, spanish | Tagged , , | 4 Comments

Otra gran mentira: interoperabilidad sin software libre

001

Hoy día el concepto de interoperabilidad está en boca de todos. Todo ha de ser interoperable. Es necesario, es óptimo, es legal. A nadie se le ocurriría ya implantar un sistema o solución informática que no fuera interoperable. O, al menos, conscientemente.

¿Pero qué es la interoperabilidad?

Desde una perspectiva meramente tecnológica, el Instituto de Ingenieros Eléctricos y Electrónicos (IEEE) definió interoperabilidad como la habilidad de dos o más sistemas o componentes para intercambiar información y utilizar la información intercambiada.

Esa definición inicial se ha visto ampliada y actualmente la interoperabilidad es entendida como un concepto mucho más amplio. El Marco Iberoamericano de Interoperabilidad, alineado con la definición dada por la Comisión Europea, recoge una de las definiciones más completas, definiendo interoperabilidad como la habilidad de organizaciones y sistemas dispares y diversos para interaccionar con objetivos consensuados y comunes y con la finalidad de obtener beneficios mutuos. La interacción implica que las organizaciones involucradas compartan información y conocimiento a través de sus procesos de negocio, mediante el intercambio de datos entre sus respectivos sistemas de tecnología de la información y las comunicaciones.

Esperen…

Un momento…

¿Compartir conocimiento?¿No sólo información?

¿Obtener beneficios mutuos?¿Objetivos comunes?

Oigan, ¿esto no suena a software libre?

Igual por eso en España (y en otros países habrá legislación equivalente) el Esquema Nacional de Interoperabilidad, regulado por el Real Decreto 4/2010 , de 8 de enero…comprende textos como los siguientes:

  • Las condiciones de licenciamiento de las aplicaciones y de la documentación asociada, y de otros objetos de información de los cuales las Administraciones públicas sean titulares de los derechos de propiedad intelectual y que éstas puedan poner a disposición de otras Administraciones públicas y de los ciudadanos, sin contraprestación y sin necesidad de convenio, tendrán en cuenta que el fin perseguido es el aprovechamiento y la reutilización.”
  • Las administraciones utilizarán para las aplicaciones que declaren como de fuentes abiertas aquellas licencias que aseguren que los programas, datos o información que se comparten: a) Pueden ejecutarse para cualquier propósito.b) Permiten conocer su código fuente.c) Pueden modificarse o mejorarse.d) Pueden redistribuirse a otros usuarios con o sin cambios siempre que la obra derivada mantenga estas mismas cuatro garantías”
  • Las Administraciones públicas enlazarán los directorios de aplicaciones para su libre reutilización…”
  • Las Administraciones públicas deberán tener en cuenta las soluciones disponibles para la libre reutilización que puedan satisfacer total o parcialmente las necesidades de los nuevos sistemas y servicios o la mejora y actualización de los ya implantados.”
  • Las Administraciones públicas procurarán la publicación del código de las aplicaciones, en desarrollo o finalizadas, en los directorios de aplicaciones para su libre reutilización con el fin de favorecer las actuaciones de compartir, reutilizar y colaborar, en beneficio de una mejor eficiencia.”

¿Qué cosas, verdad?

Voy a volver a leer esto de “el fin perseguido es el aprovechamiento y la reutilización”. Y lo de “deberán tener en cuenta las soluciones disponibles para la libre reutilización” y eso de apostar por “la mejora y actualización de los ya implantados”.

¡Qué bonito!

Todo ello en, ¿cómo era?, espera, sí…”en beneficio de una mejor eficiencia

¡Qué maravilla! ¡Pues no sé de qué nos quejamos!

Ahora sólo queda imaginar que esto se cumple y que nuestras administraciones públicas realmente salen de la Edad Media y apuestan por el software libre, comparten tecnologías, invierten en mejorar las soluciones ya existentes y…finalmente, son interoperables.

Posted in opinion, spanish | Tagged , , , | Leave a comment

1st gvSIG Festival. Presentations and videos are now available

We would like to inform you of the availability of presentations presented during the 1st gvSIG Festival, which was held from May 23rd to 27th.

1er_gvSIG_festival_cabecera
This gvSIG Festival was a virtual conference about free geomatics with 25 presentations in English, Spanish, Portuguese, Turkish and Russian.

If you couldn’t attend the presentations all the material is now available, as well as the recording of every session. You also can filter them by language at the web page.

Posted in community, english, events | Tagged , | Leave a comment

1er gvSIG Festival: Ya están disponibles las ponencias y vídeos

Ya se encuentran disponibles las presentaciones del 1er gvSIG Festival, que tuvo lugar del 23 al 27 de mayo.

1er_gvSIG_festival_cabecera

Este gvSIG Festival fue una serie de jornadas virtuales sobre geomática libre con 25 webinars en Español, Inglés, Portugués, Ruso y Turco.

Si no pudiste seguir algunas de las presentaciones en directo ahora tienes la oportunidad de verlas de forma online, así como de descargar las presentaciones. Puedes también filtrar por idioma en la misma página web.

Posted in community, events, spanish | Tagged , | Leave a comment