Base de datos de países, regiones, ciudades, códigos postales y otra información geográfica

Escrito por el .
programacion planeta-codigo
Enlace permanente Comentarios

Entre las funcionalidades habituales en una aplicación está un formulario para introducir una dirección. El formulario de dirección consta de varios campos en el que suele ser recomendable realizar unas mínimas validaciones como que el código postal o ciudad sea correcto para evitar errores inadvertidos del usuario o intencionados con información incorrecta. La base de datos de GeoNames proporciona información geográfica muy útil y de forma gratuita que incluye países, ciudades, subdivisiones administrativas, códigos postales, nombres en diferentes idiomas y mucha otra información de todos los paises del mundo.

No todo son microservicios es más ni siquiera estos son la mejor opción en muchos casos, las cosas mundanas tienen también mucha importancia en la aplicación cómo ordenar alfabéticamente cadenas o introducir una dirección postal. Es habitual un formulario en el que haya que introducir direcciones lo que incluye códigos postales, ciudad, país y quizá adicionalmente un teléfono.

Lo que parece un simple formulario con varios campos de datos se complica cuando hay que validar los códigos postales, ciudad de un país o al incluir información de las diferentes subdivisiones administrativas. Más si en el formulario hay que tener en cuenta las diferentes variaciones según cada país, los códigos postales de España son muy diferentes de los de Reino Unido lo que significa que la expresión regular es muy diferente y según la normativa del país.

Estas tareas que parecen sencillas realmente tienen su dificultad, ordenar caracteres alfabéticamente se complica ya que hay que tener en cuenta las tildes o mayúsculas y minúsculas y validar direcciones para recibir datos correctos requiere validaciones y conocer cuales son los valores válidos.

El listado de países, unidades administrativas como comunidades autónomas, ciudades y códigos postales además del código del prefijo telefónico del país o zona horaria es habitual configurarlo como información más o menos estática en las aplicaciones ya sea en una base de datos o en archivos de configuración.

La base de datos de información geográfica de GeoNames

Una fuente que permite obtener esta información geográfica es la página de GeoNames que tiene una licencia de Creative Commons. La base de datos de información está compuesta por varios archivos CSV muchos separados por tabuladores con las varias columnas de información. En el archivo README hay una lista de los archivos de los que consta la base de datos.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
XX.zip                   : features for country with iso code XX, see 'geoname' table for columns. 'no-country' for features not belonging to a country.
allCountries.zip         : all countries combined in one file, see 'geoname' table for columns
cities500.zip            : all cities with a population > 500 or seats of adm div down to PPLA4 (ca 185.000), see 'geoname' table for columns
cities1000.zip           : all cities with a population > 1000 or seats of adm div down to PPLA3 (ca 130.000), see 'geoname' table for columns
cities5000.zip           : all cities with a population > 5000 or PPLA (ca 50.000), see 'geoname' table for columns
cities15000.zip          : all cities with a population > 15000 or capitals (ca 25.000), see 'geoname' table for columns
alternateNamesV2.zip     : alternate names with language codes and geonameId, file with iso language codes, with new columns from and to
alternateNames.zip       : obsolete use V2, this file does not have the new columns to and from and will be removed in the future
admin1CodesASCII.txt     : names in English for admin divisions. Columns: code, name, name ascii, geonameid
admin2Codes.txt          : names for administrative subdivision 'admin2 code' (UTF8), Format : concatenated codes <tab>name <tab> asciiname <tab> geonameId
iso-languagecodes.txt    : iso 639 language codes, as used for alternate names in file alternateNames.zip
featureCodes.txt         : name and description for feature classes and feature codes 
timeZones.txt            : countryCode, timezoneId, gmt offset on 1st of January, dst offset to gmt on 1st of July (of the current year), rawOffset without DST
countryInfo.txt          : country information : iso codes, fips codes, languages, capital ,...
archives.txt
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
The main 'geoname' table has the following fields :
---------------------------------------------------
geonameid         : integer id of record in geonames database
name              : name of geographical point (utf8) varchar(200)
asciiname         : name of geographical point in plain ascii characters, varchar(200)
alternatenames    : alternatenames, comma separated, ascii names automatically transliterated, convenience attribute from alternatename table, varchar(10000)
latitude          : latitude in decimal degrees (wgs84)
longitude         : longitude in decimal degrees (wgs84)
feature class     : see http://www.geonames.org/export/codes.html, char(1)
feature code      : see http://www.geonames.org/export/codes.html, varchar(10)
country code      : ISO-3166 2-letter country code, 2 characters
cc2               : alternate country codes, comma separated, ISO-3166 2-letter country code, 200 characters
admin1 code       : fipscode (subject to change to iso code), see exceptions below, see file admin1Codes.txt for display names of this code; varchar(20)
admin2 code       : code for the second administrative division, a county in the US, see file admin2Codes.txt; varchar(80) 
admin3 code       : code for third level administrative division, varchar(20)
admin4 code       : code for fourth level administrative division, varchar(20)
population        : bigint (8 byte int) 
elevation         : in meters, integer
dem               : digital elevation model, srtm3 or gtopo30, average elevation of 3''x3'' (ca 90mx90m) or 30''x30'' (ca 900mx900m) area in meters, integer. srtm processed by cgiar/ciat.
timezone          : the iana timezone id (see file timeZone.txt) varchar(40)
modification date : date of last modification in yyyy-MM-dd format
table-geoname.txt
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
The table 'alternate names' :
-----------------------------
alternateNameId   : the id of this alternate name, int
geonameid         : geonameId referring to id in table 'geoname', int
isolanguage       : iso 639 language code 2- or 3-characters; 4-characters 'post' for postal codes and 'iata','icao' and faac for airport codes, fr_1793 for French Revolution names,  abbr for abbreviation, link to a website (mostly to wikipedia), wkdt for the wikidataid, varchar(7)
alternate name    : alternate name or name variant, varchar(400)
isPreferredName   : '1', if this alternate name is an official/preferred name
isShortName       : '1', if this is a short name like 'California' for 'State of California'
isColloquial      : '1', if this alternate name is a colloquial or slang term. Example: 'Big Apple' for 'New York'.
isHistoric        : '1', if this alternate name is historic and was used in the past. Example 'Bombay' for 'Mumbai'.
from		  : from period when the name was used
to		  : to period when the name was used
table-alternate-names.txt

countryInfo.txt

Este archivo contiene la lista de países. Entre su información está el código del país, las expresiones regulares de los códigos postales, el prefijo del teléfono, código de la divisa, lenguaje entre otra información como población, superficie y la capital además de los países vecinos.

1
2
ES	ESP	724	SP	Spain	Madrid	504782	46723749	EU	.es	EUR	Euro	34	#####	^(\d{5})$	es-ES,ca,gl,eu,oc	2510769	AD,PT,GI,FR,MA	

country-es.txt

allCountries.zip y XX.zip

El archivo allCountries.zip contiene las ciudades de todos los países (todos los archivos XX.zip) y en los archivos XX.zip están las ciudades de un país en concreto, ES.zip para las ciudades de España. Contienen el código ciudad, latitud y longitud, zona horaria y los códigos de las unidades administrativas junto con su población, elevación e identificador geonameid

1
2
3128026	Bilbao	Bilbao	BIO,Bil'baa,Bil'bao,Bilbao,Bilbau,Bilbaum,Bilbaw,Bilbo,Bilbo / Bilbao,Bilmpao,El Bocho,bi er ba e,bil ba xo,bilba'o,bilbao,birubao,blbaw,bylbaw,bylbayw,Μπιλμπάο,Билбао,Бильбао,Більбаа,Більбао,Բիլբաո,בילבאו,بلباو,بیلبائو,بیلباو,बिल्बाओ,บิลบาโอ,ბილბაო,ビルバオ,毕尔巴鄂,빌바오

es-bilbao.txt

Hay varios archivos de ciudades filtrados según si superan una cantidad de población, cities500.zip, cities1000.zip, cities5000.zip, cities15000.zip. Las columnas son las mismas que las del archivo anterior donde están agrupadas por país pero en este están agrupadas por población.

