Jak jsme otevírali pražská Geodata

17.06.2014 – 12:29 am

O tomto víkendu jsem měl možnost účastnit se akce 1. PRAŽSKÝ GEODATA HACKATHON, kterou pořádal Fond Otakara Motejla spolu s Institutem plánování a rozvoje Prahy.

IPR chtělo pro začátek částečně otevřít svoje data a pozvali bandu hackerů, aby nad těmito daty vytvořili něco nového. Když se podíváte na pražský geoportál, zjistíte, že výmýšlet něco nového už je celkem oříšek, protože IPR už publikuje celou řadu zajímavých mapových aplikací. Ukázalo se ale, že nás  9 účastníků hackatonu, když se dostanou k datům, přeci jenom mohou něco nového vymyslet.

Začátek byl trochu drhnoucí, protože IPR místo aby nám prostě dali ESRI Shapefile nebo zpřístupnili servery s daty přes OGC WFS, nám posktyli rozhraní XML-RPC pro interná databázi Oracle. Dokumentace nebyla také nic moc. Spojení s databází spíš padalo, než drželo. S daty uvnitř to nevypadalo bůhvíjak slavně. Naštěstí jsme těsně před akcí dostali kopii obsahu databáze ve formě shapefilů, a trochu jsme se spolehli na data z OpenStreetMap a další zdroje, jako je RUIAN.

Už jsem psal, že se akce účastnilo asi 9 lidí, tedy kromě Michaely Rybičkové z Fondu Otakara Motejla, která se o nás celý víkend starala. Byli to většinou lidi z IT prostředí, půl na půl Javisti a zbytek světa. Několik geo-pozitivních lidí, několik pure-IT lidí. Co bylo zajímavé: ani jeden člověk neměl nebo nedělal v ArcGIS. Všichni se spolehli na open source nástroje.

O tom co jsme dělali a jak jsme byli úspěšní si můžete přečíst krátkou prezentaci na GISMentors. Já sem díky Jelenovi, jehož to byl nápada, zkusil spočítat zastínění dětských křišť okolními stromy a domy – z časových a výpočetních důvodů pouze na Jičním Městě. Krátký popis postupu (vše GRASS GIS):

  1. Z vrstevnic z IPR jsem vypočítal digitální model terénu
    GRASS> v.in.ogr dsn=vrstevnice.shp out=vrstevnice # import
    GRASS> g.region res=5 vect=vrstevnice # nastavení regionu
    GRASS> v.surf.rst in=vrstevnice elev=dmt # interpolace DMT
    
  2. Import budov z RUIAN, jejich převod na rastr s atributem počet pater
    GRASS> v.in.ogr dsn=budovy.shp out=baraky # import
    GRASS> v.to.rast in=baraky out=baraky attrcolumn=POCETPODLA type=area use=attr
    
  3. Import stromů z OSM stejně jako památných stromů z IPR
    GRASS> v.in.ogr dsn="PG:dbname=crosm" layer=osm_point out=stromy where="natural = 'tree'"
    GRASS> v.buffer in=stromy out=stromy_bufffer distance=3 # 6 metru prumer koruny
    GRASS> v.to.rast in=stromy_buffer out=stromy_buffer use=val val=5 # prevod na rastr
    
  4. Vylepšení DMT o domy a stromy (výška domu = počet pater * 4)
    GRASS> r.mapcalc "dmt_baraky_stromy = dmt+ if(not(isnull(baraky)), baraky*4, 0) + if(not(isnull(stromy_buffer)), stromy_buffer, 0)"
    
  5. Následuje vlastní výpočet osvitu (na regionu Jižního Města), kvůli rychlosti jsem musel rozlišení srazit na 10m/pixel
    GRASS> g.region jm res=10
    GRASS> for i in `seq -f "%20g" 6 21`; do 
           r.sunmask elev=dmt_baraky_stromy out=sunmask_jm_$i year=2014 month=06 day=15 hour=$i minute=0 second=0 timezone=1;
           done
    

    Počítáno od 6 hodin ráno do 21 hodin večer (zimní čas). Výsledkem je soubor rastrových map zobrazujících stín v danou hodinu.

  6. Mapa celkového zastínění – počet hodin ve stínu
    GRASS> g.region jm res=10
    GRASS> r.mapcalc "sunmask = sunmask_jm_06 + sunmask_jm_07 + sunmask_jm_08 + sunmask_jm_09 + sunmask_jm_10 + sunmask_jm_11 + sunmask_jm_12 + sunmask_jm_13 + sunmask_jm_14 + sunmask_jm_15 + sunmask_jm_16 + ^Cnmask_jm_17 + sunmask_jm_18 + sunmask_jm_19 + sunmask_jm_20 + sunmask_jm_21"
    
  7. Pak už stačí jenom převézt hřiště na rastr, překrýt maskou a vyrobit report

    +-----------------------------------------------------------------------------+
    |                         RASTER MAP CATEGORY REPORT                          |
    |LOCATION: prg                                        Sun Jun 15 15:23:02 2014|
    |-----------------------------------------------------------------------------|
    |          north: -1048827.00934    east: -735134.151414                      |
    |REGION    south: -1051646.33025    west: -739499.993014                      |
    |          res:       9.99759188    res:      9.99048421                      |
    |-----------------------------------------------------------------------------|
    |MASK: hriste in jachym, categories 1                                         |
    |-----------------------------------------------------------------------------|
    |MAP: (untitled) (sunmask in sunmask)                                         |
    |-----------------------------------------------------------------------------|
    |                      Category Information                        |    square|
    | #|description                                                    |    meters|
    |-----------------------------------------------------------------------------|
    | 1| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |      2597|
    | 2| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |      6492|
    | 3| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |      7791|
    | 4| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |      3096|
    | 5| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |      1398|
    | 6| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |      1798|
    | 7| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |       599|
    | 8| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |       599|
    |10| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |       100|
    | *|no data. . . . . . . . . . . . . . . . . . . . . . . . . . . . |12,284,238|
    |-----------------------------------------------------------------------------|
    |TOTAL                                                             |12,308,709|
    +-----------------------------------------------------------------------------+
    

    Hodnoty 1-10 jsou počet zastíněných hodin na hřištích.

  8. Pro lepší vizualizaci jsem stíny přetáhnul přes ortofoto (naimportováno pomocí r.in.wms ze serveru IPR)

    GRASS> for i in `seq -f "%20g" 6 21`; do 
               r.blend first=ortofoto_hriste second=sunmask_jm_$i output_prefix=pref_;
               r.composite red=pref_.r green=pref_.g blue=pref_.b levels=32 output=orto_sunmask_$i;
           done
    

