Város adatbázis

Posted by | No Tags | Szoftverfejlesztés | Nincs hozzászólás a(z) Város adatbázis bejegyzéshez

Egy készülő projektünkhöz világtérképen szeretnénk megjeleníteni a felhasználói aktivitásokat egyfajta heatmap-ként. Az egyszerűnek tűnő igény azonban számos kihívást tartogat.

Város adatbázis

Először is keresnünk kellett egy olyan adatbázist, ami a világ összes városát tartalmazza legalább ország + város formában, hogy az országok alapján majd térképen tudjuk ábrázolni. Első körben beértem volna csak Magyarország városainak a teljes listájával.

Ezt a Wikipedia szócikkei között kerestem, ám meglepetésemre ilyet egyben nem találtam, csak nagyon kategorizálva és szétbontva (lakosság alapján). Innen össze lehetett volna szedni az adatokat, de jelentős időráfordítást igényelt volna, így inkább más úton indultam el.

Némi Google keresgélés után ráakadtam a MaxMind cégre, illetve az ő ingyenes város adatbázisukra: http://www.maxmind.com/en/worldcities

Ez egy kincsesbányának tűnt számunkra, hiszen nem csak a világ összes települését (nem csak városát) tartalmazza, de azok GPS koordinátáit is! Lehet, hogy nem teljes, de több, mint 2,5 millió bejegyzéssel bőven több, mint amire számítottam.

Ellenőrzés

Egy ekkora adatbázist nehéz jól leellenőrizni. Gondoltam megnyitom Excel-ben, és csinálok pár kimutatást rajta. Sajnos az Excel kb 1 millió sorig tud táblázatokat kezelni, így ez az ötlet hamar kudarcba fulladt.

Sebaj, programozó lévén az eszköztáram kicsit nagyobb egy Excel táblánál; így írtam egy programot, ami egy statikus (Google Maps-ből screenshot-olt) világtérképre felrajzolta a GPS koordináták alapján a városok helyeit.

A kiindulási térképem:

worldmap

Rajzolás

A GPS koordináták birtokában egész egyszerűnek tűnt a városok megjelölése a térképen: a hosszúsági fokok -180° és +180° közé esnek; a 0° Greenwich. A térképen megjelöltettem Greenwich helyét, így ehhez a ponthoz igazítottam az X koordinátákat.

A gondok a szélességi koordinátáknál kezdődtek. A legegyszerűbb képen megmutatni, mi lett az egyenes arányossággal számolt Y koordináták eredménye:

worldmap-cities-bad1

Valahogy nagyon elcsúszott minden; mintha össze lenne nyomva a földgömb. A hiba a Skandináv-félszigetnél a legfeltűnőbb. Áhháá: földGÖMB. Iskolai tanulmányaim során valamelyik földrajz órán esett pár szó a különböző vetítésekről. Mert ugye egy gömb felszínét torzítás nélkül nem lehet téglalapra rajzolni.

Vetítés

Gyorsan kiderítettem, hogy a Google Maps milyen vetítési módszert használ: Mercator vetítés. Néhány szélességi fok vonalát behúzva egyből szemléletes is, hogy a rajzolt térképen a függőleges távolságok egyre nagyobbak az Egyenlítőtől távolodva:

mercator-projection
A név ismeretében már nem is olyan bonyolult megkeresni a vetítési módszer matematikáját: http://stackoverflow.com/questions/14329691/covert-latitude-longitude-point-to-a-pixels-x-y-on-mercator-projection

Megint rajzolás

A képletet beírva és hozzáigazítva a saját képem méreteihez a következő térképet sikerült kirajzolni:

worldmap-cities
Itt már látszólag minden pont a helyére került, a GPS koordináták jónak tűnnek.

Heatmap

A heatmap-et szintén a GPS koordináták alapján fogjuk előállítani. Mivel a térképre rajzoláshoz már sikerült a síkbeli X,Y koordinátákat kiszámolni minden GPS koordinátához, ezért ez a képlet a heatmap előállításához is használható lesz. Annyi különbséggel, hogy sokkal kisebb felbontás is elég lesz egy heatmap-hez (kb 50×30-as rács).


No Comments

Leave a comment