1
2
3128026	Bilbao	Bilbao	BIO,Bil'baa,Bil'bao,Bilbao,Bilbau,Bilbaum,Bilbaw,Bilbo,Bilbo / Bilbao,Bilmpao,El Bocho,bi er ba e,bil ba xo,bilba'o,bilbao,birubao,blbaw,bylbaw,bylbayw,Μπιλμπάο,Билбао,Бильбао,Більбаа,Більбао,Բիլբաո,בילבאו,بلباو,بیلبائو,بیلباو,बिल्बाओ,บิลบาโอ,ბილბაო,ビルバオ,毕尔巴鄂,빌바오

cities15000-bilbao.txt

alternateNamesV2.zip

Contiene diversa información más extendida de cada uno de los geonames, incluyendo su nombre en diferentes idiomas, el conjunto de códigos postales asociados, identificador del aeropuerto y enlaces a la wikipedia.

El archivo alternateNamesV2.txt es tan grande que ocupa varios cientos de megabytes descomprimido de modo que casi no se puede abrir con un editor y hay que recurrir al comando grep para buscar dado el geonameid.

El geonameid de la ciudad de Bilbao es 3128026 y buscando en el archivo se encuentran estas referencias que incluyen los diferentes nombres en diferentes lenguajes, códigos postales, iata y uncl para la denominación del aeropuerto además de otra información como enlaces a la wikipedia. En casi de en un mismo lenguaje haber varios nombres el 1 indica cual es la denominación preferida.

1
2
$ grep "3128026" alternateNamesV2.txt

grep-alternate-names-bilbao.sh
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
1325769	3128026	eu	Bilbo						
1565386	3128026	es	El Bocho						
1968272	3128026	es	Bilbao	1					
1968273	3128026		Bilbao						
2039076	3128026	eu	Bilbao	1					
2039077	3128026	pt	Bilbau						
2039078	3128026	eo	Bilbao						
2148428	3128026	post	48080						
2148598	3128026	post	48002						
2148599	3128026	post	48003						
2148600	3128026	post	48004						
2148601	3128026	post	48070						
2148602	3128026	post	48071						
2148614	3128026	post	48006						
2148615	3128026	post	48014						
2148618	3128026	post	48008						
2148619	3128026	post	48015						
2148621	3128026	post	48007						
2148622	3128026	post	48005						
2148623	3128026	post	48012						
2148650	3128026	post	48001						
2148652	3128026	post	48009						
2148653	3128026	post	48013						
2148655	3128026	post	48010						
2148670	3128026	post	48011						
2426128	3128026	ru	Бильбао						
2920566	3128026	link	https://en.wikipedia.org/wiki/Bilbao						
3055848	3128026	link	https://ru.wikipedia.org/wiki/%D0%91%D0%B8%D0%BB%D1%8C%D0%B1%D0%B0%D0%BE						
5882689	3128026	ja	ビルバオ						
5882690	3128026	cy	Bilbo						
5882691	3128026	os	Бильбао						
5882692	3128026	ce	Билбао						
5882693	3128026	fa	بیلبائو						
5882694	3128026	sr	Билбао						
5882695	3128026	uk	Більбао						
5882696	3128026	br	Bilbo						
5882697	3128026	ug	Bilbaw						
5882698	3128026	ext	Bilbau						
5882699	3128026	el	Μπιλμπάο						
5882700	3128026	ko	빌바오						
5882701	3128026	bg	Билбао						
5882702	3128026	he	בילבאו						
5882703	3128026	be	Більбаа						
5882704	3128026	la	Bilbaum						
5882705	3128026	an	Bilbau						
5882706	3128026	ka	ბილბაო						
5882707	3128026	th	บิลบาโอ						
5882708	3128026	zh	毕尔巴鄂						
5882709	3128026	ar	بلباو						
5882710	3128026	mr	बिल्बाओ						
5882711	3128026	gl	Bilbo						
5882712	3128026	pms	Bilbo / Bilbao						
5882713	3128026	mhr	Бильбао						
6634068	3128026	iata	BIO						
8183693	3128026	hy	Բիլբաո						
8183694	3128026	mn	Бильбао						
8183695	3128026	xmf	ბილბაო						
8183696	3128026	ckb	بیلباو						
8183697	3128026	kk	Бильбао						
13750954	3128026	unlc	ESBIO						
3128026	134091	fa	Gerakān
grep-alternate-names-bilbao.out

