neljapäev, aprill 18, 2013

Kaardinduse abivahend isetegijale

Iga jumala kord, kui ma hakkan kuskile loodusesse miskit brausimist tegema minema, tuleb kõigepealt kaartidega mässata. Kuskilt ei saa normaalset kaarti normaalses mõõdus ning tuleb kogu aeg lõigata-kleepida ning ropult aeg raisata.
Aitab.

Tegin ühe väikese skripti, mis tõmbab wms'ist Maaameti kaardipilte ning kleebib need siis vastavalt etteantavatele parameetritele kokku. Nii saab tekitada päris täpse kaardi päris suure ala kohta päris hea resoga. Kahepoolse A3 jagu 300DPI tihedusega pildimaterjali kokku saada pole enam mingi probleem. Limiidi sätib vaid masina jõudlus pilti renderdada ja interneti kiirus piltide sikutamisel.

 Kuna mul pole imagemagicut installitud ja ei viitsinud hakata seda väga torkima, siis üldpildi kättesaamiseks tuleb kasutada kavalust. Mina tarbin selleks Firefoxi pluginit Screengrab, mis teeb siis kogu veebilehest pildi.

Võibolla on kogu selle tegevuse jaoks mõni parem tööriist olemas, kuid mulle pole kahjuks ette sattunud. Nii mõnigi programm oskab WMS infot tõmmata ja kihina kaardile kuvada, kuid pildi kätte saamise või printimise puhul on alati hambad.
Edaspidi igaljuhul on minu kaartide ettevalmistamine palju lühemaajalisem ning saab rohkem aega kulutada trajektoori enda tuunimisele.

Kujundus on muidugi nagu on, aga nuppude tähendus võiks enamvähem loogiline olla.Ja mõõtkava temaatikast pole ma ennast veel läbi närinud. Kui viitsin, siis millagi uurin. Senimaani tuleb loovalt läheneda.
Kes soovib see proovib. Heade soovituste puhul võib teada anda.



 <html>
<head><title>wms kaardi kodu</title>
</head><body>
<?php
if(!isset($x)) $x = "553675";
if(!isset($y)) $y = "6580486";
if(!isset($xsize)) $xsize = "1000";
if(!isset($ysize)) $ysize = "1000";
if(!isset($tilex)) $tilex = "3";
if(!isset($tiley)) $tiley = "3";
if(!isset($pixels)) $pixels = "300";
if(!isset($layer)) $layer = "ALUSKAART";
if(!isset($grid)) $grid = "0";

$layers = array('ALUSKAART' => "pohi_vr2",
                'ORTO'=>"of10000",
        'MV-ALUSKAART' => 'pohi_mvr2');
$imgurl = "http://kaart.maaamet.ee/wms/alus?SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&FORMAT=image/png&LAYERS=".
        $layers["$layer"]."&STYLES=&SRS=EPSG:3301";
$height = $pixels;
$width = $pixels;
$imgheight = "height=$height";
$imgwidth = "width=$width";

$zoomfactorx = $xsize;
$zoomfactory = $ysize;

if (isset($pan)) {
    if ($pan == 'left') $x-=$zoomfactorx;
    if ($pan == 'right') $x+=$zoomfactorx;
    if ($pan == 'up') $y+=$zoomfactory;
    if ($pan == 'down') $y-=$zoomfactory;
}

if(isset($submit) && $submit == 'zoomout') {
    $xsize +=round($zoomfactorx/4);
    $ysize +=round($zoomfactory/4);
} else if(isset($submit) && $submit == 'zoomin') {
    $xsize -=round($zoomfactorx/4);
    $ysize -=round($zoomfactory/4);
}
$sx = $x-round(($tilex*$xsize)/2);
$sy = $y+round(($tiley*$ysize)/2)-$ysize;
for ($i=-1;$i>=-$tiley;$i--) {   //y
    for ($j=0;$j<$tilex;$j++) { // x
        $x1 = $sx+($j*$xsize);
        $y1 = $sy+$i*$ysize;
        $x2 = $x1+$xsize;
        $y2 = $y1+$ysize;
        $bbox = "bbox=$x1,$y1,$x2,$y2";
        $imgurl2 = $imgurl."&$imgheight&$imgwidth&$bbox";
        $images .= "<img  border=$grid margin=0 src=\"$imgurl2\" />";

    }
}
$divwidth = $width*$tilex+30;
$divheight = $height*$tiley+30;
?>
<form action="<?=$PHP_SELF?>" >

x<input type="text" name="x" value="<?=$x?>">
suurus<input type="text" name="xsize" value="<?=$xsize?>">
<br />y<input type="text" name="y" value="<?=$y?>">
suurus<input type="text" name="ysize" value="<?=$ysize?>">

<br /><input type="submit" name="submit" value="zoomin">
<input type="submit" name="submit" value="zoomout">

<div>
<input type="submit" name="pan" value="left">
<input type="submit" name="pan" value="up">
<input type="submit" name="pan" value="down">
<input type="submit" name="pan" value="right">
</div>

<select name="layer"><? print makeoption(array_keys($layers), false, $layer)?></select>
pilte <input type="text" size="2" name="tilex" value="<?=$tilex?>"> * <input type="text" size="2" name="tiley" value="<?=$tiley?>">
 pixleid (<2048) <input type="text" size="4" name="pixels" value="<?=$pixels?>">
Grid <input type="checkbox" name="grid" value="1" <? if($grid==1) echo "checked";?>>

<br /><input style="width:200;height:50;" type="submit" name="submit" value="uuenda">
</form>
<div style="border:2px;width:<?=$divwidth?>px;height:<?=$divheight?>px;" >
<?=$images?>
</div>

<?php
function makeoption($data, $keys, $sel='') {
        $result = '';
        if (is_array($data) && count($data) >0) {
                while (list($key, $val) = each($data)) {
                        if ($keys != true) $key = $val;
                        if ($key == $sel) $s = "selected";
                        else $s = '';
                        $result .= "<option value=\"$key\" $s>$val</option>\n";
                }
        }
        return $result;
}
?>
</body></html>



Kommentaare ei ole: