Ene 252014
 

Geonames es una base de datos de información geográfica que contiene datos sobre más de 10 millones de topónimos de todo el mundo, incluyendo poblaciones, ríos, montañas, etc…, a los que asocia unas coordenadas, altitud, y otros datos.

Esta base de datos se alimenta de distintas fuentes oficiales, y de la información proporcionada por usuarios de todo el mundo, siguiendo el modelo de “crowdsourcing” que tan buenos resultados da en este tipo de proyectos.

Geonames se ofrece gratuitamente, y puede ser consultada a traves de una serie de webservices, para los cuales existen librerías de cliente en distintos lenguages de programacion. Además, es posible descargar un volcado de la base de datos completa que se genera diariamente.

En este artículo se explica la manera de cargar el volcado de Geonames en una base de datos MySQL, y se analiza la estructura y el contenido de esta interesante base de datos.

 Descarga de los ficheros

El volcado de la base de datos de geonames se realiza sobre una serie de ficheros, que hay que descargar desde su servidor:

$ mkdir /geonames
$ cd /geonames

$ wget http://download.geonames.org/export/dump/allCountries.zip
$ wget http://download.geonames.org/export/dump/alternateNames.zip
$ wget http://download.geonames.org/export/dump/admin1Codes.txt
$ wget http://download.geonames.org/export/dump/admin1CodesASCII.txt
$ wget http://download.geonames.org/export/dump/featureCodes_en.txt
$ wget http://download.geonames.org/export/dump/timeZones.txt
$ wget http://download.geonames.org/export/dump/countryInfo.txt
$ wget http://download.geonames.org/export/dump/hierarchy.zip

A continuación, descomprimimos los dos ficheros que han sido descargados en formato zip:

$ unzip allCountries.zip
$ unzip alternateNames.zip
$ unzip hierarchy.zip

allCountries.zip es el fichero de mayor tamaño (235 MB). Al descomprimirlo, obtenemos el fichero allCountries.txt, que ocupa 1.1 GB.

Al descomprimier alternateNames.zip obtenemos los ficheros “iso-languagecodes.txt” y “alternateNames.txt” (290 MB).

Nota: Si sólo nos interesa obtener los datos para uno o varios países, en lugar de descargar el fichero allCountries.zip, se pueden descargar ficheros con nombres de la forma “COUNTRY_CODE.zip” (p.ej., ES.zip para España)

Creación de la base de datos MySQL y de las tablas

Para albergar los datos descargados, creamos en mysql una base de datos “geonames”:

mysql> create database geonames;

y a continuación ejecutamos el script geonames.sql, que crea las tablas necesarias y carga los datos:

$ mysql geonames --local-infile < geonames.sql

Tabla geonames

La tabla geonames es la tabla principal de la base de datos. Consta de los campos:

  `geonameid` int(10) unsigned NOT NULL DEFAULT '0',
  `name` varchar(200) NOT NULL DEFAULT '',
  `ansiname` varchar(200) NOT NULL DEFAULT '',
  `alternatenames` varchar(2000) NOT NULL DEFAULT '',
  `latitude` double NOT NULL DEFAULT '0',
  `longitude` double NOT NULL DEFAULT '0',
  `feature_class` char(1) DEFAULT NULL,
  `feature_code` varchar(10) DEFAULT NULL,
  `country_code` char(2) DEFAULT NULL,
  `cc2` varchar(60) DEFAULT NULL,
  `admin1_code` varchar(20) DEFAULT '',
  `admin2_code` varchar(80) DEFAULT '',
  `admin3_code` varchar(20) DEFAULT '',
  `admin4_code` varchar(20) DEFAULT '',
  `population` bigint(11) DEFAULT '0',
  `elevation` int(11) DEFAULT '0',
  `gtopo30` int(11) DEFAULT '0',
  `timezone` varchar(40) DEFAULT NULL,
  `modification_date` date DEFAULT '0000-00-00'

Una vez cargada, podemos ver que continene más de 8 millones de registros:

mysql> select count(1) total from geonames;
+---------+
| total   |
+---------+
| 8567061 |
+---------+