admin1CodesASCII.txt

Contiene las unidades administrativas del primer nivel, en el caso de España son las comunidades autónomas. El archivo incluye el geonameid asociado a la comunidad autónoma.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
ES.31	Murcia	Murcia	2513413
ES.CE	Ceuta	Ceuta	2519582
ES.07	Balearic Islands	Balearic Islands	2521383
ES.51	Andalusia	Andalusia	2593109
ES.53	Canary Islands	Canary Islands	2593110
ES.54	Castille-La Mancha	Castille-La Mancha	2593111
ES.57	Extremadura	Extremadura	2593112
ES.60	Valencia	Valencia	2593113
ES.34	Asturias	Asturias	3114710
ES.32	Navarre	Navarre	3115609
ES.29	Madrid	Madrid	3117732
ES.27	La Rioja	La Rioja	3336897
ES.39	Cantabria	Cantabria	3336898
ES.52	Aragon	Aragon	3336899
ES.55	Castille and León	Castille and Leon	3336900
ES.56	Catalonia	Catalonia	3336901
ES.58	Galicia	Galicia	3336902
ES.59	Basque Country	Basque Country	3336903
ES.ML	Melilla	Melilla	6362988
admin1-es.txt

admin2Codes.txt

Contiene las unidades administrativas del segundo nivel, en el caso de España son las provincias. El archivo incluye el geonameid asociado a la provincia.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
ES.60.V	Província de València	Provincia de Valencia	2509951
ES.54.TO	Province of Toledo	Province of Toledo	2510407
ES.51.SE	Provincia de Sevilla	Provincia de Sevilla	2510910
ES.53.TF	Provincia de Santa Cruz de Tenerife	Provincia de Santa Cruz de Tenerife	2511173
ES.51.MA	Provincia de Málaga	Provincia de Malaga	2514254
ES.53.GC	Provincia de Las Palmas	Provincia de Las Palmas	2515271
ES.51.J	Provincia de Jaén	Provincia de Jaen	2516394
ES.51.H	Provincia de Huelva	Provincia de Huelva	2516547
ES.51.GR	Provincia de Granada	Provincia de Granada	2517115
ES.54.CU	Provincia de Cuenca	Provincia de Cuenca	2519034
ES.51.CO	Province of Córdoba	Province of Cordoba	2519239
ES.54.CR	Provincia de Ciudad Real	Provincia de Ciudad Real	2519401
ES.51.CA	Provincia de Cádiz	Provincia de Cadiz	2520597
ES.57.CC	Provincia de Cáceres	Provincia de Caceres	2520610
ES.57.BA	Provincia de Badajoz	Provincia de Badajoz	2521419
ES.51.AL	Almería	Almeria	2521883
ES.60.A	Provincia de Alicante	Provincia de Alicante	2521976
ES.54.AB	Provincia de Albacete	Provincia de Albacete	2522257
ES.52.Z	Provincia de Zaragoza	Provincia de Zaragoza	3104323
ES.55.ZA	Provincia de Zamora	Provincia de Zamora	3104341
ES.59.BI	Bizkaia	Bizkaia	3104469
ES.55.VA	Provincia de Valladolid	Provincia de Valladolid	3106671
ES.52.TE	Provincia de Teruel	Provincia de Teruel	3108125
ES.56.T	Província de Tarragona	Provincia de Tarragona	3108287
ES.55.SO	Provincia de Soria	Provincia de Soria	3108680
ES.55.SG	Provincia de Segovia	Provincia de Segovia	3109254
ES.39.S	Provincia de Cantabria	Provincia de Cantabria	3109716
ES.55.SA	Provincia de Salamanca	Provincia de Salamanca	3111107
ES.58.PO	Provincia de Pontevedra	Provincia de Pontevedra	3113208
ES.55.P	Provincia de Palencia	Provincia de Palencia	3114530
ES.58.OR	Provincia de Ourense	Provincia de Ourense	3114964
ES.58.LU	Provincia de Lugo	Provincia de Lugo	3117813
ES.55.LE	Provincia de León	Provincia de Leon	3118528
ES.58.C	Provincia da Coruña	Provincia da Coruna	3119840
ES.52.HU	Provincia de Huesca	Provincia de Huesca	3120513
ES.59.SS	Gipuzkoa	Provincia de Guipuzcoa	3120935
ES.54.GU	Provincia de Guadalajara	Provincia de Guadalajara	3121069
ES.60.CS	Província de Castelló	Provincia de Castello	3125881
ES.55.BU	Provincia de Burgos	Provincia de Burgos	3127460
ES.56.B	Província de Barcelona	Provincia de Barcelona	3128759
ES.55.AV	Provincia de Ávila	Provincia de Avila	3129138
ES.59.VI	Araba / Álava	Araba / Alava	3130717
ES.56.GI	Província de Girona	Provincia de Girona	6355230
ES.56.L	Província de Lleida	Provincia de Lleida	6355231
ES.27.LO	Provincia de La Rioja	Provincia de La Rioja	6355232
ES.29.M	Provincia de Madrid	Provincia de Madrid	6355233
ES.31.MU	Murcia	Murcia	6355234
ES.32.NA	Provincia de Navarra	Provincia de Navarra	6355235
ES.34.O	Province of Asturias	Province of Asturias	6355236
ES.07.PM	Illes Balears	Illes Balears	6424360
ES.CE.CE	Ceuta	Ceuta	8335119
ES.ML.ME	Melilla	Melilla	8335120
admin2-es.txt

