Argitalpen-data: 2011/06/16
Trafiko intzidentzien aplikazioaren kodea, jaisteko moduan
Eskaera bat jaso genuen hemen, egindako demo aplikazio baten oinarrizko kodea partekatzerik ba ote genuen. Bai horixe, kodea bildu eta argitaratu dugu; software librea da, Python programazio lengoaian idatzia, eta jarraian datorrena bere funtzionamenduaren azalpena da.
Aplikazio honen helburua da KML fitxategi bat egitea, Eusko Jaurlaritzako Barne Sailak Gipuzkoarako ematen dituen trafiko intzidentzien berri ematen duena.
Aplikazioak XML formatuan dagoen iturri batera jotzen du. Eta konbinatu egiten dugu handik jasotako datua beste zerbitzu batekin, B5m Gipuzkoako Foru Aldundiaren geografia informazioko zerbitzura galdera egiten dugu, puntu kilometrikoen kokapen zehatza katalogatua baitago zerbitzu horretan, eta datua berez librea da. B5m zerbitzuko APIra egiten dugu deia, beraz.
Aplikazioa, esan bezala, Pythonen idatzia dago, eta hiru funtzio oinarrizko ditu:
- Funtzio batek trafikoko datuen XML-a parseatzen du: parseXMLopendata()
- Beste funtzio batek b5meko APIa arakatzen du kokapena (lat,long) lortzeko puntu kilometriko bakoitzarena find_latlon_pk(road,km):
- Azken funtzioak KML fitxategia sortzen du generateKMLdetails(gip_incidents):
parseXMLopendata():
Intzidentziak era honetako definizio batekin datoz:
[xml]
[/xml]
Gure funtzioak XML hori arakatzen du, eta probintzia bilatzen du (Matrícula = SS), datuen bilduma bat eginez.
def find_latlon_pk(road,km):
Datu bilduma horretako erregistro bakoitzean, kilometroaren lat-lon datuak lortu behar ditugu, eta b5mko APIrako dei batekin egiten dugu hori, honela:
URL_B5M = “http://b5m.gipuzkoa.net/ogc/wfs/gipuzkoa_wfs?service=wfs&version=1.1.0&request=getfeature&typename=KP&srs=EPSG:4326&Filter=<Filter><AND><PropertyIsEqualTo><PropertyName>NOMBRE</PropertyName><Literal>%s</Literal></PropertyIsEqualTo><PropertyIsEqualTo><PropertyName>PK</PropertyName><Literal>%s</Literal></PropertyIsEqualTo></AND></Filter>” % (road,km)
Non road den errepidea eta km intzidentziaren puntu zehatza. Demagun, adibidez, Gi-20 errepidean 6. puntu kilometrikoaz galdera egin nahi dugula. Hauxe da URLa:
XML bat datorkigu erantzun gisa, eta hortik ateratzen dugu puntu zehatza:
<gml:pos>43.315428 -1.957029</gml:pos>
Ikus dezagun non geratzen den puntu hori mapan.
Latitude eta longitudearen jabe garenez, erregistrora gehituko dugu datua.
def generateKMLdetails(gip_incidents):
Datuak zerrendatuta ditugunean, KML fitxategia eratzen da script batekin. Googlek erabiltzen duen formatu bat da, baina nazioarteko estandarren artean dago KML.
Proba egin dezakezue gure softwarea instalatuz gero, script hori honela exekutatuz:
$ python incidencias_gipuzkoa.py
Eta horrekin sortuko da KML fitxategia. KML da formatu geografiko bat, Google Maps eta Google Earth aplikazioetan erabiltzen da, baina ez bakarrik Googlerena, estandar gisa ezagupena du.
Aipatu bezala, Python lengoaian dago eguna, baina logikari jarraitzen ahal diozu beste programazio lengoaia batean ere gauza bera egiteko.
Estekak: