#!/bin/bash# Karte ar korekcijusatelitkarte='http://myname.vic.lv/Map/'tmpkartes=`mktemp`# Izskirtspeeja - jaieraksta cik m liels ir 1 pikselis, mazaakais=1. 25000 jaadalaas bez atlikuma ar izskirtspeejuizskirtspeja=1# montēšanas bildes atsevišķās bildītes izšķirtspēja (oriģinālie pikseļi/fināla pikselī)fin_izskirtspeeja=1# mazaas bildes attieciibamaz_izskirtspeeja=5solisX=1000solisY=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 fiMAGICK_TMPDIR=`pwd`/tmpexport 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' | sortfunction func_ortofoto {logfile=log-$karte.lognpk=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 $karteizmers=$solisX\x$solisY# Izveidojam attieciigo direktoriju. kur glabaat 1x1km aerofoto kartesmkdir map-$karte# visas mazo karshu apakseejaas Y karshu koordinaates saakot no lielaakasfor Y in `seq $(($YB-$solisY)) -$solisY $(($YA-$solisY+10))`doXCOUNT=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 skaituYCOUNT=$(($YCOUNT+1))done# ievadam mainīgo datus indekss failā - vēlākai lietošanai ar montageecho '#'$karte > map-$karte/00-index.txtecho -e XCOUNT=$XCOUNT\\nYCOUNT=$YCOUNT\\nXKREISAIS=$XA\\nXLABAIS=$XB\\nYAPAKSA=$YA\\nYAUGSA=$YB\\nXIZMERS=$XSKAITS\\nYIZMERS=$YSKAITS >> map-$karte/00-index.txtecho -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 ģeometrijuSMGEOM=$(($GEOM/$maz_izskirtspeeja))mapname=aerofoto-$karte.jpgif [ -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`.jpgfi# 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 fielseecho "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 "\<area" | sed 's/<area shape="rect" coords="//g' | sed 's/" href="Data\\/\t/g' | sed 's/.jpg"//g' | tr , \\t > $tmpkartescat $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 donerm $tmpkartes