source: subversion/applications/utils/cadastre-france/import-bati.sh @ 26891

Last change on this file since 26891 was 22845, checked in by vvass, 9 years ago

tweak default parameters

  • Property svn:executable set to *
File size: 5.0 KB
Line 
1#!/bin/sh
2# Repris du script (r-cadastre-client) de Frédéric Rodrigo, copyleft 2009 - GPL 2.0
3if [ $# -lt 4 ] || [ $# -gt 5 ] ; then
4    cat <<EOF
5Usage: import-bati.sh [OPTION] [dept] [ville] [repertoire] [IGNF]
6   -f,--force    force un retéléchargement des fichiers
7  dept           numéro de département sur 3 chiffres
8  ville          nom de la ville tel qu'il figure sur le site
9  repertoire     repertoire de sortie
10  IGNF           code IGNF correspondant à la ville
11                   LAMB[E1-4], RGF93CC[42-50], GUADFM49U20, GUAD48UTM20,
12                   MART38UTM20, RGR92UTM40S, UTM22RGFG95
13EOF
14    exit
15fi;
16
17force=false
18if [ $1 = "-f" ] || [ $1 = "--force" ] ; then
19    force=true
20    shift 1
21fi;
22departement=$1
23ville=$2
24dir=$3
25IGNF=$4
26# Pour obtenir une bonne précision sur les communes étendues, on prend
27# des rectangles de l_deg x h_deg (en degrés) pour les imprimer sur
28# une zone de l_pix x h_pix (en pixels)
29l_deg=2000
30h_deg=2000
31l_pix=9000
32h_pix=9000
33IFS="\n"
34
35# répertoire temporaire
36[ -d tmp ] || mkdir tmp
37
38# répertoire de sortie
39[ -d "$dir" ] || mkdir "$dir"
40
41# répertoire de sortie
42[ -d "${dir}/pdf" ] || mkdir "${dir}/pdf"
43
44# répertoire de sortie
45[ -d "${dir}/osm" ] || mkdir "${dir}/osm"
46
47
48# Requête POST
49villeHTTP=`echo "${ville}" | sed 's/ /+/g'`
50data="numeroVoie=&indiceRepetition=&nomVoie=&lieuDit=&ville=${villeHTTP}&codePostal=&codeDepartement=${departement}&nbResultatParPage=10&x=31&y=11"
51
52# Récupération du code de la commune
53code=`find "$dir/pdf/" -depth -name "${departement}-${ville}-*.bbox" | head -n1 \
54    | sed "s/^$dir\/pdf\/${departement}-${ville}-\([^-]*\)\.bbox.*$/\1/"`
55if [ -z "$code" ] || $force ; then
56    curl -c tmp/cookies-$$-1 \
57        "http://www.cadastre.gouv.fr/scpc/rechercherPlan.do" > tmp/page-$$-1.html
58    curl -b tmp/cookies-$$-1 \
59        -c tmp/cookies-$$-2 \
60        -d "$data" \
61        "http://www.cadastre.gouv.fr/scpc/rechercherPlan.do" > tmp/page-$$-2.html
62
63    code=`grep 'afficherCarteCommune.do?c=' tmp/page-$$-2.html | sed 's/.*afficherCarteCommune.do?c=\([A-Z0-9]*\).*/\1/'`
64    if [ -z "$code" ]; then
65        code=`grep -o -E "<option value=\"S[0-9]+\" >${ville} - [0-9]+</option>" tmp/page-$$-2.html | cut -d '"' -f 2`
66    fi
67    if [ -z "$code" ]; then
68        echo "Pas de code de commune"
69        exit
70    fi
71fi
72echo CODE=$code
73baseName=${departement}-${ville}-${code}
74
75if $force || [ !  -f "$dir/pdf/$baseName-0-0.pdf"  ] || [ !  -f "$dir/pdf/$baseName.bbox"  ] ;  then
76# Récupération de la bounding-box de la commune
77    curl -b tmp/cookies-$$-2 \
78        -c tmp/cookies-$$-3 \
79        "http://www.cadastre.gouv.fr/scpc/afficherCarteCommune.do?c=${code}&dontSaveLastForward&keepVolatileSession=" \
80        > tmp/page-$$-3.html
81    bb=`grep -A4 'new GeoBox' tmp/page-$$-3.html | head -n5 \
82        | tr "[:cntrl:]" " " | tr -s "[:space:]" \
83        | sed -r 's/.*\( ([0-9.]+), ([0-9.]+), ([0-9.]+), ([0-9.]+)\).*/\1 \2 \3 \4/'`
84    echo ${bb} > "$dir/pdf/$baseName.bbox";
85else
86    bb=`cat "$dir/pdf/$baseName.bbox"`
87fi;
88[ -z "$bb" ] && rm "$dir/pdf/$baseName.bbox"
89
90echo BB=${bb}
91
92xmin=`echo ${bb} | awk '{print $1}'`
93xmin=`echo "$xmin - 10" | bc`
94xmax=`echo ${bb} | awk '{print $3}'`
95xmax=`echo "$xmax + 10" | bc`
96ymin=`echo ${bb} | awk '{print $2}'`
97ymin=`echo "$ymin - 10" | bc`
98ymax=`echo ${bb} | awk '{print $4}'`
99ymax=`echo "$ymax + 10" | bc`
100
101# Découpe la bbox en m x n rectangles
102m=`echo "($xmax-$xmin-1)/$l_deg+1" | bc`
103n=`echo "($ymax-$ymin-1)/$h_deg+1" | bc`
104i=0
105while [ $i -lt $m ] ;
106do
107    j=0
108    while [ $j -lt $n ] ;
109    do
110        l_pix2=$l_pix
111        h_pix2=$h_pix
112        x1=`echo "scale = 2; $xmin + $i * $l_deg" | bc`
113        x2=`echo "scale = 2; $x1 + $l_deg" | bc`
114        if [ `echo "$x2 > $xmax" | bc` -eq 1 ]
115        then
116            x2=$xmax
117            l_pix2=`echo "scale = 0; ($x2-$x1) * $l_pix / $l_deg" | bc`
118        fi
119        y1=`echo "scale = 2; $ymin + $j * $h_deg" | bc`
120        y2=`echo "scale = 2; $y1 + $h_deg" | bc`
121        if [ `echo "$y2 > $ymax" | bc` -eq 1 ]
122        then
123            y2=$ymax
124            h_pix2=`echo "scale = 0; ($y2-$y1) * $h_pix / $h_deg" | bc`
125        fi
126
127        if $force || [ ! -f "$dir/pdf/$baseName-$i-$j.svg" ] ; then
128            curl -b tmp/cookies-$$-2 \
129                -c tmp/cookies-$$-3 \
130                -d "WIDTH=$l_pix2" \
131                -d "HEIGHT=$h_pix2" \
132                -d "MAPBBOX=$x1%2C$y1%2C$x2%2C$y2" \
133                -d "SLD_BODY=" \
134                -d "RFV_REF=$code" \
135                "http://www.cadastre.gouv.fr/scpc/imprimerExtraitCadastralNonNormalise.do" \
136                > "$dir/pdf/$baseName-$i-$j.pdf"
137
138            pdf2svg "$dir/pdf/$baseName-$i-$j.pdf" "$dir/pdf/$baseName-$i-$j.svg" \
139                || rm "$dir/pdf/$baseName-$i-$j.pdf"
140        fi
141# Stocke le nom de chaque fichier suivi de sa bbox
142        fichiers[$((5*($n*$i+$j)))]="$dir/pdf/$baseName-$i-$j.svg"
143        fichiers[$((5*($n*$i+$j)+1))]=$x1
144        fichiers[$((5*($n*$i+$j)+2))]=$y1
145        fichiers[$((5*($n*$i+$j)+3))]=$x2
146        fichiers[$((5*($n*$i+$j)+4))]=$y2
147
148        j=$((j+1))
149    done;
150    i=$((i+1))
151done;
152
153perl svg-parser.pl \
154    -l "$dir/osm/$baseName-limite.osm" \
155    -b "$dir/osm/$baseName.osm" \
156    -r "$dir/osm/$baseName.osm" \
157    -w "$dir/osm/$baseName.osm" \
158    -t "$dir/osm/$baseName-train.osm" \
159    $IGNF ${fichiers[*]}
160while [ $i -lt $m ] ;
161do
162    j=0
163    while [ $j -lt $n ] ;
164    do
165        rm "$dir/pdf/$baseName-$i-$j.svg"
166        j=$((j+1))
167    done;
168    i=$((i+1))
169done;
Note: See TracBrowser for help on using the repository browser.