shellcheck overpass
This commit is contained in:
parent
220df86e66
commit
cc5233a2dc
162
bin/overpass
162
bin/overpass
|
@ -1,16 +1,22 @@
|
|||
#!/bin/bash
|
||||
|
||||
usage() {
|
||||
echo
|
||||
echo -e "Usage:\t$0 <filename.ql>"
|
||||
echo
|
||||
echo -e "\t[-p <string>]\tGeographic scope. Split by commas. If empty, search area will be ['ISO3166-1'=ES]"
|
||||
echo -e "\t[-a <string>]\tSearch area expression. Wrapped with brackets, i.e. [name=Matarrosa][admin_level=8]"
|
||||
echo -e "\t[-t <integer>]\tQuery timeout in seconds (default: 900)"
|
||||
echo -e "\t[-n <string>]\tOutput filename"
|
||||
echo -e "\t[-s <string>]\tOverpass server (default: https://overpass-api.de/api/interpreter)"
|
||||
echo -e "\t[-w <integer>]\tRetry time in seconds (default: 60)"
|
||||
echo
|
||||
cat <<-EOF | column -s"~" -t
|
||||
~
|
||||
Usage:~${0} <filename.ql> [OPTIONS]
|
||||
~
|
||||
-p~Geographic scope. Split by commas. If empty, search area will be ['ISO3166-1'=ES]
|
||||
~Available presets:
|
||||
~ ccaa: AN AR AS CB CE CL CM CN CT EX GA IB MC MD ML NC PV RI VC
|
||||
~ prov: A AB AL AV B BA BI BU C CA CC CO CR CS CU GC GI GR GU H HU J L LE LO LU M MA MU NA O OR P PM PO S SA SE SG SO SS T TE TF TO V VA VI Z ZA
|
||||
-a~Search area expression. Wrapped with brackets, i.e. [name=Matarrosa][admin_level=8]
|
||||
-t~query timeout in seconds (default: 900)
|
||||
-n~Output filename
|
||||
-s~Overpass server (default: https://overpass-api.de/api/interpreter)
|
||||
-w~Retry time in seconds (default: 60)
|
||||
~
|
||||
EOF
|
||||
|
||||
exit 1;
|
||||
}
|
||||
|
||||
|
@ -23,14 +29,14 @@ if [[ ! -f $1 ]] ; then
|
|||
usage;
|
||||
fi
|
||||
|
||||
TIMEOUT=900
|
||||
WAITRETRY=60
|
||||
SERVER="https://overpass-api.de/api/interpreter"
|
||||
PROVINCES=()
|
||||
AREAEXPR=
|
||||
NAME=
|
||||
QUERY=$1
|
||||
JOIN=
|
||||
# defaults
|
||||
timeout=900
|
||||
waitretry=60
|
||||
server="https://overpass-api.de/api/interpreter"
|
||||
provinces=()
|
||||
areaexpr=
|
||||
name=
|
||||
query=$1
|
||||
|
||||
# move the file argument, to parse the rest of options
|
||||
shift
|
||||
|
@ -38,115 +44,115 @@ shift
|
|||
while getopts "t:s:w:a:p:n:" o; do
|
||||
case "${o}" in
|
||||
t)
|
||||
TIMEOUT=${OPTARG}
|
||||
timeout=${OPTARG}
|
||||
;;
|
||||
s)
|
||||
SERVER=${OPTARG}
|
||||
server=${OPTARG}
|
||||
;;
|
||||
w)
|
||||
WAITRETRY=${OPTARG}
|
||||
waitretry=${OPTARG}
|
||||
;;
|
||||
a)
|
||||
AREAEXPR=${OPTARG}
|
||||
areaexpr=${OPTARG}
|
||||
;;
|
||||
n)
|
||||
NAME=${OPTARG}
|
||||
name=${OPTARG}
|
||||
;;
|
||||
p)
|
||||
# presets for group elements all in once
|
||||
if [[ $OPTARG == "CCAA" ]]; then
|
||||
PROVINCES=(AN AR AS CB CE CL CM CN CT EX GA IB MC MD ML NC PV RI VC)
|
||||
elif [[ $OPTARG == "PROV" ]]; then
|
||||
PROVINCES=(A AB AL AV B BA BI BU C CA CC CO CR CS CU GC GI GR GU H HU J L LE LO LU M MA MU NA O OR P PM PO S SA SE SG SO SS T TE TF TO V VA VI Z ZA)
|
||||
if [[ "${OPTARG,,}" == "ccaa" ]]; then
|
||||
provinces=(AN AR AS CB CE CL CM CN CT EX GA IB MC MD ML NC PV RI VC)
|
||||
elif [[ "${OPTARG,,}" == "prov" ]]; then
|
||||
provinces=(A AB AL AV B BA BI BU C CA CC CO CR CS CU GC GI GR GU H HU J L LE LO LU M MA MU NA O OR P PM PO S SA SE SG SO SS T TE TF TO V VA VI Z ZA)
|
||||
else
|
||||
set -f
|
||||
IFS=','
|
||||
PROVINCES=($OPTARG)
|
||||
IFS="," read -r -a provinces <<< "${OPTARG}"
|
||||
fi
|
||||
;;
|
||||
j)
|
||||
JOIN=1
|
||||
;;
|
||||
*)
|
||||
usage
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
function out() {
|
||||
local CONTENT="$1"
|
||||
# waiting time in seconds of the waitretry +/- 25%
|
||||
delay=$(( ( RANDOM % $(( "${waitretry}" * 5 / 4 )) ) + $(( "${waitretry}" * 3 / 4 )) ));
|
||||
|
||||
cat <<-EOF
|
||||
[out:xml][timeout:$TIMEOUT];
|
||||
$CONTENT
|
||||
out meta;
|
||||
>;
|
||||
out meta qt;
|
||||
# handle kill signs
|
||||
trap "echo; exit 1" INT TERM
|
||||
|
||||
function out() {
|
||||
local content="$1"
|
||||
|
||||
cat <<EOF
|
||||
[out:xml][timeout:${timeout}];
|
||||
${content}
|
||||
out meta;
|
||||
>;
|
||||
out meta qt;
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
function province() {
|
||||
local CONTENT_SCOPED=$(echo "$1" | sed -r "s/(node|way|rel|nw|wr|nwr)/\1(area.searchArea)/")
|
||||
local content_scoped
|
||||
content_scoped=$(echo "$1" | sed -r "s/(node|way|rel|nw|wr|nwr)/\1(area.searchArea)/")
|
||||
|
||||
case "$2" in
|
||||
ES)
|
||||
AREA="area['ISO3166-1'=ES]"
|
||||
area="area['ISO3166-1'=ES]"
|
||||
;;
|
||||
CUSTOM)
|
||||
AREA="area$3"
|
||||
area="area$3"
|
||||
;;
|
||||
*)
|
||||
AREA="area['ISO3166-2'='ES-$2']"
|
||||
area="area['ISO3166-2'='ES-$2']"
|
||||
;;
|
||||
esac
|
||||
|
||||
cat <<-EOF
|
||||
$AREA->.searchArea;
|
||||
$CONTENT_SCOPED
|
||||
cat <<EOF
|
||||
${area}->.searchArea;
|
||||
${content_scoped}
|
||||
EOF
|
||||
}
|
||||
|
||||
# waiting time in seconds of the WAITRETRY +/- 25%
|
||||
DELAY=$(( ( RANDOM % $(expr $WAITRETRY \* 5 / 4) ) + $(expr $WAITRETRY \* 3 / 4) ));
|
||||
function query() {
|
||||
while true; do
|
||||
defname=$1
|
||||
filename=${name:-"${defname}"}.osm
|
||||
|
||||
if wget -O "data/${filename}" --post-file="${tmp}" "${server}" --no-verbose; then break; fi; # check return value, break if successful (0)
|
||||
|
||||
if [[ ! -z "${PROVINCES[@]}" ]]; then
|
||||
for i in "${PROVINCES[@]}"; do
|
||||
tmp=/tmp/overpassql/$(date +%F).$i.$(basename $QUERY)
|
||||
mkdir -p $(dirname $tmp) && touch $tmp
|
||||
province "$(< $QUERY)" $i > $tmp
|
||||
out "$(< $tmp)" | tee $tmp
|
||||
sleep "${delay}";
|
||||
done;
|
||||
}
|
||||
|
||||
while [ 1 ]; do
|
||||
defname=$(basename $QUERY).$i
|
||||
filename=${NAME:-$defname}.osm
|
||||
wget -O data/$filename --post-file=$tmp $SERVER --no-verbose
|
||||
if [ $? = 0 ]; then break; fi; # check return value, break if successful (0)
|
||||
sleep $DELAY;
|
||||
done
|
||||
if [[ "${#provinces[@]}" -ne 0 ]]; then
|
||||
for i in "${provinces[@]}"; do
|
||||
tmp="/tmp/overpassql/$(date +%F).${i}.$(basename "${query}")"
|
||||
mkdir -p "$(dirname "${tmp}")" && touch "${tmp}"
|
||||
|
||||
rm $tmp
|
||||
province "$(< "${query}")" "${i}" > "${tmp}"
|
||||
|
||||
out "$(< "${tmp}")" | tee "${tmp}"
|
||||
|
||||
query "$(basename "${query}")"."${i}"
|
||||
|
||||
rm "${tmp}"
|
||||
done
|
||||
else
|
||||
tmp=/tmp/overpassql/$(date +%F).$(basename $QUERY)
|
||||
mkdir -p $(dirname $tmp) && touch $tmp
|
||||
echo "$(< $QUERY)" > $tmp
|
||||
tmp="/tmp/overpassql/$(date +%F).$(basename "${query}")"
|
||||
mkdir -p "$(dirname "${tmp}")" && touch "${tmp}"
|
||||
echo "$(< "${query}")" > "${tmp}"
|
||||
|
||||
if [[ ! -z "$AREAEXPR" ]]; then
|
||||
province "$(< $tmp)" CUSTOM "$AREAEXPR" > $tmp
|
||||
if [[ -n "${areaexpr}" ]]; then
|
||||
province "$(< "${tmp}")" CUSTOM "${areaexpr}" > "${tmp}"
|
||||
fi
|
||||
|
||||
out "$(< $tmp)" | tee $tmp
|
||||
out "$(< "${tmp}")" | tee "${tmp}"
|
||||
|
||||
while [ 1 ]; do
|
||||
defname=$(basename $QUERY)
|
||||
filename=${NAME:-$defname}.osm
|
||||
wget -O data/$filename --post-file=$tmp $SERVER --no-verbose
|
||||
if [ $? = 0 ]; then break; fi; # check return value, break if successful (0)
|
||||
sleep $DELAY;
|
||||
done;
|
||||
query "$(basename "${query}")"
|
||||
|
||||
rm $tmp
|
||||
rm "${tmp}"
|
||||
fi
|
||||
|
||||
exit 0;
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
nwr["name"]["alt_name"](if: t["name"] == t["alt_name"]);
|
Loading…
Reference in New Issue