CLC import alternatíva

From OpenStreetMap Wiki
Jump to navigation Jump to search

Bevezető

Általános információ a módszerről

A legfontosabb különbség a másik módszerrel szemben, hogy a CLC adatok településenként lesznek beimportálva. Ennek előnye, hogy az adatok sokkal jobban kezelhetők és karbantarthatók. Hátránya, hogy az importálás lassabb. Az előnyök messze meghaladják a hátrányokat. Természetesen a területfelhasználási határok nem mindenhol követik a településhatárokat (sőt, többnyire nem). Ezt a problémát kezelni kell, attól függően, hogy a területfelhasználás nagyobb területű vagy kisebb. A fél megyényi területeket (főleg szántók, erdők) bekötjük a településhatárokba, ezek így válnak kezelhetővé. A két (esetleg három) településre nyúló területeknél azt csináljuk, hogy a nyitott részt (ami a még nem importált területre néz) kiegészítjük két ponttal a "szűz" területen. Amikor ezt a területet importáljuk, az ide eső részt egyszerűen összekötjük a már beimportált területtel.

Szükséges eszközök

(Alternatív eszközök használhatók, de a leírás ezeket feltételezi)

  • Windows
  • Osmosis
  • ActivePerl
  • JOSM

Osmosis

Batch fájlok

Az Osmosis futtatását az Osmosis bin könyvtárában elhelyezett batch fájlokkal oldottam meg. A call paranccsal kell meghívni az osmosis.bat fájlt. A REM (remark) paranccsal lehet megjegyzést hozzáírni és a pause paranccsal felfüggeszthetjük a végrehajtást. Például:

REM split
call osmosis.bat --read-pbf c:\osm\osmdata\hungary.osm.pbf --tag-filter accept-relations admin_level=6 --used-way --used-node --write-xml c:\osm\osmdata\county_boundaries\megye.osm
pause

Osmosis problémák

Sajnos e sorok írásakor az Osmosisban van egy hiba (nem kezeli az escape sequenceket, például %s = space karakter lenne) és nem tudtam megoldani az ékezetes karakterekre való szűrést sem. Ezért a space-t és az ékezetes karaktereket kézzel, a JOSM-ben eltávolítottam a határvonal kapcsolatokból. Az alábbiakban azonban a helyes működést feltételezve írtam a példákat.

Perl

Nem kell tudni programozni, csak az interpretert (ActivePerl) használni. Innen letölthető:
http://www.activestate.com/activeperl/downloads
Sajnos a poligon támogatás nincs benne a csomagban. Ez egy tar.gz fájlban innen letölthető:
http://search.cpan.org/dist/Math-Polygon/
Az ebben lévő lib\Math könyvtárat kell a Perl lib\Math könyvtárába másolni.

CLC Adatok méretre vágása

Letöltés

CLC adatok

http://w3m.hu/clc06_hu_resave.osm Ebből legutóbb hiányzott néhány version=1 paraméter. Ha még mindig ez a helyzet, notepaddel megnyitva pótolhatók a nem hibás bejegyzések alapján.

Magyarország a közigazgatási határokhoz

http://download.geofabrik.de/osm/europe/hungary.osm.pbf

Településhatárok kinyerése

Településhatárok kivágása

Osmosissal történik a pbf fájlból. Például:

call osmosis.bat --read-pbf c:\osm\osmdata\hungary.osm.pbf --tag-filter accept-relations admin_level=8 --used-way --used-node --write-xml c:\osm\osmdata\village_boundaries\villages.osm
call call osmosis.bat --read-xml c:\osm\osmdata\village_boundaries\villages.osm --tag-filter accept-relations name=Kisbodak --used-way --used-node --write-xml c:\osm\osmdata\village_boundaries\gyms\kisbodak.osm

Poligon fájl létrehozása a településhatárokból

az adatok darabolásához egy Perl szkript segítségével.
Perl szkript letöltése:
http://svn.ankh-morp.org:8080/osm/poly/osm2poly.pl
Az egyszerű szkriptet ki kellett javítani, hogy fájlba tudjon írni:
E helyett:

my $name = $file;

Ezt kell beírni:

open (MYFILE, '>>data.poly');

A végén pedig a megfelelő részbe ezt behelyettesíteni (lényegében print helyett print MYFILE, majd close (MYFILE)):

print MYFILE "$name\n";
foreach my $p (@poly) {
    ++$part_nr;
    print MYFILE "", ($p->{outer} ? "" : "!"), "$part_nr\n";
    foreach ($p->{poly}->points) {
        printf MYFILE "\t%E\t%E\n", $_->[0], $_->[1];
    }
    print MYFILE "END\n";
}
print MYFILE "END\n";
close (MYFILE); 
# END

Használata parancssoron történik:

osm2poly.pl c:\osm\osmdata\village_boundaries\kisbodak.osm

Ez egy data.poly nevű poligon fájlt hoz létre, amit még át kell nevezni kisbodak.poly-ra. Sajnos szerény tudásommal csak ennyit tudtam javítani a Perl szkripten.

CLC adatok kivágása

A fenti településhatárokkal történik. Példa:

call osmosis.bat --read-xml c:\osm\osmdata\clc\clc06_hu_resave.osm --bounding-polygon file=c:\osm\osmdata\village_boundaries\gyms\kisbodak.poly completeWays=no completeRelations=no
clipIncompleteEntities=true --write-xml c:\osm\osmdata\clc\gyms\kisbodak.osm

Importálás, Feldolgozás

Később

Utómunkálatok

Később