gvSIG + Python = accesing MySQL

Facebooktwittergoogle_plusredditpinterestlinkedinmail

La versión 2.3 de gvSIG Desktop no permite añadir capas a partir de una base de datos MySQL. Esto se puede resolver de forma sencilla usando la estupenda capacidad de scripting Python de gvSIG; basta con incluir el driver JDBC apropiado en el directorio de gvSIG, conectarse a la base de datos, y hacer la consulta deseada. A partir de ahí, pueden crearse las capas necesarias y añadirlas a nuestro proyecto, como se muestra en esta otra entrada del blog. Al final de la entrada (y también en mi repositorio GitHub) puede verse el código mínimo para acceder a la base de datos y hacer una consulta.

gvSIG Desktop 2.3 does not allow to add layers from a MySQL database. This can be easily solved using the great Python scripting utilities provided by gvSIG; you just have to include the proper JDBC driver in your gvSIG folder, then connect to the database and do your query. Those data can be stored in a new layer and then added into our proyect, as it is shown in this previous post. At the end of this post (and also in my GitHub repository) you can see the minimun code required to accesing a database and retrieving information.

 

import sys
import os
from gvsig import *
from gvsig import geom
from gvsig.geom import *
from java.util import Properties

sys.path.append(“/pathtomygvSIGfolder/mysql-connector-java-5.1.40-bin.jar”);
import org.gjt.mm.mysql.Driver as Driver

def main():

# Connect to the database
props = Properties()
props.put(“user”,”myuser”)
props.put(“password”,”mypasswd”)
db = Driver().connect(“jdbc:mysql://localhost/mydb”, props)
# Get geometry info from database and insert it into the new layer
c = db.createStatement()
rs = c.executeQuery(“select * from mytable where somecolumn=’somevalue'”)
while rs.next():
id = rs.getString(“somecolumn”)
rs.close()
c.close()
db.close()

 

Playing with Leaflet and R :)

Facebooktwittergoogle_plusredditpinterestlinkedinmail

Pequeña prueba con Leaflet y R… una combinación estupenda 🙂 Los datos corresponden al mes de Mayo de 2015 del proyecto Málaga City Sense, y representan información sobre operadores, estado de carga y modelo (aparece como un pop-up) de teléfonos inteligentes usados en Málaga; están disponibles en el Portal de Datos Abiertos del Ayto. de Málaga. El código R está disponible en mi GitHub.

This is a small test using Leaflet and R… a really cool combination 🙂 The data belong to the Málaga City Sense project (May 2015), and they represent information about phone providers, battery level and devices (as a pop-up) of smartphones deployed in Málaga; they are available at the Open Data Website of the Málaga Townhall. The R code can be found at my GitHub.

R + RStudio + PostGIS + Xubuntu 14.04/Debian jessie

Facebooktwittergoogle_plusredditpinterestlinkedinmail


[In English]

Estos son los pasos para poder obtener datos de una base de datos PostGIS desde RStudio trabajando en Xubuntu 14.04 o en Debian jessie:

  1. Deben estar instaladas las librerías libgeos, libgeos-c1, libgeos-dev y libgeos++-dev; las dos primeras ya las tenía instaladas tanto en Xubuntu como en jessie, pero las dos últimas las he tenido que añadir desde Synaptics, según se indica en este enlace de AskUbuntu.
  2. En RStudio, hay que instalar y después cargar los paquetes RPostgreSQL, rgeos y sp.
  3. Después hay que crear la conexión a la base de datos:

    drv <- dbDriver(“PostgreSQL”)

    con<- dbConnect(drv,dbname=’tuBD’,host=’localhost’,port=5432,user=’tuUsuario’,password=’tuPw’)

  4. Para obtener datos que utilicen información extraída de una tabla con datos espaciales, deben usarse las funciones PostGIS habituales de acceso a geometrías:

data <- dbGetQuery(con,”SELECT nongeocolumn, ST_AsText(geocolumn) FROM yourtable”)

Una vez finalizado el trabajo con la BD, se cierran conexión y driver:

dbDisconnect(con)
dbUnloadDriver(drv)

Los pasos 2-4 están explicados en este enlace de R-bloggers. A partir de él he subido a Github un pequeño script R (accessDB.R) que realiza la instalación y carga de paquetes, y la conexión a la base de datos.


[En español]

These are the steps for retrieving data from a PostGIS database using RStudio under Xubuntu 14.04 or under Debian jessie:

  1. Libraries libgeos, libgeos-c1, libgeos-dev y libgeos++-dev must be installed; both Xubuntu and jessie had the first two of them installed, but I had to add the last ones from Synaptics, as it is explained in this link at AskUbuntu.
  2. In RStudio, you have to install and then load RPostgreSQL, rgeos y sp packages.
  3. After that, you have to create the connection to the database:

    drv <- dbDriver(“PostgreSQL”)

    con<- dbConnect(drv,dbname=’yourDB’,host=’localhost’,port=5432,user=’yourUser’,password=’yourPw’)

  4. In order to get  information from tables which store geospatial data, you have to use the usual PostGIS functions for handling geometries:

data <- dbGetQuery(con,”SELECT nongeocolumn, ST_AsText(geocolumn) FROM yourtable”)

Once the work with the DB is finished, connection and driver must be closed:

dbDisconnect(con)
dbUnloadDriver(drv)

Steps 2-4 are explained in this link at R-bloggers. From the content in this post I have uploaded to Github a little R script (accessDB.R) that installs and load the required packages, and then connects to a database.

 

Scripting in gvSIG 2.1 + PostGIS

Facebooktwittergoogle_plusredditpinterestlinkedinmail


[In English]
gvSIG 2.0 y posteriores permiten crear una capa directamente desde una tabla de una base de datos PostgreSQL/PostGIS, incluso añadiéndoles una restricción SQL, es decir, con una claúsula WHERE sobre la tabla, de manera que uses únicamente las columnas que te interesen.

Sin embargo, yo necesitaba crear una capa a partir de una tabla incluyendo, en la restricción SQL, un FROM que me permitiera combinar diferentes tablas de mi BD. Para ello he utilizado la opción de scripting con Jython que ofrece gvSIG (en mi caso, en la versión 2.1).

[NOTA: gvSIG 1.12 también tiene un módulo de scripting, pero a) es menos potente, y b) no ha sido capaz de cargar el script que he escrito, la consola de Jython me indica que “no module named gvsig”]

