A következő ötlet az volt, hogy a már korábban letöltött CIA WDB II adatait használom.
Ez kitömörítve 120 MB fölött van, tehát - az én céljaimra - már túl részletesnek is mondható.
Ezzel az adatsorral több baj is van.
- A partvonalak adatai tavakat és egyéb, a kontinensek, országok belsejében található alakzatokat is tartalmaznak, így a kapott térkép "maszatos" lesz.
- Az országhatárok külön fájlban vannak, ami nem lenne olyan nagy baj, ha (földrajzi célú) vaktérképet készítenénk, de azt nagyon megnehezítik, hogy az egyes országokat különbözőre színezzük (gnuplotban a filledcurves stílussal pl.)
- Az országhatárok borzasztóan elavultak: még a Szovjetunió, Csehszlovákia és Jugoszlávia határai szerepelnek, az utódállamok már nem.
További nehézség, hogy a fenti helyről letöltött és kitömörített adatfájlokat némi előfeldolgozásnak kell alávetni, mielőtt a gnuplot használni tudná őket.
Ez konkrétan a '<sed -e "s/^segment.*/\n/g" '
parancs általi szűrést jelenti, ez új sorokat tesz az egyes rekordok közé, így a gnuplot nem köti össze az össze nem tartozó szegmenseket. Egyébként az adatok sima szöveges formátumban vannak, a szélesség és hosszúság fokokban megadva.
A problémákat részben orvosolja ennek az adatsornak egy tisztított változata, amit az R statisztikai programhoz való mapdata csomag tartalmaz. (A linkről le lehet tölteni a targézát, annak a mélyén van egy src könyvtár, amiben maguk az adatfájlok találhatók. Ezek a fájlok (konrétan a worldHires.line nevű) tartalmazzák a lényeget, sima szöveg formátumban, a változatosság kedvéért radiánban (tehát pl. a hosszúság [-pi,+pi] tartományban van). Itt is szükség van arra, hogy a rekordok közé üres sorokat szúrjunk be. Ezt az alábbi write-once perl scripttel oldottam meg:
#!/usr/bin/perl
while (<>) {
if (/^EOR/) {
print "#EOR\n\n\n";
} elsif (/^\S/) {
print "#".$_;
} else {
print;
}
}
Az ezzel készült térkép sem az igazi. Ezen a ponton kénytelen voltam belátni, hogy a gnuplot nem az ideális eszköz a térképkészítésre. Egyrészt ilyen nagy méretű adatsorokkal nagyon lassú, akár egy percig is eltart egy kép kirajzolása, másrészt semmi nincs meg alapból, mindent, például a vetületet is magamnak kell megvalósítani. Elrettentésképpen a következőképpen lehet Európát a fent említett WDB-ből egy egyszerű kúpvetületben ábrázolni:
mapdir = '/home/kikuchiyo/dl/WDB/' # Ertelemszeruen atirando
map11 = 'europe-cil.txt'
map12 = 'europe-bdy.txt'
map21 = 'asia-cil.txt'
map22 = 'asia-bdy.txt'
map31 = 'africa-cil.txt'
map32 = 'africa-bdy.txt'
s = '<sed -e "s/^segment.*/\n/g" '
evc = 30
evc2 = 10
lwc = 1
lwcr = 0.6
set xr [-0.27:0.34]
set yr [-11:26]
set ang deg
unset key
# Conic Equidistant Projection
fi0 = 45.
fi1 = 89.
fi2 = 57.
l0 = 5.
n = (cos(fi1)-cos(fi2))/(fi2-fi1)
G = cos(fi1)/n+fi1
rho(fi) = G-fi
theta(l) = n*(l-l0)
X(fi,l) = rho(fi)*sin(theta(l))
Y(fi,l) = rho(fi0) - rho(fi)*cos(theta(l))
set tmargin 0
set bmargin 0
set rmargin 0
set lmargin 0
unset border
unset xtics
unset ytics
set macro
set term pdf size 6,6
set out "europe_map.pdf"
plot s.mapdir.map11 u (X($1,$2)):(Y($1,$2)) ev evc w l lc rgb "black" lw lwc ,\
s.mapdir.map12 u (X($1,$2)):(Y($1,$2)) ev evc2 w l lc rgb "black" lw lwcr,\
s.mapdir.map21 u (X($1,$2)):(Y($1,$2)) ev evc2 w l lc rgb "black" lw lwc,\
s.mapdir.map22 u (X($1,$2)):(Y($1,$2)) ev evc2 w l lc rgb "black" lw lwcr,\
s.mapdir.map31 u (X($1,$2)):(Y($1,$2)) ev evc2 w l lc rgb "black" lw lwc,\
s.mapdir.map32 u (X($1,$2)):(Y($1,$2)) ev evc2 w l lc rgb "black" lw lwcr
set out
Két közbevetés:
- az említett mapdata csomag az R-hez van, annak is a maps csomagjához. Feltételezem, hogy ezekkel a csomagokkal az R-en belül kényelmesen és gyorsan lehet térképeket rajzolni, legalábbis a példák alapján biztosan, de én az R-hez nem értek, és hosszabb idő lenne megtanulni, mint amennyi ehhez a feladathoz rendelkezésre állt. De tervben van.
- Végül arra fanyalodtam, hogy egy JPG-ként meglévő Európa-térképet ábrázoltam gnuplotban, és arra vetítettem rá - kézi pozicionálás után - az adataimat. Nem ideális megoldás, de nem mutat rosszul.
Ezután kezdtem más megoldások, más adatsorok után nézni.
Első találat a vmap0 volt, ami egy az egész Földet felölelő, viszonylag nagy felbontású térkép-adatbázis. Elvileg több rétegű, tehát az országhatárokon kívül a városok, utak, mezőgazdasági területek stb. helyét is tartalmazza.
A wikipédiás linken letölthető targéza egy VPF nevű, általam nem ismert formátumban van. Kitömörítettem, de semmit sem tudtam kezdeni vele.
Egy másik linken ugyanez az adatsor megtalálható ESRI shapefile formátumban, ami ugyan közvetlenül még mindig nem használható, de legalább már vannak hozzá free átalakító eszközök, pl. perl modul (Geo::ShapeFile), sőt, egy kész perl script, ami SVG-vé alakítja (shptosvg). Az utóbbi wikijén látható példa-kép igen pofás, így gondoltam, kipróbálom.
Közben találtam egy újabb ígéretes adatforrást: GADM database of Global Administrative Areas. Innen országonkénti bontásban vagy az egész világra egyben lehet letölteni az ország- és egyéb határokat tartalmazó adatsorokat az említett shapefile és más formátumokban.
Letöltöttem a Magyarországra vonatkozót (csak a megyék szintjéig van meg, a járások már nem, pedig a környező országokra ugyanez megvan), és a fenti shptosvg eszközzel készítettem belőle egy térképet Albers-féle területtartó vetületben (sajnos át kellett konvertálni, mert SVG imagehost nem nagyon van):
perl shptosvg.pl -x 720 -y 400 -T "+proj=aea +lat_1=45 +lat_2=49 +lat_0=47 +lon_0=19 +x_0=0 +y_0=0 +ellps=WGS84 +datum=NAD83 +units=m +no_defs" HUN_adm1,style="stroke:#1821DE;stroke-width:1",srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs" > hun.svg
Az ilyen módon előálló SVG aztán tetszőlegesen tovább szerkeszthető pl. Inkscape-ben, de az shptosvg lehetőségeit sem meríti ki a fenti parancs.
- kikuchiyo blogja
- A hozzászóláshoz be kell jelentkezni
- 7152 megtekintés
Hozzászólások
OSM-et nem nézted: http://www.openstreetmap.org/
sly @ w3m.hu
- A hozzászóláshoz be kell jelentkezni
En is ezzel kezdtem volna, mert: frissul, atallomanya ugyan nagy, de lehet szelektalni, vannak ra peldak, hogy kell hasznalni (pl. http://maps.cloudmade.com/#, miner.hu), olyan renderert hasznalsz, amit akarsz.
- A hozzászóláshoz be kell jelentkezni
Én google maps-t használtam volna, van js apija, úgyhogy lényegében egy kész megoldás. Ha ez netán nem felelne meg, akkor meg openstreetmaps.
--
Don't be an Ubuntard!
- A hozzászóláshoz be kell jelentkezni
bookmark
- A hozzászóláshoz be kell jelentkezni
Nekem is, köszi.
- A hozzászóláshoz be kell jelentkezni