Vektorové mapy pro Locus: Porovnání verzí

Z Milan Kerslager
Přejít na: navigace, hledání
(Hotové OSM mapy pro Locus: +openandromaps)
(XML pro styl mapy: úprava stylu pro vrstevnice)
Řádka 111: Řádka 111:
 
  mv osm.gpsfreemaps.net/config/locus/modded_style/osmarendermapsforge/* .
 
  mv osm.gpsfreemaps.net/config/locus/modded_style/osmarendermapsforge/* .
 
  find . -name index\* -exec rm {} \;
 
  find . -name index\* -exec rm {} \;
 +
 +
Do souboru <code>style/osmarender-orgmapsforge.xml</code> přidejte před pravidla pro „waterways“ pravidla pro vrstevnice:
 +
 +
<source lang=xml>
 +
        <!-- contour lines level 12 -->
 +
        <rule e="way" k="contour_ext" v="*" zoom-min="12" zoom-max="12"> 
 +
          <rule e="way" k="contour_ext" v="elevation_minor"> 
 +
              <line stroke="#60800000" stroke-width="0.3"/>
 +
          </rule>
 +
          <rule e="way" k="contour_ext" v="elevation_medium|elevation_major"> 
 +
              <line stroke="#60800000" stroke-width="0.6"/>
 +
          </rule>
 +
        </rule>
 +
        <!-- contour lines level 13 -->
 +
        <rule e="way" k="contour_ext" v="*" zoom-min="13" zoom-max="13">
 +
          <rule e="way" k="contour_ext" v="elevation_minor"> 
 +
              <line stroke="#60800000" stroke-width="0.2"/>
 +
          </rule>
 +
          <rule e="way" k="contour_ext" v="elevation_medium|elevation_major"> 
 +
              <line stroke="#60800000" stroke-width="0.5"/>
 +
          </rule>
 +
        </rule>
 +
        <!-- contour lines level 14-->
 +
        <rule e="way" k="contour_ext" v="*" zoom-min="14" zoom-max="14">
 +
          <rule e="way" k="contour_ext" v="elevation_minor"> 
 +
              <line stroke="#60800000" stroke-width="0.15"/>
 +
          </rule>
 +
          <rule e="way" k="contour_ext" v="elevation_medium|elevation_major"> 
 +
              <line stroke="#60800000" stroke-width="0.4"/>
 +
              <rule e="way" k="*" v="*">
 +
                <pathText k="ele" font-style="bold" font-size="10" fill="#000000" stroke="#ffffff" stroke-width="2.0" />
 +
              </rule>             
 +
          </rule> 
 +
        </rule>
 +
        <!-- contour lines level 15-->
 +
        <rule e="way" k="contour_ext" v="*" zoom-min="15" zoom-max="15">
 +
          <rule e="way" k="contour_ext" v="elevation_minor" zoom-max="15"> 
 +
              <line stroke="#60800000" stroke-width="0.12"/>
 +
          </rule>
 +
          <rule e="way" k="contour_ext" v="elevation_medium|elevation_major"> 
 +
              <line stroke="#60800000" stroke-width="0.3"/>
 +
              <rule e="way" k="*" v="*">
 +
                <pathText k="ele" font-style="bold" font-size="10" fill="#000000" stroke="#ffffff" stroke-width="2.0" />
 +
              </rule>
 +
          </rule>
 +
        </rule>
 +
        <!-- contour lines level 16 -->
 +
        <rule e="way" k="contour_ext" v="*" zoom-min="16" zoom-max="16">
 +
          <rule e="way" k="contour_ext" v="elevation_minor"> 
 +
              <line stroke="#60800000" stroke-width="0.08"/>
 +
          </rule>
 +
          <rule e="way" k="contour_ext" v="elevation_medium|elevation_major"> 
 +
              <line stroke="#60800000" stroke-width="0.2"/>
 +
              <rule e="way" k="*" v="*">
 +
                <pathText k="ele" font-style="bold" font-size="10" fill="#000000" stroke="#ffffff" stroke-width="2.0" />
 +
              </rule>
 +
          </rule>
 +
        </rule> 
 +
        <!-- contour lines level 17 and above -->
 +
        <rule e="way" k="contour_ext" v="*" zoom-min="17">
 +
          <rule e="way" k="contour_ext" v="elevation_minor"> 
 +
              <line stroke="#60800000" stroke-width="0.06"/>
 +
          </rule>
 +
          <rule e="way" k="contour_ext" v="elevation_medium|elevation_major"> 
 +
              <line stroke="#60800000" stroke-width="0.15"/>
 +
              <rule e="way" k="*" v="*">
 +
                <pathText k="ele" font-style="bold" font-size="10" fill="#000000" stroke="#ffffff" stroke-width="2.0" />
 +
              </rule>
 +
          </rule>
 +
        </rule>
 +
</source>
  
 
=== phyghtmap ===
 
=== phyghtmap ===

Verze z 31. 7. 2013, 21:52

Locus je program pro Android, který umožňuje v terénu pracovat s různými mapovými podklady a používat další mapové funkce (navigace, body zájmu, zaznamenávání trasy atd.). Pro některé funkce je nutné on-line připojení (tj. Wi-Fi, v terénu pak GSM-data). Pro offline použití se hodí vektorové mapy, protože zabírají velmi málo místa. Projekt http://OpenStreetMap.org (dále OSM) volně poskytuje vektorové mapové podklady celého světa, které jsou vytvářeny z otevřených zdrojů dobrovolníky z celého světa. Pro Českou republiku obsahují OSM silnice, lesy, ale například i digitalizovaný katastr (tj. půdorysy a adresy budov) a turistické cesty.

Hotové OSM mapy pro Locus

Data z OSM lze snadno konvertovat do formátu používaného programem Locus. Hotové jsou k dispozici jsou na těchto adresách:

Nainstalujte si do Androidu Locus (placenou Pro verzi nebo free verzi z adresy https://play.google.com/store/apps/details?id=menion.android.locus&hl=cs) a alespoň jednou ho spusťte. Locus si vytvoří adresářovou strukturu. Soubor s vektorovou mapou nahrajte do adresáře Locus/mapsVector, který naleznete ve svém telefonu. Pak spusťe Locus a vyberte si nahranou vektorovou mapu.

Pokud Locus vytvoří svůj adresář na interním disku telefonu a chtěli byste ho mít na rozšiřující MicroSD kartě, stačí Locus ukončit a pak pomocí správce souborů celý adresář přesunout na kartu. Locus si svůj adresář při dalším spuštění najde a bude spokojeně pracovat dál.

Vlastní výroba OSM mapy pro Locus

Návod od 31.7.2013 obsahuje zahrnutí vrstevnic. Zatím se nevykreslují turistické cesty :-(

Osmosis

Pro konverzi OSM dat do formátu používaného programem Locus je potřeba program Osmosis (http://wiki.openstreetmap.org/wiki/Osmosis). Zde je použita verze 0.40.1, kterou lze stáhnout z adresy http://bretth.dev.openstreetmap.org/osmosis-build/. Novější verze 0.43.1 nefunguje. Osmosis rozbalte do vhodného adresáře.

Plugin map-writer

Pro zajištění výstupu do formátu používaného programem Locus je potřeba program mapsforge-map-writer ze stránky https://code.google.com/p/mapsforge/. Zde je použita verze 0.3.0 (soubor mapsforge-map-writer-0.3.0-jar-with-dependencies.jar). Stažený JAR soubor vložte do Osmosis adresáře lib/default. V Osmosis adresáři vytvořte konfigurační soubor config/osmosis-plugins.conf s řádkem:

org.mapsforge.map.writer.osmosis.MapFileWriterPluginLoader

tag-mapping.xml

Stáhněte si XML soubor tag-mapping.xml, který řídí výběr a konverzi mapových dat z adresy https://mapsforge.googlecode.com/git/mapsforge-map-writer/src/main/config/tag-mapping.xml (bude potřeba ho mírně změnit).

Do XML souboru tag-mapping.xml vložte následující řádky (v souboru je více sekcí <ways>, tuto sekci do XML souboru přidejte jako další <ways> sekci, tj. například na konec souboru před řádek se značkou </tag-mapping>):

   <!-- Elevation TAGS -->
   <ways>
      <osm-tag key="contour_ext" value="elevation_minor" zoom-appear="12" force-polygon-line="true" />
      <osm-tag key="contour_ext" value="elevation_medium" zoom-appear="12" force-polygon-line="true" />
      <osm-tag key="contour_ext" value="elevation_major" zoom-appear="12" force-polygon-line="true" />
      <osm-tag key="ele" value="100" zoom-appear="14" />
      <osm-tag key="ele" value="200" zoom-appear="14" />
      <osm-tag key="ele" value="300" zoom-appear="14" />
      <osm-tag key="ele" value="400" zoom-appear="14" />
      <osm-tag key="ele" value="500" zoom-appear="14" />
      <osm-tag key="ele" value="600" zoom-appear="14" />
      <osm-tag key="ele" value="700" zoom-appear="14" />
      <osm-tag key="ele" value="800" zoom-appear="14" />
      <osm-tag key="ele" value="900" zoom-appear="14" />
      <osm-tag key="ele" value="1000" zoom-appear="14" />
      <osm-tag key="ele" value="1100" zoom-appear="14" />
      <osm-tag key="ele" value="1200" zoom-appear="14" />
      <osm-tag key="ele" value="1300" zoom-appear="14" />
      <osm-tag key="ele" value="1400" zoom-appear="14" />
      <osm-tag key="ele" value="1500" zoom-appear="14" />
      <osm-tag key="ele" value="1600" zoom-appear="14" />
      <osm-tag key="ele" value="1700" zoom-appear="14" />
      <osm-tag key="ele" value="1800" zoom-appear="14" />
      <osm-tag key="ele" value="1900" zoom-appear="14" />
      <osm-tag key="ele" value="2000" zoom-appear="14" />
      <osm-tag key="ele" value="2100" zoom-appear="14" />
      <osm-tag key="ele" value="2200" zoom-appear="14" />
      <osm-tag key="ele" value="2300" zoom-appear="14" />
      <osm-tag key="ele" value="2400" zoom-appear="14" />
      <osm-tag key="ele" value="2500" zoom-appear="14" />
      <osm-tag key="ele" value="2600" zoom-appear="14" />
      <osm-tag key="ele" value="2700" zoom-appear="14" />
      <osm-tag key="ele" value="2800" zoom-appear="14" />
      <osm-tag key="ele" value="2900" zoom-appear="14" />
      <osm-tag key="ele" value="3000" zoom-appear="14" />
      <osm-tag key="ele" value="3100" zoom-appear="14" />
      <osm-tag key="ele" value="3200" zoom-appear="14" />
      <osm-tag key="ele" value="3300" zoom-appear="14" />
      <osm-tag key="ele" value="3400" zoom-appear="14" />
      <osm-tag key="ele" value="3500" zoom-appear="14" />
      <osm-tag key="ele" value="3600" zoom-appear="14" />
      <osm-tag key="ele" value="3700" zoom-appear="14" />
      <osm-tag key="ele" value="3800" zoom-appear="14" />
      <osm-tag key="ele" value="3900" zoom-appear="14" />
      <osm-tag key="ele" value="4000" zoom-appear="14" />
      <osm-tag key="ele" value="4100" zoom-appear="14" />
      <osm-tag key="ele" value="4200" zoom-appear="14" />
      <osm-tag key="ele" value="4300" zoom-appear="14" />
      <osm-tag key="ele" value="4400" zoom-appear="14" />
      <osm-tag key="ele" value="4500" zoom-appear="14" />
      <osm-tag key="ele" value="4600" zoom-appear="14" />
      <osm-tag key="ele" value="4700" zoom-appear="14" />
      <osm-tag key="ele" value="4800" zoom-appear="14" />
      <osm-tag key="ele" value="4900" zoom-appear="14" />
      <osm-tag key="ele" value="5000" zoom-appear="14" />
       <!-- .... etc ....  -->
   </ways>

Data z OSM

Stáhněte si export dat z OSM z adresy http://download.geofabrik.de, kde pro ČR stahujte z adresy http://download.geofabrik.de/europe/czech-republic.html:

poly2bb.pl

Výslednou mapu pro Locus je potřeba vložit do boxu, jehož definice není součástí standardního PBF exportu z OSM. Správné koordináty lze zjistit z výše staženého POLY souboru pomocí skriptu poly2bb.pl (https://trac.openstreetmap.org/browser/applications/utils/osm-extract/polygons/poly2bb.pl), ve kterém nahraďte poslední příkaz (na dvou řádcích) tímto příkazem:

printf "%f,%f,%f,%f\n", $miny, $minx, $maxy, $maxx;

Spusťte a výsledné souřadnice použijte dále při generování:

poly2bb.pl czech_republic.poly
48.540841,12.085860,51.054381,18.862533

XML pro styl mapy

Podobu výstupní mapy je možné ovlivnit XML soubory. Standardní stáhněte z adresy http://osm.gpsfreemaps.net/config/locus/modded_style/osmarendermapsforge/ a smažte nepotřebné soubory index:

mkdir style
cd style
wget -e robots=off --wait 0.25 -np -r http://osm.gpsfreemaps.net/config/locus/modded_style/osmarendermapsforge/
mv osm.gpsfreemaps.net/config/locus/modded_style/osmarendermapsforge/* .
find . -name index\* -exec rm {} \;

Do souboru style/osmarender-orgmapsforge.xml přidejte před pravidla pro „waterways“ pravidla pro vrstevnice:

        <!-- contour lines level 12 -->
        <rule e="way" k="contour_ext" v="*" zoom-min="12" zoom-max="12">   
           <rule e="way" k="contour_ext" v="elevation_minor">   
              <line stroke="#60800000" stroke-width="0.3"/>
           </rule>
           <rule e="way" k="contour_ext" v="elevation_medium|elevation_major">   
              <line stroke="#60800000" stroke-width="0.6"/>
           </rule>
        </rule>
        <!-- contour lines level 13 -->
        <rule e="way" k="contour_ext" v="*" zoom-min="13" zoom-max="13">
           <rule e="way" k="contour_ext" v="elevation_minor">   
              <line stroke="#60800000" stroke-width="0.2"/>
           </rule>
           <rule e="way" k="contour_ext" v="elevation_medium|elevation_major">   
              <line stroke="#60800000" stroke-width="0.5"/>
           </rule>
        </rule>
        <!-- contour lines level 14-->
        <rule e="way" k="contour_ext" v="*" zoom-min="14" zoom-max="14">
           <rule e="way" k="contour_ext" v="elevation_minor">   
              <line stroke="#60800000" stroke-width="0.15"/>
           </rule>
           <rule e="way" k="contour_ext" v="elevation_medium|elevation_major">   
              <line stroke="#60800000" stroke-width="0.4"/>
              <rule e="way" k="*" v="*">
                 <pathText k="ele" font-style="bold" font-size="10" fill="#000000" stroke="#ffffff" stroke-width="2.0" />
              </rule>              
           </rule>   
        </rule>
        <!-- contour lines level 15-->
        <rule e="way" k="contour_ext" v="*" zoom-min="15" zoom-max="15">
           <rule e="way" k="contour_ext" v="elevation_minor" zoom-max="15">   
              <line stroke="#60800000" stroke-width="0.12"/>
           </rule>
           <rule e="way" k="contour_ext" v="elevation_medium|elevation_major">   
              <line stroke="#60800000" stroke-width="0.3"/>
              <rule e="way" k="*" v="*">
                 <pathText k="ele" font-style="bold" font-size="10" fill="#000000" stroke="#ffffff" stroke-width="2.0" />
              </rule>
           </rule>
        </rule>
        <!-- contour lines level 16 -->
        <rule e="way" k="contour_ext" v="*" zoom-min="16" zoom-max="16">
           <rule e="way" k="contour_ext" v="elevation_minor">   
              <line stroke="#60800000" stroke-width="0.08"/>
           </rule>
           <rule e="way" k="contour_ext" v="elevation_medium|elevation_major">   
              <line stroke="#60800000" stroke-width="0.2"/>
              <rule e="way" k="*" v="*">
                 <pathText k="ele" font-style="bold" font-size="10" fill="#000000" stroke="#ffffff" stroke-width="2.0" />
              </rule>
           </rule>
        </rule>   
        <!-- contour lines level 17 and above -->
        <rule e="way" k="contour_ext" v="*" zoom-min="17">
           <rule e="way" k="contour_ext" v="elevation_minor">   
              <line stroke="#60800000" stroke-width="0.06"/>
           </rule>
           <rule e="way" k="contour_ext" v="elevation_medium|elevation_major">   
              <line stroke="#60800000" stroke-width="0.15"/>
              <rule e="way" k="*" v="*">
                 <pathText k="ele" font-style="bold" font-size="10" fill="#000000" stroke="#ffffff" stroke-width="2.0" />
              </rule>
           </rule>
        </rule>

phyghtmap

Nástroj phyghtmap slouží ke stažení dat pro vrstevnice ze serverů NASA. Nástroj naleznete na adrese http://katze.tfiu.de/projects/phyghtmap/. V distribuci Fedora je připraven jako balíček, takže stačí jako uživatel root zadat příkaz:

yum -y install python-phyghtmap.noarch

srtmfill

Pro korekci výškových dat od NASA je potřeba nástroj SRTMFill z adresy http://3dnature.com/srtmfill.html, který dopočítá data, která v HGT souborech chybí (NASA poskytuje zadarmo jen surová data z družice, za vyčištěná data od NASA se musí zaplatit). Nástroj SRTMFill je program pod Windows, který před zpracováním každého souboru chvíli čeká a nabízí licenci asi za 25 dolarů. V Linuxu lze tento program spustit pomocí Wine, takže zde není problém. Před spuštěním v Linuxu mu jen přidejte oprávnění pro spuštění příkazem:

chmod +x SRTMFill.exe

Výšková data od NASA a jejich korekce

Nejprve spusťte program phyghtmap s parametrem omezujícím okraje potřebné plochy. Program phyghtmap stáhne ze serverů NASA potřebné soubory. Když začne počítat, přerušte ho pomocí CTRL+c a proveďte korekci dat programem srtmfill.exe. Poté spusťte program phyghtmap znovu a on použije korigovaná data.

phyghtmap --polygon=czech-republic.poly -o czech_srtm6 --source=view1,view3,srtm1,srtm3  -s 20 -c 200,100 --start-node-id=20000000000 --start-way-id=10000000000 --write-timestamp --max-nodes-per-tile=0
po stažení všech souborů (a zahájení výpočtu) bylo stisknuto CTRL+c pro přerušení programu
for i in $(find . -name \*.hgt); do ./SRTMFill.exe $i; done
nyní bude potřeba 48 krát potvrdit, že chcete program spustit zdarma (s čekacími prodlevami)
for i in $(find . hgt -name \*.hgt); do echo mv -fv $i $(echo $i | sed -e 's/_fill//'); done | sh
výše uvedený příkaz přejmenoval nové soubory s názvem _fill na původní jména
phyghtmap --polygon=czech-republic.poly -o czech_srtm6 --source=view1,view3,srtm1,srtm3  -s 20 -c 200,100 --start-node-id=20000000000 --start-way-id=10000000000 --write-timestamp --max-nodes-per-tile=0

Výstupem je soubor, v jehož názvu jsou zaneseny krajní souřadnice, takže se mohou lišit podle aktuálního stavu staženého POLY souboru. V tomto případě to bylo: czech_srtm6_lon12.08_18.86lat48.54_51.06_view3.osm. Tento výsledný soubor má skoro 800 MB a není ho potřeba při každém generování nové mapy z aktuálních OSM dat znovu vytvářet, protože vrstevnice zůstávají (až do dalšího měření od NASA) stejné. Pomocí osmosis převedeme soubor do zkomprimovaného PBF tvaru (17 MB):

osmosis --rx czech_srtm6_lon12.08_18.86lat48.54_51.06_view3.osm --wb czech_srtm.osm.pbf

Nekomprimovaná data v souboru OSM je možné smazat, dále bude použit komprimovaný PBF tvar.

Sloučení dat

Nyní je potřeba sloučit vrstevnice a mapový podklad z OSM:

osmosis --read-pbf czech-republic-latest.osm.pbf --read-pbf czech_srtm.osm.pbf --merge --wb czech-merged.osm.pbf

Prostředí pro Javu

Nadefinujte proměnné prostředí pro Javu, která zvětší alokovatelnou paměť Javy (zde je použita 64bitová Java, konkrétně jre-1.7.0-openjdk.x86_64).

export JAVACMD_OPTIONS=-Xmx6G

Vytvoření souboru .map

Spusťte konverzi (parametrem bbox jsou čísla, která vystupují z příkazu poly2bb.pl):

osmosis --read-pbf czech-merged.osm.pbf --buffer --mapfile-writer file=Czech.map bbox=48.540841,12.085860,51.054381,18.862533 type=hd tag-conf-file=tag-mapping.xml

Podle rychlosti počítače bude výsledná mapa asi za hodinu vygenerována do souboru Czech.map. Průběh vytváření mapy je programem Osmosis průběžně indikován (v procentech).

Externí odkazy