featureCodes.txt, timeZones.txt y hierarchy.zip

Los geonames pueden tener un metadato asociado con varios identificadores que en la documentación se denominan features, hay varias categorías de identificadores y varios identificadores dentro de cada categoría. Por ejemplo, la feature P se utiliza para ciudades y villas y PPLA1, PPLA2, PPLA3, PPLA4, PPLA5 indica el nivel de unidad administrativa. Las features permiten conocer a qué representa el geoname por ejemplo si es un aeropuerto o una universidad entre muchos otros elementos.

El archivo hierarchy.zip permite reconstruir la relación jerárquica de los diferentes geonames

shapes_all_low.zip

Contiene el polígono del geoname que permite una representación gráfica de su superficie, por ejemplo del país.

1
2
337996	{"type":"Polygon","coordinates":[[[37.916,14.894],[38.045,14.72],[38.258,14.679],[38.455,14.413],[38.797,14.467],[38.978,14.545],[39.032,14.639],[39.154,14.653],[39.261,14.516],[39.252,14.409],[39.346,14.466],[39.373,14.54],[39.538,14.491],[39.508,14.55],[39.587,14.609],[39.77,14.546],[39.93,14.415],[40.127,14.547],[40.213,14.387],[40.26,14.411],[40.942,14.082],[41.249,13.61],[41.644,13.386],[42.056,12.801],[42.218,12.765],[42.404,12.469],[41.973,11.839],[41.835,11.733],[41.771,11.493],[41.81,11.278],[41.787,10.979],[41.947,10.913],[42.066,10.927],[42.146,10.983],[42.42,10.982],[42.634,11.096],[42.689,11.055],[42.752,11.08],[42.79,10.988],[42.967,10.997],[42.67,10.624],[42.799,10.452],[42.854,10.219],[43.009,10.086],[43.087,9.903],[43.255,9.847],[43.299,9.606],[43.396,9.554],[43.46,9.419],[43.643,9.357],[43.995,9.003],[47.001,8.001],[48.001,8.001],[44.97,4.913],[44.01,4.959],[43.635,4.855],[43.082,4.607],[42.844,4.284],[42.541,4.211],[42.079,4.179],[41.945,4.01],[41.833,3.947],[41.718,3.994],[41.677,3.958],[41.551,3.983],[41.197,3.937],[40.756,4.285],[39.866,3.871],[39.773,3.672],[39.553,3.405],[39.493,3.471],[39.192,3.483],[39.079,3.545],[38.903,3.517],[38.712,3.577],[38.684,3.629],[38.576,3.609],[38.536,3.659],[38.446,3.607],[38.127,3.61],[37.029,4.388],[36.843,4.452],[36.05,4.457],[35.94,4.551],[35.949,4.631],[35.809,4.791],[35.862,5.32],[35.538,5.424],[35.316,5.335],[35.315,5.498],[35.126,5.624],[35.13,5.687],[34.998,5.897],[35.005,6.075],[34.95,6.247],[35.022,6.447],[34.939,6.558],[34.864,6.611],[34.768,6.594],[34.64,6.74],[34.531,6.745],[34.543,6.817],[34.471,6.919],[34.293,6.948],[34.305,6.978],[34.192,7.041],[34.19,7.132],[34.022,7.246],[34.002,7.421],[33.716,7.663],[33.542,7.694],[33.47,7.752],[33.323,7.708],[33.247,7.779],[33.046,7.79],[32.998,7.944],[33.121,8.111],[33.193,8.129],[33.17,8.296],[33.219,8.435],[33.618,8.472],[33.7,8.378],[33.769,8.368],[33.876,8.411],[33.903,8.486],[34.024,8.489],[34.145,8.607],[34.102,9.557],[34.224,9.887],[34.233,10.049],[34.334,10.119],[34.295,10.585],[34.466,10.814],[34.603,10.906],[34.795,10.754],[34.786,10.706],[34.868,10.731],[34.869,10.805],[34.987,10.89],[34.953,10.949],[35.001,11.187],[34.928,11.241],[35.077,11.535],[35.044,11.734],[35.27,11.944],[35.662,12.637],[36.009,12.724],[36.16,12.697],[36.176,12.904],[36.143,12.948],[36.497,13.835],[36.466,13.978],[36.556,14.284],[36.866,14.322],[37.018,14.252],[37.097,14.275],[37.135,14.41],[37.312,14.448],[37.523,14.182],[37.916,14.894]]]}

