aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authortypebrook <typebrook@gmail.com>2019-11-07 17:59:54 +0800
committertypebrook <typebrook@gmail.com>2019-11-07 17:59:54 +0800
commitd6acc3452d42160117e67bf37107e4664034f5ba (patch)
tree8683b430480ab145e44ff807a0946f20e213f225
parent84267ec5be4a864a97d5ee25ed9e89a9d401bd29 (diff)
update
-rw-r--r--utils/osm.utils.sh49
1 files changed, 45 insertions, 4 deletions
diff --git a/utils/osm.utils.sh b/utils/osm.utils.sh
index 928310d..872e755 100644
--- a/utils/osm.utils.sh
+++ b/utils/osm.utils.sh
@@ -1,29 +1,67 @@
1FILENAME=$0 1FILENAME=$0
2 2
3osm.utils.edit() { 3osm.utils.edit() {
4 vim $FILENAME 4 vim $FILENAME && source $FILENAME
5} 5}
6 6
7OSM_API='https://api.openstreetmap.org/api/0.6' 7OSM_API='https://api.openstreetmap.org/api/0.6'
8OSM_USER_PASSWD=$(cat $HOME/git/settings/tokens/osm) 8OSM_USER_PASSWD=$(cat $HOME/git/settings/tokens/osm)
9 9
10# get .osm format data
10osm.get() { 11osm.get() {
11 curl -X GET $OSM_API/$1/$2 12 curl -X GET $OSM_API/$1/$2
12} 13}
14# query osm-related file with .osm format output
13osm.file.query() { 15osm.file.query() {
14 osmium tags-filter $1 $2 --output-format=osm --omit-referenced 16 osmium tags-filter $1 $2 --output-format=osm --omit-referenced
15} 17}
18# extract an element from .osm format STDIN
16osm.extract() { 19osm.extract() {
17 echo "<osm version=\"0.6\">" 20 echo "<osm version=\"0.6\">"
18 sed -nr "/^ *<$1 id=\"$2\".*/,/^ *<\/$1>/p" - 21 sed -nr "/^ *<$1 id=\"$2\".*/,/^ *<\/$1>/p" -
19 echo "</osm>" 22 echo "</osm>"
20} 23}
24# update .osm format STDIN with key-value
21osm.update() { 25osm.update() {
22 # remove original tag&value 26 # remove original tag&value
23 sed "/<tag k=\"$1\"/d" - | \ 27 sed "/<tag k=\"$1\"/d" - | \
24 # insert new tag&value 28 # insert new tag&value
25 sed -r "/<(node|way|relation)/a \ \ \ \ <tag k=\"$1\" v=\"$2\"\/>" 29 sed -r "/<(node|way|relation)/a \ \ \ \ <tag k=\"$1\" v=\"$2\"\/>"
26} 30}
31# create a new changeset
32osm.changeset.create() {
33
34 #server=https://master.apis.dev.openstreetmap.org
35 server=https://api.openstreetmap.org
36 comment="change is_in format"
37
38 for i in "$@"
39 do
40 case $i in
41 -s)
42 lon_col=0; lat_col=1
43 shift;;
44
45 *)
46 csv=$i
47 shift;;
48 esac
49 done
50
51 info="<osm>
52 <changeset>
53 <tag k='comment' v='$comment'/>
54 </changeset>
55 </osm>
56 "
57
58 echo $info |\
59 curl -u $OSM_USER_PASSWD -i --upload-file - $server/api/0.6/changeset/create |\
60 tee /dev/tty |\
61 tail -1 |\
62 xsel -ib
63}
64# add a new element into changeset
27osm.changeset.add() { 65osm.changeset.add() {
28 element=$(cat -) 66 element=$(cat -)
29 header=$(echo $element | grep -E "<(node|way|relation)\s") 67 header=$(echo $element | grep -E "<(node|way|relation)\s")
@@ -32,15 +70,18 @@ osm.changeset.add() {
32 70
33 echo $element | \ 71 echo $element | \
34 sed -r "s/^( *<(node|way|relation).*version[^ ]+ )(.*)$/\1changeset=\"$1\">/" | \ 72 sed -r "s/^( *<(node|way|relation).*version[^ ]+ )(.*)$/\1changeset=\"$1\">/" | \
35 curl -X PUT -u $OSM_API_USER_PASSWD -i -T - $OSM_API/$ele_type/$id 73 curl -X PUT -u $OSM_USER_PASSWD -i -T - $OSM_API/$ele_type/$id
36} 74}
75# update changeset with a new comment
37osm.changeset.update() { 76osm.changeset.update() {
38 echo "<osm><changeset><tag k=\"comment\" v=\"$2\"/></changeset></osm>" | \ 77 echo "<osm><changeset><tag k=\"comment\" v=\"$2\"/></changeset></osm>" | \
39 curl -X PUT -u $OSM_API_USER_PASSWD -i -T - $OSM_API/changeset/$1 78 curl -X PUT -u $OSM_USER_PASSWD -i -T - $OSM_API/changeset/$1
40} 79}
80# close a changeset
41osm.changeset.close() { 81osm.changeset.close() {
42 curl -X PUT -u $OSM_API_USER_PASSWD -i $OSM_API/changeset/$1/close 82 curl -X PUT -u $OSM_USER_PASSWD -i $OSM_API/changeset/$1/close
43} 83}
84# update an .osm.pbf file
44osm.pbf.update() { 85osm.pbf.update() {
45 PBF_FILE=$1 86 PBF_FILE=$1
46 SERVER=http://download.geofabrik.de/asia/taiwan-updates 87 SERVER=http://download.geofabrik.de/asia/taiwan-updates