El primer paso para poder trabajar con los scripts Jython es instalar el módulo de scripting en gvSIG, si no está instalado por defecto. A partir de ahí, ya se pueden crear y lanzar los scripts Jython que queramos desarrollar. No es el objetivo de esta entrada explicar con detalle la instalación y el manejo del entorno de scripting; para ello, consultar la documentación de scripting de gvSIG,  las entradas de scripting del blog de gvSIG, o esta entrada del blog másquesig. Como veréis, crear nuestros propios scripts abre muchísimas posibilidades a la hora de trabajar con gvSIG.

Para acceder a BDs en Jython se puede usar el paquete zxJDBC, que es un estándar desde la versión 2.1 de Jython; aquí se puede encontrar mucha información sobre el mismo, pero resumiendo:

  • Es útil para scripts aislados y sin necesidad de portabilidad.
  • Comunica dos estándares: JDBC, el estándar de acceso a bases de datos de Java, y DBI, el estándar de acceso a bases de datos de Python.

Sin embargo, no he conseguido hacer que funcionara. Posiblemente el problema es el que se comenta y soluciona aquí, relativo al classpath; sin embargo, sospecho que como la herramienta de scripting está “dentro” de gvSIG, la solución que proponen no funciona. Tampoco funciona esta variante que he encontrado.

Así que la solución ha sido trabajar directamente en Java. Lo primero ha sido descargar el driver JDBC para PostgreSQL de aquí; he escogido el JDBC 4 para PostgreSQL 9.1 y me ha ido bien.