shape-es.txt

Información de la base de datos

Cada uno de los elementos geográficos tiene asociado un identificador de geonameid, con este identificador es posible obtener más información en el archivo alternateNamesV2.zip y relacionar la información de unos archivos con la información de otros archivos. La información que incluyen están en columnas separadas por tabuladores, las columnas son las indicadas en estructura de la tabla geoname y alternate names.

Los archivos contienen mucha información, posiblemente en una aplicación solo interese parte de toda esa información y se puede ignorar el resto. Por ejemplo, en la información de los países se incluye su extensión de superficie, población, continente moneda, lenguaje o la capital del país que para validar direcciones no es necesaria pero la moneda o lenguajes es útil para mostrar precios o textos según el idioma del país.

Hay otra información muy útil como los nombres de las ciudades en diferentes idiomas e incluso las abreviaturas de los aeropuertos. Por supuesto están las expresiones regulares de los códigos postales o los códigos de prefijo de los teléfonos, los propios del país conoceremos pero la de muchos otros países seguro que no.

La expresión regular de España es esta.

1
2
^(\d{5})$

regexp-es.txt

La de Reino Unido es esta otra.

1
2
^([Gg][Ii][Rr]\s?0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([A-Za-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z]))))\s?[0-9][A-Za-z]{2})$

regexp-uk.txt

Cómo acceder a la información

Los archivos son muy grandes, seguramente no sea necesaria toda la información y no está en el formato adecuado para un rápido acceso al dato que se necesita en una aplicación, con lo que hay que procesarlos para adaptarlos. Los archivos son archivos de texto con los datos de las columnas separados por tabuladores, una librería para procesar los archivos con el lenguaje Java es OpenCSV.

Es necesario procesar los archivos de alguna forma para extraer y transformar la información de los archivos de GeoNames a un formato adecuado para la aplicación posiblemente con un script en el lenguaje Groovy, Java, Kotlin u otro lenguaje. La información geográfica quizá no cambie muy habitualmente pero seguramente hay que procesar los archivos cada cierto tiempo o si por alguna circunstancia se produce un cambio significativo que requiera una actualización.

Una vez disponible la información en la aplicación conviene crear una serie de clases que hagan de fachada en el acceso a la información de tal forma que el resto del código no se acople a la implementación interna de los datos que puede cambiar en el futuro. Hay varias formas de implementación, una en que las clases de información geográfica serían un módulo en la aplicación y propietaria de los datos geográficos. Otra opción es que las tablas estén en una base de datos y sea compartida por varias aplicaciones, en este caso las tablas o vistas se convierten en una interfaz para las aplicaciones.


Comparte el artículo: