#!/bin/bash # Karte ar korekciju satelitkarte='http://myname.vic.lv/Map/' tmpkartes=`mktemp` # Izskirtspeeja - jaieraksta cik m liels ir 1 pikselis, mazaakais=1. 25000 jaadalaas bez atlikuma ar izskirtspeeju izskirtspeja=1 # montēšanas bildes atsevišķās bildītes izšķirtspēja (oriģinālie pikseļi/fināla pikselī) fin_izskirtspeeja=1 # mazaas bildes attieciiba maz_izskirtspeeja=5 solisX=1000 solisY=1000 # ImageMagick taisa lielus temfailus - jānorāda vieta, kur to var darīt. Diemžēļ šis pasākums (MAGICK_TMPDIR norādīšana) nezināmu iemeslu dēļ nestrādā if [ ! -d `pwd`/tmp ] ; then mkdir `pwd`/tmp fi MAGICK_TMPDIR=`pwd`/tmp export MAGICK_TMPDIR # Visi karshu nosaukumi (izvada arī uz ekrāna) wget $satelitkarte -O - -q | grep Data.*jpg | tr -d \" | sed 's/.*\\//g' | sed 's/.jpg//g' | sort function func_ortofoto { logfile=log-$karte.log npk=1000 ## XCOUNT un YCOUNT - skaitļi, kas norāda karšu skaitu mapē YCOUNT=0 # Visas kartes velkam 1x1km # echo $XA $YA $XB $YB $XSKAITS $YSKAITS $karte izmers=$solisX\x$solisY # Izveidojam attieciigo direktoriju. kur glabaat 1x1km aerofoto kartes mkdir map-$karte # visas mazo karshu apakseejaas Y karshu koordinaates saakot no lielaakas for Y in `seq $(($YB-$solisY)) -$solisY $(($YA-$solisY+10))` do XCOUNT=0 # visas mazo karshu apakseejaas Y koordinaates for X in `seq $XA $solisX $(($XB-10)) ` do # genereeajam bildes nosaukumu bilde=map-$karte/$npk-$X-$Y if [ -f $bilde.jpg ] && [ `identify -format '%wx%h' $bilde.jpg` == $izmers ] ; then echo -n . echo == $bilde ar izmeeru `identify -format '%wx%h' $bilde.jpg` jau eksistee == | tee -a $logfile else wget -nv "http://maps.kartes.lv/kijs/server_scripts/orto/get_orto_foto.php?BBOX=$X,$Y,$(($X+$solisX)),$(($Y+$solisY))&WIDTH=$solisX&HEIGHT=$solisY&KIJS=BM45" -O $bilde.jpg -a wget-$karte.log && bildes_izmers=`identify -format '%wx%h' $bilde.jpg` | tee -a $logfile fi # Pāŗbaudam, vai nav balti pleķi uz mazās bildes if [ `convert $bilde.jpg -crop 1x1+5+5 txt:- | tail -n 1 | awk '{print $4}'` == "white" -o `convert $bilde.jpg -crop 1x1+255+5 txt:- | tail -n 1 | awk '{print $4}'` == "white" -o `convert $bilde.jpg -crop 1x1+255+255 txt:- | tail -n 1 | awk '{print $4}'` == "white" -o `convert $bilde.jpg -crop 1x1+5+255 txt:- | tail -n 1 | awk '{print $4}'` == "white" ] ; then echo == balta bilde $bilde == | tee -a $logfile KOREKCIJA=300 wget -nv "http://maps.kartes.lv/kijs/server_scripts/orto/get_orto_foto.php?BBOX=$(($X-$KOREKCIJA)),$Y,$(($X+$solisX)),$(($Y+$solisY))&WIDTH=$(($solisX + $KOREKCIJA))&HEIGHT=$solisY&KIJS=BM45" -O $bilde.jpg | tee -a $logfile && convert -crop $solisX\x$solisY+$KOREKCIJA $bilde.jpg $bilde.jpg 2>/dev/null bildes_izmers=`identify -format '%wx%h' $bilde.jpg` if [[ $bildes_izmers != $izmers ]] ; then # izveidojam mazu baltu bildi, kas nepiecieshama veelaak pie montage echo -n g echo == veidojam mazu peleeku bildi $bilde.jpg == rm $bilde.jpg convert -size 10x10 xc:gray95 $bilde.jpg fi fi # Palielinam XCOUNT skaitu XCOUNT=$(($XCOUNT+1)) # Palielinam npk skaitu, lai kartes būtu pēc kārtas npk=$(($npk+1)) done # Palielinam YCOUNT skaitu YCOUNT=$(($YCOUNT+1)) done # ievadam mainīgo datus indekss failā - vēlākai lietošanai ar montage echo '#'$karte > map-$karte/00-index.txt echo -e XCOUNT=$XCOUNT\\nYCOUNT=$YCOUNT\\nXKREISAIS=$XA\\nXLABAIS=$XB\\nYAPAKSA=$YA\\nYAUGSA=$YB\\nXIZMERS=$XSKAITS\\nYIZMERS=$YSKAITS >> map-$karte/00-index.txt echo -e XMIN=$XA\\nXMAX=$(($XA+$XCOUNT*$solisX))\\nYMIN=$(($YB-$YCOUNT*$solisY))\\nYMAX=$YB >> map-$karte/00-index.txt } ## Montēšanas f-ja - varam izsaukt vēlāk function func_montage { logfile=log-$karte.log #aprēķinam oriģinālās bildes ģeometriju GEOM=$(($solisX/$fin_izskirtspeeja)) # aprēķinām samazinātās bildes ģeometriju SMGEOM=$(($GEOM/$maz_izskirtspeeja)) mapname=aerofoto-$karte.jpg if [ -f ./$mapname ] ; then echo == karte $mapname jau eksistē - pārsaucam par aerofoto-$karte-`date +%s`.jpg == | tee -a $logfile mv $mapname aerofoto-$karte-`date +%s`.jpg fi # Ielasam jau aprēķinātās vēŗtības if [ -f map-$karte/00-index.txt ] ; then . map-$karte/00-index.txt ## Zemākā rinda ir jāatkomentē, lai izveidotu lielo bildi oriģinālajā izmērā (1px=1m2), jo komanda taisa ~625 Mpix lielu bildi # time montage -verbose -tile $XCOUNT\x$YCOUNT -geometry $GEOM\x$GEOM ./map-$karte/*.jpg ./$mapname | tee -a $logfile # Uztaisam arii mazaaku failu ar zemaaku izšķirtspēju if [ ! -f ./aerofoto-$karte-$maz_izskirtspeeja.jpg ] ; then echo == veidojam karti == | tee -a $logfile time montage -verbose -tile $XCOUNT\x$YCOUNT -geometry $SMGEOM\x$SMGEOM ./map-$karte/*.jpg ./aerofoto-$karte-$maz_izskirtspeeja.jpg | tee -a $logfile fi else echo "fails nav atrasts - varbūt kartes vēl nav novilktas" fi } # Novelkam kartes datus ar // BLOGSPOT šo rindu neņem pilnībā pretim - ideja - novelkam kartes datus un koordinātes no satelītkartes un ievietojam tos $tmpkartes failā. wget $satelitkarte -O - -q | grep "\ $tmpkartes cat $tmpkartes | while read xa ya xb yb karte cits do # Apstrādājam tikai norādīto karti if [[ $karte == $1 ]] ; then # echo $xa $xb $karte # Mainam X, ja pirmais ir lielaaks kaa Y if [ $xa -gt $xb ] then # echo mainam tmp=$xa ; xa=$xb ; xb=$tmp # echo $xa $xb fi if [ $yb -gt $ya ] then # echo mainam tmp=$ya ; ya=$yb ; yb=$tmp # echo $ya $yb fi # echo $xa\\t$ya\\t$xb\\t$yb\\t$karte # Reekinam koordinaates kartee XA=`echo "(294131+100+$xa*5000/23)/5000*5000" | bc ` XB=`echo "(294131+100+$xb*5000/23)/5000*5000" | bc ` YA=`echo "(6457608+100-$ya*5000/23)/5000*5000" | bc ` YB=`echo "(6457608+100-$yb*5000/23)/5000*5000" | bc ` YSKAITS=$(($YB-$YA)) XSKAITS=$(($XB-$XA)) # echo $XA $YA $XB $YB $XSKAITS $YSKAITS $karte func_ortofoto $XA $YA $XB $YB $XSKAITS $YSKAITS $karte func_montage $karte fi done rm $tmpkartes