Para lograr acceder a la BD y ejecutar sentencias SQL me he basado en la información encontrada en este enlace, este enlace, y este otro. El driver lo guardo en el directorio donde he instalado el gvSIG (no en el directorio que crea gvSIG), y en el script primero accedo a él, y luego lo cargo. Una vez tengo acceso a la BD, puedo ejecutar la sentencia SQL que desee, con lo que la potencia de las búsquedas es mucho mayor. La única condición es que esa búsqueda devuelva las coordenadas X e Y de los puntos que queremos insertar en la capa.
Este es el código básico que resuelve el acceso a la BD, la ejecución de la sentencia, y la creación de la nueva capa con los datos devueltos por la misma.

 


[En español]

gvSIG 2.0 and later allow to create a layer from a table in a PostgreSQL/PostGIS database, even adding a SQL constraint, that is, a WHERE clause on the table, so you can recover only the columns you need.

However, I wanted to create a layer from a table including, in the SQL constraint, also a FROM clause which allowed me to combine different tables in my DB. So I have used the scripting possibilities that, via Jython, offers gvSIG (in my case, I am working with gvSIG 2.1)

[NOTE: gvSIG 1.12 has a scripting module too, but a) it is not as powerful, and b) it could not load the script I have written, and the Jython console shows the message “no module named gvsig”]

The first step in order to write Jython scripts in gvSIG is to install the scripting module (if it is not installed by default). From there on, you can create and launch your own Jython scripts. It is out of the scope of this post to explain in detail the installation process and how to work with the scripting module; the interested reader may consult the gvSIG scripting documentation,  the gvSIG blog’s posts about scripting, or this post on blog másquesig. As you can see, creating our own scripts offers a lot of possibilities when we work with gvSIG.

For accessing databases using Jython you can use the zxJDBC package, which is a standard since version 2.1 of Jython; you can find here much more information about it, though, to cut a long story short (I love that song by Spandau Ballet 🙂 !!):

  • It is useful for scripts that work in an isolated manner and do not have to assure portability.
  • It is a link between two standards: JDBC, the Java standard for accessing databases, and DBI, the Python standard for the same task.

However, I couldn’t make it work. I would say that the problem is the one commented and solved here, due to classpath issues; however, I guess that, since the scripting module is “inside” gvSIG, the proposed solution does not work, neither does this variation I have found.

So I have used Java. First, you have to download the JDBC driver for PostgreSQL from here; I have chosen JDBC 4 for PostgreSQL 9.1 and it works fine.

In order to connect to the DB and then execute SQL sentences, I have used the information I found in this link, this link, and this other link.  I stored the driver in the directory where I have installed gvSIG (not in the directory created by gvSIG), then the script appends that path, and finally the driver is uploaded. Any SQL sentence can be executed, so the searches in the BD are much more flexible. The only restriction that must be taken into account is that the search returns the X and Y coordinates of the points we want to insert into the new layer. This is the basic code that access to the DB, executes the query, and creates a new layer with the returned data.


import sys
import os
from gvsig import *
from geom import *
from java.util import Properties

sys.path.append(“/home/anita/gvSIG-desktop/gvSIG-desktop-2.1.0/postgresql-9.1-903.jdbc4.jar”);
import org.postgresql.Driver as Driver

def main():
# Create the new layer
projection = currentView().getProjection()
newLayerSchema = createSchema()
newLayerSchema.append(“ID”,”INTEGER”)
newLayerSchema.append(“GEOMETRY”,”GEOMETRY”)
newLayerName = “/home/anita/YOUR_PATH
newLayer = createShape(newLayerSchema,newLayerName,CRS=projection,geometryType=POINT)

# Connect to the database
props = Properties()
props.put(“user”,YOUR_USER)
props.put(“password”,YOUR_PASSWORD)
db = Driver().connect(“jdbc:postgresql://localhost/YOUR_DB“, props)

# Get geometry info from database and insert it into the new layer
c = db.createStatement()
rs = c.executeQuery(“select table.id, ST_X(table.coordinatesxy),ST_Y(table.coordenatesxy) from YOUR_TABLES where YOUR_WHERE_CLAUSE“)
data = {}
while rs.next():
id = rs.getInt(1)
newX = rs.getObject(2)
newY = rs.getObject(3)
print(id,newX,newY)
newGeom = createPoint(newX,newY)
dbValues = {“ID”:id,”GEOMETRY”:newGeom}
newLayer.append(dbValues)
rs.close()
c.close()
db.close()

currentView().addLayer(newLayer)
newLayer.commit()

PostgreSQL/PostGIS + gvSIG + Windows XP

Facebooktwittergoogle_plusredditpinterestlinkedinmail


[In English]
Finalmente, he instalado PostgreSQL/PostGIS y gvSIG en una máquina virtual Windows XP (creo que ya me quedan pocas combinaciones por probar :P). Estos son los puntos principales a tener en cuenta:

  • Primero he instalado gvSIG 2.1.0.2252 RC2. Los ráster los carga bien; en algunos me ha dado problema con la carga con teselado, pero se cargan bien sin esta opción.
  • La versión de PostgreSQL que he usado es la 9.3, y la versión de PostGIS es la 2.1. He instalado lo mínimo posible; la instalación de Apache y phpPgAdmin ha dado error (olvidé apuntarlo :(); he permitido que se actualicen las variables de entorno GDAL_DATA,POSTGIS_GDAL_ENABLED_DRIVERS, y POSTGIS_ENABLE_OUTDB_RASTERS.
  • En esta versión, PostGIS se añade como una extensión una vez creada nuestra base de datos.
  • Una cosa curiosa ha sido que, al cargar datos en la base de datos desde un fichero .csv, saltaba un error debido a que no tenía permisos de lectura en el fichero. Buscando un poco, he encontrado este foro en el que se explicaba la solución (¡gracias!): copiar el fichero .csv en un directorio visible como “Documentos Compartidos”
  • Para poder usar las opciones de scripting de gvSIG y conectarme con jython a la base de datos, he guardado el .jar con el driver de PostgreSQL (postgresql-9.1-903.jdbc4.jar) en el directorio gvSIG creado en la instalación, y ha ido todo estupendamente 🙂


[En español]

Finally, I have installed PostgreSQL/PostGIS and gvSIG on a Windows XP virtual machine (I would say that there are not much more possibilites I could try :P). These are the main issues to take into account:

  • Firstly, I have installed gvSIG 2.1.0.2252 RC2. Raster files are, in general, properly loaded; some files have shown errors if loaded with tiling options, but they load ok if tiling is not used.
  • Then I have installed PostgreSQL 9.3 and PostGIS 2.1. My installation was minimal; anyway, Apache and phpPgAdmin installation failed (I did not write down which were the errors :(); along the installation process, I updated enviroment variables GDAL_DATA, POSTGIS_GDAL_ENABLED_DRIVERS, and POSTGIS_ENABLE_OUTDB_RASTERS.
  • In this version, PostGIS is added as an extension, once we have created our database.
  • A funny issue was that, when I tried to load my data into the database from a .csv file, an error arose because I had not reading permissions on that file. Doing a little research, I found this forum which explained how to fix it (zanks!): just copy the .csv in a visible folder like “Shared Documents”.
  • In order to use the scripting utilities of gvSIG, and connecting from a jython script to the database, I have placed the .jar file with the PostgreSQL driver (postgresql-9.1-903.jdbc4.jar) in the gvSIG folder (the one created when gvSIG is installed), and everything went fine 🙂

PostgreSQL/PostGIS + Debian Wheezy

Facebooktwittergoogle_plusredditpinterestlinkedinmail


[In English]
He tenido que instalar PostgreSQL/PostGIS, esta vez en una máquina con Debian Wheezy. Estas son las diferencias respecto a la instalación en Xubuntu 14.04:

  • La versión de  PostgreSQL que hay disponible en el Synaptic para este Debian es la 9.1. Estos son los paquetes instalados, comparados con los que instalé en la versión 9.3:
    1. postgresql-server-dev-9.1
    2. postgresql-doc-9.1
    3. postgresql-client-9.1
    4. postgresql-client-common
    5. postgresql-9.1-postgis
    6. postgresql-9.1-postgis-2.1-scripts: no está en el repositorio.
    7. libpq-dv: no está en el repositorio.
    8. postgresql-common: ya estaba instalada.
    9. libpq5: ya estaba instalada.
    10. postgresql-doc: no está en el repositorio, pero está instalada postgresql-doc-9.1
    11. postgresql-client: no está en el repositorio, pero está instalada postgresql-client-9.1
    12. libreoffice-base-drivers: no está en el repositorio, pero están instaladas libreoffice-base-core y libreoffice-base
    13. postgresql-contrib-9.1
    14. postgis: ya estaba instalada.
    15. postgresql-9.1: no está en el repositorio.
    16. postgresql
    17. liblwgeom: no está en el repositorio.
  • La versión de PostGIS en el repositorio es la 1.5.3-2. Esto implica que no se puede añadir directamente como extensión, sino que hay que crear una plantilla o template (que es una base de datos que alberga las funciones PostGIS). En este enlace y en este otro se puede encontrar ayuda muy útil; los pasos que yo he seguido para crear la template a partir de ellos son los siguientes:
    1.  Crear la plantilla
      1. sudo -u postgres createdb template_postgis
      2. sudo -u postgres psql -d template_postgis -c “UPDATE pg_database SET datistemplate=true WHERE datname=’template_postgis'”
      3. sudo -u postgres psql -d template_postgis -f /usr/share/postgresql/9.1/contrib/postgis-1.5/postgis.sql
      4. sudo -u postgres psql -d template_postgis -f /usr/share/postgresql/9.1/contrib/postgis-1.5/spatial_ref_sys.sql
    2. Crear la base de datos con dicha plantilla
      1. sudo -u postgres createdb -T template_postgis mibasedatos
        (pgAdmin debe estar cerrado, si no, da error indicando que otro usuario está utilizando template_postgis)


[En español]

I had to install PostgreSQL/PostGIS, though this time in a Debian Wheezy computer. These are the differences regarding to the installation in Xubuntu 14.04:

  • In  Debian Wheezy, Synaptic offers PostgreSQL 9.1. These are the packages I have installed, compared to those I installed in version 9.3:
    1. postgresql-server-dev-9.1
    2. postgresql-doc-9.1
    3. postgresql-client-9.1
    4. postgresql-client-common
    5. postgresql-9.1-postgis
    6. postgresql-9.1-postgis-2.1-scripts: not in Synaptic.
    7. libpq-dv:  not in Synaptic.
    8. postgresql-common: it is installed.
    9. libpq5: it is installed.
    10. postgresql-doc: not in Synaptic, but postgresql-doc-9.1
      is installed.
    11. postgresql-client: not in Synaptic, but postgresql-client-9.1
      is installed.
    12. libreoffice-base-drivers: not in Synaptic, but libreoffice-base-core and libreoffice-base are installed.
    13. postgresql-contrib-9.1
    14. postgis: it is installed.
    15. postgresql-9.1: not in Synaptic.
    16. postgresql
    17. liblwgeom: not in Synaptic.
  • The PostGIS version in Synaptic is 1.5.3-2. This means that it cannot be added directly as an extension, but as a template (i.e., a database that stores PostGIS functions).  In this this link and in this other you can find very useful information about how to create a template; using that information, these are the steps I have followed for creating my template:
    1.  Template creation
      1. sudo -u postgres createdb template_postgis
      2. sudo -u postgres psql -d template_postgis -c “UPDATE pg_database SET datistemplate=true WHERE datname=’template_postgis'”
      3. sudo -u postgres psql -d template_postgis -f /usr/share/postgresql/9.1/contrib/postgis-1.5/postgis.sql
      4. sudo -u postgres psql -d template_postgis -f /usr/share/postgresql/9.1/contrib/postgis-1.5/spatial_ref_sys.sql
    2. Database creation using that template
      1. sudo -u postgres createdb -T template_postgis mydatabase
        (pgAdmin must be closed; if not, an error arises noting that other user is using  template_postgis)

DEM 3D printing

Facebooktwittergoogle_plusredditpinterestlinkedinmail

Dos enlaces sobre DEMto3D, una herramienta desarrollada en la Universidad de Jaén (España) para realizar impresiones 3D de MDE:

Two links (in Spanish) about DEMto3D, a tool developed at Universidad of Jaén (Spain) for 3D printing of DEM:

 

Google Maps Engine Lite (II)

Facebooktwittergoogle_plusredditpinterestlinkedinmail

Como una imagen vale más que mil palabras, aquí va un vídeo sobre creación de mapas en Google Maps Engine Lite. Aprovecho también para decir que el editor de vídeo de YouTube me ha gustado mucho por su comodidad, aunque en algunas cosas sea lento.

Since a picture is worth a thousand words, here you have a video about creating maps using Google Maps Engine Lite. Also, I should say YouTube’s video editing service is really nice and easy, though for some tasks it is rather slow.

Google Maps Engine Lite (I)

Facebooktwittergoogle_plusredditpinterestlinkedinmail


[In English]
Una manera muy sencilla y rápida de crear mapas es usar la herramienta de Google Maps Engine Lite (gratuita, a diferencia de otras versiones, como Maps Engine Pro o Maps Engine, que sí son de pago).

Para ello, debes entrar en https://maps.google.es e iniciar sesión con tu cuenta Google. A partir de ahí, puedes crear un nuevo mapa usando Maps Engine Lite, o acceder a mapas almacenados previamente; los mapas creados con la versión clásica de Google Maps aparecen si, una vez que seleccionas “Mis mapas”, escoges “Ver todos tus mapas”, y después pinchas en “Versión clásica de Mis Mapas”; Google te dará la opción de importar a Maps Engine Lite, o verlos como siempre en Google Maps. Una vez creado el mapa, puedes usarlo de manera privada, o compartirlo, bien públicamente, bien con quien tú decidas.

Para ilustrar esto con un ejemplo, este mapa es de Google Maps, y este otro está hecho con Maps Engine Lite. Además, aquí hay una comparativa oficial de las diferentes versiones de Maps Engine.

Para los que estén habituados a la versión clásica, Maps Engine Lite no es exactamente igual; estas son las diferencias entre ambas. Maps Engine Lite tiene más ventajas (importación de datos CSV, capas, tabla con datos), pero echo de menos el contador de visitas que ofrecía Google Maps, ya que ahora no hay forma de saber el número de visitas de tus mapas; tampoco me gusta que las fotos/vídeos que quieras añadir no puedan estar en tu ordenador, sino en internet.

Google Maps

  • Sí tiene contador de visitas.
  • Formatos de importación: KML, KMZ, GeoRSS.
  • Dibujar líneas (incluyendo líneas a lo largo de calles) y formas.
  • Invitación y administración de colaboradores.
  • No hay capas.
  • Los mapas se pueden valorar y comentar.
  • Cada marcador se puede editar, incluyendo código HTML e imágenes (sólo mediante URL).
  • Permite ver fotos de otros usuarios.
  • Posibilidad de superponer rutas de tráfico.
  • Ofrece código de inserción en página web con iframe.

Maps Engine Lite

  • Máximo número de capas: 3.
  • Sin contador de visitas.
  • Formatos de importación: CSV, XLSX, KML.
  • Dibujar líneas (sin líneas a lo largo de calles), rutas (pie, coche, bici), marcadores.
  • Medición de distancias y áreas.
  • Posibilidad de añadir indicadores (se almacenan en una capa).
  • Se pueden añadir fotos o vídeos a cada marcador, pero sólo si están almacenados en Google, GoogleDrive, YouTube o URL.
  • Tabla con los elementos almacenados y diferentes atributos. Pinchando en las columnas de la tabla se activa directamente el elemento en el mapa.
  • Mayor variedad de mapas base.
  • Puedes escoger qué etiqueta de la tabla de datos aparece junto a cada elemento del mapa.
  • Puedes definir diferentes marcadores según las etiquetas de la tabla de datos.


[En español]
A very simple and fast  way of building maps is Google Maps Engine Lite (it is free, unlike other versions like Maps Engine Pro or Maps Engine, which have a fee).

So, you should enter https://maps.google.com and log in with your Google account. Then, you can generate a new map using Maps Engine Lite, or access those maps you previously created; maps created with the classic version of Google Maps can be accessed if, once you select “My maps”, you choose “See all your maps” and then you click “Classic my maps”. After you have created a map, you can use it privately, or you can share it publicly or just with an audience of your interest.

As an example, this map was generated with Google Maps, and this one was created using Maps Engine Lite. Furthermore, here you can find a comparative of the three versions of Google Maps Engine.

For those who are used to the classic version, Maps Engine Lite does not work exactly in the same way; in the following you will find the differences  between them. Maps Engine Lite offers more possibilities (CSV import, layers, data table), but I miss the visit counter provided by the classic version, since now it is not possible to know how many visits has any of your maps; besides, I do not like that photos/videos to be added to the markers cannot be stored in your computer, but in the internet.

Google Maps

  • It has visit counter.
  • Import: KML, KMZ, GeoRSS.
  • It allows to draw lines (including lines along roads) and shapes.
  • Invitation and managing collaborators.
  • No layers.
  • Maps can be evaluated and commented.
  • Markers can be edited, including HTML code and images (only via URL).
  • You can see photos of other users.
  • You can see traffic routes.
  • It provides a HTML insertion code via iframe.

Maps Engine Lite

  • Maximum number of layers: 3.
  • No visit counter.
  • Import: CSV, XLSX, KML.
  • You can draw lines (no lines along road option), routes (driving, biking, walking), markers.
  • Distances and areas measurements.
  • You can add directions (they are stored in one layer).
  • You can add photos/videos to markers, but only if they are stored in Google, GoogleDrive, YouTube or URL.
  • Table with elements and their different attributes. Clicking on the columns of the table, each element on the map is also selected.
  • Greater variety of base maps.
  • You can choose which label of the data table is shown beside the element of the maps.
  • You can define different markers according to labels in the data table.

PostgreSQL/PostGIS + WWW SQL Designer + gvSIG (III)

Facebooktwittergoogle_plusredditpinterestlinkedinmail


[In English]
Para terminar con esta serie de posts, esta es mi experiencia con WWW SQL Designer:

  • WWW SQL Designer permite importar una BD de un servidor en el entorno de diseño, pero no permite exportar un diseño directamente sobre una BD en un servidor. Para importar tu diseño en una BD, la opción más sencilla es Save/Load -> Generate SQL (seleccionar el SQL apropiado para la BD que uses) -> Copiar el código (recomendable guardarlo en fichero) -> Abrir la BD y ejecutar el SQL.
  • Estoy usando lampp, así que eso influye en dónde están instalados php y WWW SQL Designer.
  • Instrucciones de instalación:

https://code.google.com/p/wwwsqldesigner/wiki/Installation

  • Modificaciones a las instrucciones de instalación:

create user “sqlExample” with password ‘mypasswd’;

grant all privileges on database “sqlDesignerExample” TO “sqlExample” with grant option;

  • Modificaciones en fichero index.php en /opt/lampp/htdocs/wwwsqldesigner-2.7/backend/php-postgresql/index.php

// Parameters for the application database

function setup_saveloadlist() {

Define(“HOST_ADDR”, “localhost”);            // if the database cluster is on the same server as this application use ‘localhost’ otherwise the appropriate address (192.168.0.2 for example).

Define(“PORT_NO”, “5432”);                    // default port is 5432. If you have or had more than one db cluster at the same time, consider ports 5433,… etc.

Define(“DATABASE_NAME”, “sqlDesignerExample”);     // leave as is

Define(“USER_NAME”, “sqlExample”);        // leave as is

Define(“PASSWORD”, “mypasswd”);                    // leave as is

Define(“TABLE”, “wwwsqldesigner”);            // leave as is

}

// Parameters for the database you want to import in the application

function setup_import() {

Define(“HOST_ADDR”, “localhost”);    // if the database cluster is on the same server as this application use ‘localhost’ otherwise the appropriate address (192.168.0.2 for example).

Define(“PORT_NO”, “5432”);            // default port is 5432. If you have or had more than one db cluster at the same time, consider ports 5433,… etc.

Define(“DATABASE_NAME”, “mybd”);    // the database you want to import

Define(“USER_NAME”, “postgres”);    // role having rights to read the database

Define(“PASSWORD”, “mypasswd”);        // password for role

  • Para activar php

Cambiar php.ini: sudo leafpad php.ini en /opt/lampp/etc (leafpad es el editor que yo uso, puede emplearse cualquier otro)

La extensión que hay que descomentar es extension=”pgsql.so” (esa extensión está en /opt/lampp/lib/php/extensions/no-debug-non-zts-20121212 y /usr/lib/php5/20121212)


[En español]
Let’s finisht this set of posts with WWW SQL Designer:

  • WWW SQL Designer allows to import a DB from a server into the design environment, but the other way round (exporting the design directly into the DB server) is not possible.  For importing your design into a DB, the easiest option is Save/Load -> Generate SQL (you should use the proper SQL for your DB) -> Copy that code (it is a good idea to keep it in a file) -> Open your DB and run that code.
  • I am using lampp, so the installation path of php and WWW SQL Designer is related to lampp.
  • Installation instructions:

https://code.google.com/p/wwwsqldesigner/wiki/Installation

  • Some modifications to these instructions:

create user “sqlExample” with password ‘mypasswd’;

grant all privileges on database “sqlDesignerExample” TO “sqlExample” with grant option;

  • Some modifications on file index.php at /opt/lampp/htdocs/wwwsqldesigner-2.7/backend/php-postgresql/index.php

// Parameters for the application database

function setup_saveloadlist() {

Define(“HOST_ADDR”, “localhost”);            // if the database cluster is on the same server as this application use ‘localhost’ otherwise the appropriate address (192.168.0.2 for example).

Define(“PORT_NO”, “5432”);                    // default port is 5432. If you have or had more than one db cluster at the same time, consider ports 5433,… etc.

Define(“DATABASE_NAME”, “sqlDesignerExample”);     // leave as is

Define(“USER_NAME”, “sqlExample”);        // leave as is

Define(“PASSWORD”, “mypasswd”);                    // leave as is

Define(“TABLE”, “wwwsqldesigner”);            // leave as is

}

// Parameters for the database you want to import in the application

function setup_import() {

Define(“HOST_ADDR”, “localhost”);    // if the database cluster is on the same server as this application use ‘localhost’ otherwise the appropriate address (192.168.0.2 for example).

Define(“PORT_NO”, “5432”);            // default port is 5432. If you have or had more than one db cluster at the same time, consider ports 5433,… etc.

Define(“DATABASE_NAME”, “mybd”);    // the database you want to import

Define(“USER_NAME”, “postgres”);    // role having rights to read the database

Define(“PASSWORD”, “mypasswd”);        // password for role

  • php activation:

Change php.ini: sudo leafpad php.ini en /opt/lampp/etc (leafpad is my text editor, of course you can use any other)

The extension to be uncommented is  extension=”pgsql.so” (it can be found at /opt/lampp/lib/php/extensions/no-debug-non-zts-20121212 and /usr/lib/php5/20121212)