Pomocí časových modulů t.create a t.register jsem vyrobil časovou řadu pro takto vzniklé rastry a pomocí g.gui.animate jsem je zanimoval do GIFu.

Postup je popsán velice hrubě, ale takhle nějak jsem po překonání všech překážek postupoval. Výsledné obrázky:

Jižní Město ve 2.5D: DEM z vrtsevnic, Ortofoto z WMS.

Jižní Město ve 2.5D: DEM z vrtsevnic, Ortofoto z WMS.

Mapa zastínění - čím modřejší, tím víc hodin ve stínu.

Mapa zastínění – čím modřejší, tím víc hodin ve stínu.

Animovaný gif průběhů stínů

Animovaný gif průběhů stínů – animovaný GIF, klikněte pro dynamické zobrazení

Animovaný GIS průběhu stínů, tentokrát v barvách

Animovaný GIS průběhu stínů, tentokrát v barvách – animovaný GIF, klikněte pro dynamické zobrazení

Ostatní projekty si můžete prohlídnout na speciální stránce. Já jsem se ještě podílel na výdejním modulu pražských geodat (na straně serveru).

Akce byla skvělá, atmosféra dělná. Hodně věcí jsem si konečně vyzkoušel, na některé jiné jsem zase po letech sáhnul. Bylo o nás postaráno moc pěkně.

Všichni doufáme, že nezůstane u jednoho hackatonu, že toho bude víc a že se sejdeme v hojném počtu a hlavně s více daty někdy příště.


Share Button
  1. One Response to “Jak jsme otevírali pražská Geodata”

  2. Jsou ta data, se kterými jste pracovali někde k dispozici? Nebo se jedná o otevřená data pouze na jednu akci? Našel jsem mapové listy (což je pouze grid), ale nevím jak se dostat třeba k vrstevnicím?

    By Michal Med on Jun 28, 2014

Post a Comment