GPS souřadnice českých měst a obcí
Pro zobrazování poloh dopadů meteosond na IRC jsem potřeboval v jednoduchém CSV formátu seznam souřadnic českých měst, ale ukázalo se, že je překvapivě obtížné něco takového získat. Sice existuje tabulka na jednom astronomickém webu, výběr tam zahrnutých obcí je ale docela divný, někde je místo obce jen její část, atd.
Nakonec jsem zvolil postup “udělej si sám”, a to kombinací seznamu na Wikipedii, Google Geocoding API a trochy XPath.
Seznam rozumné podmnožiny měst mohu získat třeba pomocí:
curl 'http://cs.wikipedia.org/w/index.php?title=Seznam_obc%C3%AD_s_roz%C5%A1%C3%AD%C5%99enou_p%C5%AFsobnost%C3%AD&action=edit' | sed -ne 's/^# \[\[\([^]|]*|\)*\([^]]*\)\]\].*/\2/p' | sort
Mám-li zase jméno obce, její souřadnice mohu získat tímto zaklínadlem:
m=Aš; curl -s 'http://maps.googleapis.com/maps/api/geocode/xml?address='"${m// /+},+CZ"'&sensor=false' | xmllint --xpath '//location[lat or lng]//text()' -
(Důležitý trik je to ,CZ, jinak bude Google znát spoustu Kolínů a Aš bude znamenat Americká Samoa. Alternativně si můžete z výsledků vyfiltrovat ty české pomocí XPath //result[address_component/short_name/text()="CZ"]/geometry/location[lat or lng]//text()
.)
Teď už to pro vygenerování jednoduchého CSV stačí spojit dohromady:
curl 'http://cs.wikipedia.org/w/index.php?title=Seznam_obc%C3%AD_s_roz%C5%A1%C3%AD%C5%99enou_p%C5%AFsobnost%C3%AD&action=edit' | sed -ne 's/^# \[\[\([^]|]*|\)*\([^]]*\)\]\].*/\2/p' | sort | while read m; do echo -n $m curl -s 'http://maps.googleapis.com/maps/api/geocode/xml?address='"${m// /+},+CZ"'&sensor=false' | xmllint --xpath '//location[lat or lng]//text()' - | tr -s '\n' ' ' | tr ' ' ',' echo sleep 0.1 done | sed 's/,$//'
Rádi byste hotové CSV?
Bonus: Podobně vygenerované CSV s pražskými částmi (katastrálními územími).
Bonus 2: A ještě CSV s obcemi s přenesenou působností (další velké obce a města)
Recent Comments