Los campos de la tabla geonames contienen la siguiente información:

  • geonameid – es un identificador numérico que constituye la clave única de la tabla
  • name, latitude, longitude – Nombre y coordenadas.
  • ansiname, altternatenames
  • feature_class – Un carácter que establece un primer nivel de categorización de los geonames, como sigue:
    +---------------+---------+
    | feature_class | total   |
    +---------------+---------+
    |               |    5293 | - Sin clasificar
    | U             |   13954 | - Accidentes geográficos submarinos
    | V             |   30761 | - Bosques, areas cultivadas, viñedos,...
    | R             |   35711 | - Carreteras y vías férreas
    | A             |  302015 | - Divisiones administrativas: pais, estado, región,...
    | L             |  308532 | - Areas: parques, zonas forestales, bases militares,...
    | T             | 1078717 | - Accidentes geográficos: montañas, colinas, playas,...
    | H             | 1738293 | - Accidentes fluviales: río, lago, canal,...
    | S             | 1805884 | - Puntos: Edificios, aeropuertos, puentes, paradas de autobús,...
    | P             | 3247901 | - Poblaciones: ciudades, pueblos, aldeas,...
    +---------------+---------+
  • feature_code
    Segundo nivel de categorización de los geonames. Normalmente hay una o varias de decenas de feature codes por cada feature class.
    Por ejemplo, para la feature class “P” (poblaciones) existen los siguientes feature codes:

    +--------------+---------+
    | feature_code | total   |
    +--------------+---------+
    | PPL          | 2940898 | - lugar poblado
    | PPLL         |  132311 | - localidad poblada
    | PPLX         |   63351 | - sección de lugar poblado
    | PPLQ         |   32941 | - lugar poblado abandonado
    | PPLA4        |   26451 | - cabeza de división administrativa de cuarto orden
    | PPLA3        |   25767 | - cabeza de división administrativa de tercer orden
    | PPLA2        |   11935 | - cabeza de división administrativa de segundo orden
    | PPLF         |    7133 | - población rural, dedicada principalmente a la agricultura
    | PPLA         |    3474 | - cabeza de división administrativa de primer orden
    | PPLW         |    2278 | - lugar poblado destruido
    | PPLH         |     394 | - lugar antiguamente poblado, que ya no existe
    | PPLS         |     392 | - poblaciones: ciudades, pueblos y aldeas
    | STLMT        |     245 | - asentamiento israelí
    | PPLC         |     241 | - capital de una entidad política
    |              |      39 | - Sin clasificar
    | PPLR         |      39 | - Lugar poblado dedicado principalmente a la religión
    | PPLG         |      12 | - sede de un gobierno o de una entidad política
    +--------------+---------+

    Por su parte, para el feature class “A” (divisiones administrativas), existen los siguientes feature codes:

    +--------------+-------+
    | feature_code | total |
    +--------------+-------+
    | ADM1         |  3899 | - Divisiones administrativas de nivel 1 a 5
    | ADM2         | 36319 |
    | ADM3         | 62389 |
    | ADM4         | 97273 |
    | ADM5         | 36224 |
    | ADMD         | 63860 | - Divisiones administrativas sin jerarquía establecida
    | ADM1H        |   338 | - Divisiones administrativas históricas de nivel 1 a 5
    | ADM2H        |   121 |
    | ADM3H        |   168 |
    | ADM4H        |   977 |
    | ADMDH        |     7 | - Divisiones administrativas históricas sin jerarquía establecida
    | PCL          |     3 | - Entidad política
    | PCLI         |   193 | - Entidad política independiente
    | PCLIX        |     7 | - Sección de entidad política independiente
    | PCLS         |     5 | - Entidad política semi-independiente
    | PCLD         |    35 | - Entidad política dependiente
    | PCLF         |     3 | - Estado libre asociado
    | PCLH         |    11 | - Entidad política histórica
    | TERR         |     7 | - Territorio
    | PRSH         |   132 | - Parroquia
    | ZN           |    18 | - Zona
    | LTER         |    16 | - Territorio cedido a otro país (normalmente instalaciones militares)
    |              |     6 | - Sin clasificar
    | ZNB          |     4 | - Tierra de nadie (zona desmilitarizada entre dos países)
    +--------------+-------+

    La relación completa de códigos de categorización de geonames y sus significados se pueden encontrar en http://www.geonames.org/export/codes.html

  • country_code – Código de país de dos caracteres, conforme al estándar ISO-3166
  • cc2 – códigos de país alternativos
  • admin1_code, admin2_code, admin3_code, admin4_code – Códigos correspondientes a divisiones administrativas de primer a cuarto nivel
  • modification_date – fecha de actualización del registro. Podemos ver el estado de actualización del contenido de la base de datos con una consulta de la forma:
    mysql> select year(modification_date),count(1) from geonames
        -> group by year(modification_date) order by year(modification_date);
    +-------------------------+----------+
    | year(modification_date) | count(1) |
    +-------------------------+----------+
    |                    1993 |   301742 |
    |                    1994 |   306188 |
    |                    1995 |    34489 |
    |                    1996 |    46371 |
    |                    1997 |    35338 |
    |                    1998 |    64793 |
    |                    1999 |    24042 |
    |                    2000 |    13517 |
    |                    2001 |    57613 |
    |                    2002 |    41804 |
    |                    2003 |    22128 |
    |                    2004 |    24430 |
    |                    2005 |    80753 |
    |                    2006 |  1357686 |
    |                    2007 |   166714 |
    |                    2008 |    70483 |
    |                    2009 |   101549 |
    |                    2010 |   762618 |
    |                    2011 |   950156 |
    |                    2012 |  3256883 |
    |                    2013 |   814608 |
    |                    2014 |    33156 |
    +-------------------------+----------+

 Publicado por en 9:17 pm

 Deja un comentario

(requerido)

(requerido)