#!/bin/sh -e
if [[ $# -lt 2 ]]; then
	print -u2 "usage: osm-norm.sh source target maxerr"
	exit
fi
#
local _src="${1}"
local _tgt="${2}"
local _err="${3:-10}"
print "${_src} -> ${_tgt} (${_err})"
#
#osmosis --read-xml "${_src1}" --sort \
# --read-xml "${_src2}" --sort \
# --derive-change outPipe.0=diff \
# --read-empty outPipe.0=empty \
# --apply-change inPipe.0=empty inPipe.1=diff
# outPipe.0=fifi \
# --write-xml inPipe.0=fifi
# file="${_tgt}"
#
if [[ 0 -eq 0 ]]; then
_td=$(mktemp -t -d osmnorm-XXXXXX)
print "temp dir: ${_td}"
_fnnorm="${_td}/norm.osm"
_fnused="${_td}/used.osm"
_fnpois="${_td}/pois.osm"
_fndiff="${_td}/diff.osm"

print simplify-ways
osmosis \
  -quiet 0 \
  --read-xml file="${_src}" outPipe.0=source \
  --sort inPipe.0=source outPipe.0=sourcesort \
  --simplify-ways epsilonMeters="${_err}" inPipe.0=sourcesort outPipe.0=norm \
  --sort inPipe.0=norm outPipe.0=normsort \
  --write-pbf inPipe.0=normsort file="${_fnnorm}" 

print used-node
osmosis \
  -quiet 0 \
  --read-pbf file="${_fnnorm}" outPipe.0=norm \
  --used-node inPipe.0=norm outPipe.0=usedonly \
  --sort inPipe.0=usedonly outPipe.0=usedonlysort \
  --write-pbf inPipe.0=usedonlysort file="${_fnused}" 

print derive-change
osmosis \
  -quiet 0 \
  --read-pbf file="${_fnnorm}" outPipe.0=norm \
  --read-pbf file="${_fnused}" outPipe.0=used \
  --derive-change inPipe.0=used inPipe.1=norm outPipe.0=diff \
  --sort-change inPipe.0=diff outPipe.0=diffsort \
  --read-empty outPipe.0=empty \
  --apply-change inPipe.0=empty inPipe.1=diffsort outPipe.0=diffosm \
  --write-pbf inPipe.0=diffosm file="${_fndiff}" 
 
print tag-transform, node-key
osmosis \
  -quiet 0 \
  --read-pbf file="${_fndiff}" outPipe.0=diffosm \
  --tag-transform file="${HOME}/.nonemptynodes.xml" inPipe.0=diffosm outPipe.0=tt \
  --node-key keyList="is_poi" inPipe.0=tt outPipe.0=pois \
  --write-pbf inPipe.0=pois file="${_fnpois}" 

print merge
osmosis \
  -quiet 0 \
  --read-pbf file="${_fnused}" outPipe.0=used \
  --read-pbf file="${_fnpois}" outPipe.0=pois \
  --merge inPipe.0=used inPipe.1=pois outPipe.0=merged \
  --write-xml inPipe.0=merged file="${_tgt}" 

rm -rf "${_td}"
exit
fi
if [[ 0 -eq 1 ]]; then
_td=$(mktemp -t -d osmnorm-XXXXXX)
print "temp dir: ${_td}"
_fnnorm="${_td}/norm.osm"
_fnused="${_td}/used.osm"
_fnpois="${_td}/pois.osm"
osmosis \
  -verbose 5 \
  --read-xml file="${_src}" outPipe.0=source \
  --sort inPipe.0=source outPipe.0=sourcesort \
  --simplify-ways epsilonMeters="${_err}" inPipe.0=sourcesort outPipe.0=norm \
  --sort inPipe.0=norm outPipe.0=normsort \
  --write-pbf file="${_fnnorm}" inPipe.0=normsort \
  --read-pbf file="${_fnnorm}" outPipe.0=normsortf \
  \
  --used-node inPipe.0=normsortf outPipe.0=usedonly \
  --sort inPipe.0=usedonly outPipe.0=usedonlysort \
  \
  --write-pbf file="${_fnused}" inPipe.0=usedonlysort \
  --read-pbf file="${_fnused}" outPipe.0=usedonly \
  --read-pbf file="${_fnnorm}" outPipe.0=norm \
  \
  --derive-change inPipe.0=usedonly inPipe.1=norm outPipe.0=diff \
  --sort-change inPipe.0=diff outPipe.0=diffsort \
  --read-empty outPipe.0=empty \
  --apply-change inPipe.0=empty inPipe.1=diffsort outPipe.0=diffosm \
  --tag-transform file="${HOME}/.nonemptynodes.xml" inPipe.0=diffosm outPipe.0=tt \
  --node-key keyList="is_poi" inPipe.0=tt outPipe.0=pois \
  --write-pbf file="${_fnpois}" inPipe.0=pois \
  \
  --read-pbf file="${_fnused}" outPipe.0=usedonly \
  --read-pbf file="${_fnpois}" outPipe.0=pois \
  --merge inPipe.0=usedonly inPipe.1=pois outPipe.0=merged \
  --write-xml inPipe.0=merged file="${_tgt}" 
exit
fi
osmosis \
  -verbose 5 \
  --read-xml file="${_src}" outPipe.0=source \
  --sort inPipe.0=source outPipe.0=sourcesort \
  --simplify-ways epsilonMeters="${_err}" inPipe.0=sourcesort outPipe.0=norm \
  --sort inPipe.0=norm outPipe.0=normsort \
  --tee inPipe.0=normsort outPipe.0=fullnorm outPipe.1=to_usedonly \
  --used-node inPipe.0=to_usedonly outPipe.0=usedonly \
  --sort inPipe.0=usedonly outPipe.0=usedonlysort \
  --tee inPipe.0=usedonlysort outPipe.0=usedonlymerge outPipe.1=usedonlydiff \
  --derive-change inPipe.0=usedonlydiff inPipe.1=fullnorm outPipe.0=diff \
  --sort-change inPipe.0=diff outPipe.0=diffsort \
  --read-empty outPipe.0=empty \
  --apply-change inPipe.0=empty inPipe.1=diffsort outPipe.0=diffosm \
  --tag-transform file="${HOME}/.nonemptynodes.xml" inPipe.0=diffosm outPipe.0=tt \
  --node-key keyList="is_poi" inPipe.0=tt outPipe.0=pois \
  --merge inPipe.0=usedonlymerge inPipe.1=pois outPipe.0=merged \
  --write-xml inPipe.0=merged file="${_tgt}" 
