A la feina es va crear fa relativament poc un portal d'OpenData que pot resultar molt útil per als ciutadans, Institucions Públiques, empreses i Universitats, ja que l'objectiu és oferir molta informació amb la qual treballa la Diputació de Castelló.
Aquest portal d'OpenData és accesible des de la url datosabiertos.dipcas.es, i aquesta setmana voliem ampliar un DataSet amb informació dels Ajuntaments de la província. Vam pensar afegir, entre altres coses, la informació sobre latitud/longitud per a geolocalitzar els Ajuntaments, i vaig voler probar la llibreria GeoPy.
El resultat final és aquest, ara ho incorporarem al portal de Dades Obertes:
He creat el repositori GPS-ajuntaments-de-castello al meu GitHub amb el codi font d'un programa que, amb GeoPy, llista tots els ajuntaments de la província de Castelló i agafa al vol les coordenades GPS. I genera un fitxer CSV preparat per a ser importat des del portal de Dades Obertes.
I ací he pujat també un video del funcionament de la generació de les coordenades i creació del document CSV automàticament:
Aquest programeta el vaig fer instal·lant python3.6, pip-36 per a fer instal·lacions, la llibreria GeoPy. Vaig editar el programeta amb l'eMacs. I aquest vídeo o videoscreencast el registre amb ffmpeg al meu OpenBSD on tinc l'escriptori i3-tabs.
Finalment, ací tens el codi (que també està disponible al meu repositori GitHub) és:
#Script que em diu la geolocalització GPS de totes les Entitats
#Locals de la província de Castelló per a poder incorporar-ho
#al projecte d'OpenData de la Diputació de Castelló
#http://datosabiertos.dipcas.es
#
import time
from geopy.geocoders import Nominatim
import ssl
import certifi
import geopy.geocoders
ctx = ssl.create_default_context(cafile=certifi.where())
geopy.geocoders.options.default_ssl_context = ctx
geolocator = Nominatim(user_agent="GPS_ajuntaments_Castello")
eell = [
'AYUNTAMIENTO DE ALBOCÀSSER',
'AYUNTAMIENTO DE BENASSAL',
'AYUNTAMIENTO DE CANET LO ROIG',
'AYUNTAMIENTO DE CATÍ',
'AYUNTAMIENTO DE CERVERA DEL MAESTRE',
'AYUNTAMIENTO DE LES COVES DE VINROMÀ',
'AYUNTAMIENTO DE CULLA',
'AYUNTAMIENTO DE XERT',
'AYUNTAMIENTO DE LA JANA',
'AYUNTAMIENTO DE ROSSELL',
'AYUNTAMIENTO DE LA SALZADELLA',
#'AYUNTAMIENTO DE SAN JORGE',
'AYUNTAMIENTO DE SAN RAFAEL DEL RÍO',
#'AYUNTAMIENTO DE SANT MATEU',
'AYUNTAMIENTO DE LA SERRATELLA',
'AYUNTAMIENTO DE TÍRIG',
'AYUNTAMIENTO DE TRAIGUERA',
'AYUNTAMIENTO DE VILAR DE CANES',
'AYUNTAMIENTO DE AÍN',
'AYUNTAMIENTO DE ALCALÀ DE XIVERT',
'AYUNTAMIENTO DE ALCORA',
'AYUNTAMIENTO DE ALMASSORA',
'AYUNTAMIENTO DE ALMENARA',
'AYUNTAMIENTO DE ALCUDIA DE VEO',
'AYUNTAMIENTO DE ARGELITA',
'AYUNTAMIENTO DE ARTANA',
'AYUNTAMIENTO DE AYÓDAR',
'AYUNTAMIENTO DE BENICARLÓ',
'AYUNTAMIENTO DE BENICÀSSIM',
'AYUNTAMIENTO DE BETXI',
'AYUNTAMIENTO DE BURRIANA',
'AYUNTAMIENTO DE BORRIOL',
'AYUNTAMIENTO DE CÀLIG',
'AYUNTAMIENTO DE CASTELLÓ DE LA PLANA',
'AYUNTAMIENTO DE XILXES',
'AYUNTAMIENTO DE CIRAT',
'AYUNTAMIENTO DE ESLIDA',
'AYUNTAMIENTO DE ESPADILLA',
'AYUNTAMIENTO DE FANZARA',
'AYUNTAMIENTO DE FUENTES DE AYÓDAR',
'AYUNTAMIENTO DE LA LLOSA',
'AYUNTAMIENTO DE MONCOFA',
'AYUNTAMIENTO DE NULES',
'AYUNTAMIENTO DE ONDA',
'AYUNTAMIENTO DE OROPESA DEL MAR',
'AYUNTAMIENTO DE PEÑÍSCOLA',
'AYUNTAMIENTO DE RIBESALBES',
'AYUNTAMIENTO DE SUERA',
'AYUNTAMIENTO DE SANTA MAGDALENA DE PULPIS',
'AYUNTAMIENTO DE TALES',
'AYUNTAMIENTO DE TOGA',
#'AYUNTAMIENTO DE TORRALBA DEL PINAR',
'AYUNTAMIENTO DE TORRECHIVA',
'AYUNTAMIENTO DE VALLAT',
'AYUNTAMIENTO DE LA VALL D\'UIXÓ',
'AYUNTAMIENTO DE VILLAMALUR',
'AYUNTAMIENTO DE VILA-REAL',
'AYUNTAMIENTO DE LA VILAVELLA',
'AJUNTAMENT DE LES ALQUERIES',
'AYUNTAMIENTO DE VINARÒS',
'AJUNTAMENT DE SANT JOAN DE MORÓ',
'AYUNTAMIENTO DE CASTILLO DE VILLAMALEFA',
'AYUNTAMIENTO DE CORTES DE ARENOSO',
'AYUNTAMIENTO DE COSTUR',
'AYUNTAMIENTO DE FIGUEROLES',
'AYUNTAMIENTO DE LLUCENA',
'AYUNTAMIENTO DE VILLAHERMOSA DEL RÍO',
'AYUNTAMIENTO DE LUDIENTE',
'AYUNTAMIENTO DE ZUCAINA',
'AYUNTAMIENTO DE ARES DEL MAESTRAT',
'AYUNTAMIENTO DE CASTELL DE CABRES',
'AYUNTAMIENTO DE CASTELLFORT',
'AYUNTAMIENTO DE CINCTORRES',
'AYUNTAMIENTO DE FORCALL',
'AYUNTAMIENTO DE MORELLA',
'AYUNTAMIENTO DE HERBÉS',
'AYUNTAMIENTO DE LA MATA DE MORELLA',
'AYUNTAMIENTO DE OLOCAU DEL REY',
'AYUNTAMIENTO DE PALANQUES',
'AYUNTAMIENTO DE PORTELL DE MORELLA',
'AYUNTAMIENTO DE POBLA DE BENIFASSÀ',
'AYUNTAMIENTO DE TODOLELLA',
#'AYUNTAMIENTO DE VILAFRANCA DEL CID',
'AYUNTAMIENTO DE VALLIBONA',
'AYUNTAMIENTO DE VILLORES',
'AYUNTAMIENTO DE ZORITA DEL MAESTRAZGO',
'AYUNTAMIENTO DE ALFONDEGUILLA',
'AYUNTAMIENTO DE ALGIMIA DE ALMONACID',
'AYUNTAMIENTO DE ALMEDÍJAR',
'AYUNTAMIENTO DE ALTURA',
'AYUNTAMIENTO DE ARAÑUEL',
'AYUNTAMIENTO DE AZUÉBAR',
'AYUNTAMIENTO DE BARRACAS',
'AYUNTAMIENTO DE BEJÍS',
'AYUNTAMIENTO DE BENAFER',
'AYUNTAMIENTO DE CASTELLNOVO',
'AYUNTAMIENTO DE CAUDIEL',
'AYUNTAMIENTO DE CHÓVAR',
'AYUNTAMIENTO DE FUENTE LA REINA',
'AYUNTAMIENTO DE GAIBIEL',
'AYUNTAMIENTO DE GELDO',
'AYUNTAMIENTO DE HIGUERAS',
'AYUNTAMIENTO DE JÉRICA',
'AYUNTAMIENTO DE MATET',
'AYUNTAMIENTO DE MONTÁN',
'AYUNTAMIENTO DE MONTANEJOS',
'AYUNTAMIENTO DE NAVAJAS',
'AYUNTAMIENTO DE PAVÍAS',
'AYUNTAMIENTO DE PINA DE MONTALGRAO',
'AYUNTAMIENTO DE PUEBLA DE ARENOSO',
'AYUNTAMIENTO DE SACAÑET',
'AYUNTAMIENTO DE SEGORBE',
'AYUNTAMIENTO DE SONEJA',
'AYUNTAMIENTO DE SOT DE FERRER',
'AYUNTAMIENTO DE TERESA',
'AYUNTAMIENTO DE TORÁS',
'AYUNTAMIENTO DE EL TORO',
'AYUNTAMIENTO DE VALL DE ALMONACID',
'AYUNTAMIENTO DE VILLANUEVA DE VIVER',
'AYUNTAMIENTO DE VIVER',
'AYUNTAMIENTO DE ATZENETA DEL MAESTRAT',
'AYUNTAMIENTO DE BENAFIGOS',
'AYUNTAMIENTO DE BENLLOCH',
'AYUNTAMIENTO DE CABANES',
'AYUNTAMIENTO DE XODOS',
'AYUNTAMIENTO DE LA POBLA TORNESA',
'AYUNTAMIENTO DE SIERRA ENGARCERÁN',
#'AYUNTAMIENTO DE TORRE DE ENBESORA',
#'AYUNTAMIENTO DE LA TORRE DE ENDOMÉNEC',
'AYUNTAMIENTO DE LES USERES',
'AYUNTAMIENTO DE LA VALL D\'ALBA',
'AYUNTAMIENTO DE VILAFAMÉS',
'AYUNTAMIENTO DE VILANOVA D\'ALCOLEA',
#'AYUNTAMIENTO DE VISTABELLA DEL MAESTRAZGO',
]
f = open('gps.csv', 'w')
f.write('ajuntament;latitudlongitud\n')
for i in eell:
print (i)
location = geolocator.geocode(i)
#print(location.address)
print (location.latitude, location.longitude)
f.write(i + ';' + str(location.latitude) + ',' + str(location.longitude) + '\n')
f.close()