source: subversion/applications/editors/osmpedit/osmutil.pm @ 34678

Last change on this file since 34678 was 1124, checked in by tpersson, 13 years ago

More support for ways added

File size: 6.9 KB
Line 
1#    Copyright (C) 2005 Tommy Persson, tpe@ida.liu.se
2#
3#    This program is free software; you can redistribute it and/or modify
4#    it under the terms of the GNU General Public License as published by
5#    the Free Software Foundation; either version 2 of the License, or
6#    (at your option) any later version.
7#
8#    This program is distributed in the hope that it will be useful,
9#    but WITHOUT ANY WARRANTY; without even the implied warranty of
10#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11#    GNU General Public License for more details.
12#
13#    You should have received a copy of the GNU General Public License
14#    along with this program; if not, write to the Free Software
15#    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
16
17package osmutil;
18
19use FindBin qw($RealBin);
20use lib "$RealBin/../perl";
21
22use curl;
23
24use strict;
25
26sub create_node {
27    my $lat = shift;
28    my $lon = shift;
29    my $tags = shift;
30    my $username = shift;
31    my $password = shift;
32
33##    print STDERR "NEW NODE: $lat $lon\n";
34    my $data = "<osm version='0.3'>\n";
35    $data .= "  <node id='0' lon='$lon' lat='$lat'>\n";
36    foreach my $k (keys %{$tags}) {
37        my $val = $tags->{$k};
38        $data .= "    <tag k=\"$k\" v=\"$val\"/>\n";
39    }
40    $data .= "  </node>\n";
41    $data .= "</osm>\n";
42    print STDERR "DATA: $data\n";
43##    my $resp = "dummy";
44    my $uid = curl::put_data ("node/0", $data, $username, $password);
45    if ($uid < 0) {
46        $uid = 0;
47    }
48    return $uid;
49}
50
51sub update_node_data {
52    my $uid = shift;
53    my $data = shift;
54    my $username = shift;
55    my $password = shift;
56
57    if ($uid > 0) {
58        print STDERR "DATA: $data\n";
59        my $resp = curl::put_data ("node/$uid", $data, $username, $password);
60        if ($resp < 0) {
61            return 0;
62        }
63    } else {
64        return 0;
65    }
66    return 1;
67
68}
69
70sub update_node {
71    my $uid = shift;
72    my $lat = shift;
73    my $lon = shift;
74    my $tags = shift;
75    my $username = shift;
76    my $password = shift;
77
78    my $data = "<osm version='0.3'>\n";
79    $data .= "  <node lon='$lon' id='$uid'  lat='$lat'>\n";
80    foreach my $k (keys %{$tags}) {
81        my $val = $tags->{$k};
82        $data .= "    <tag k=\"$k\" v=\"$val\"/>\n";
83    }
84    $data .= "  </node>\n";
85    $data .= "</osm>";
86
87    return update_node_data ($uid, $data, $username, $password);
88
89}
90
91sub get_node {
92    my $uid = shift;
93    my $username = shift;
94    my $password = shift;
95    my $resp = curl::get ("node/$uid", $username, $password);
96    return $resp;
97}
98
99sub get_node_history {
100    my $uid = shift;
101    my $username = shift;
102    my $password = shift;
103    my $resp = curl::get ("node/$uid/history", $username, $password);
104    return $resp;
105}
106
107sub get_nodes {
108    my $username = shift;
109    my $password = shift;
110    my @uids = @_;
111    my $uids = join (",", @uids);
112    my $resp = curl::get ("nodes?nodes=$uids", $username, $password);
113    return $resp;
114}
115
116sub delete_node {
117    my $uid = shift;
118    my $username = shift;
119    my $password = shift;
120
121    my $resp = curl::delete ("node/$uid", $username, $password);
122    return $resp;
123}
124
125sub get_segment {
126    my $uid = shift;
127    my $username = shift;
128    my $password = shift;
129    my $resp = curl::get ("segment/$uid", $username, $password);
130    return $resp;
131}
132
133sub get_segment_history {
134    my $uid = shift;
135    my $username = shift;
136    my $password = shift;
137    my $resp = curl::get ("segment/$uid/history", $username, $password);
138    return $resp;
139}
140
141sub get_segment_ways {
142    my $uid = shift;
143    my $username = shift;
144    my $password = shift;
145    my $resp = curl::get ("segment/$uid/ways", $username, $password);
146    return $resp;
147}
148
149sub get_segment_areas {
150    my $uid = shift;
151    my $username = shift;
152    my $password = shift;
153    my $resp = curl::get ("segment/$uid/areas", $username, $password);
154    return $resp;
155}
156
157sub create_segment {
158    my $from = shift;
159    my $to = shift;
160    my $tags = shift;
161    my $username = shift;
162    my $password = shift;
163    my $data = "<osm version='0.3'>\n";
164    $data .= "  <segment id='0' from='$from' to='$to'>\n";
165    foreach my $k (keys %{$tags}) {
166        my $val = $tags->{$k};
167        $data .= "    <tag k=\"$k\" v=\"$val\"/>\n";
168    }
169    $data .= "  </segment>\n";
170    $data .= "</osm>\n";
171    print STDERR "DATA: $data\n";
172##    my $resp = "dummy";
173    my $uid = curl::put_data ("segment/0", $data, $username, $password);
174    if ($uid < 0) {
175        $uid = 0;
176    }
177    return $uid;
178}
179
180sub delete_segment {
181    my $uid = shift;
182    my $username = shift;
183    my $password = shift;
184
185    my $resp = curl::delete ("segment/$uid", $username, $password);
186    if (not $resp) {
187        print STDERR "WARNING osmutil: Deletion of segment $uid failed\n";
188    }
189    return $resp;
190}
191
192sub update_segment {
193    my $uid = shift;
194    my $from = shift;
195    my $to = shift;
196    my $tags = shift;
197    my $username = shift;
198    my $password = shift;
199
200    my $data = "<osm version='0.3'>\n";
201    $data .= "  <segment from='$from' to='$to' id='$uid'>\n";
202    foreach my $k (keys %{$tags}) {
203        my $val = $tags->{$k};
204        $data .= "    <tag k=\"$k\" v=\"$val\"/>\n";
205    }
206    $data .= "  </segment>\n";
207    $data .= "</osm>\n";
208
209    my $uid = curl::put_data ("segment/$uid", $data, $username, $password);
210    if ($uid < 0) {
211        return 0;
212    }
213    return 1;
214}
215
216
217sub get_way {
218    my $uid = shift;
219    my $username = shift;
220    my $password = shift;
221    my $resp = curl::get ("way/$uid", $username, $password);
222    return $resp;
223}
224
225sub get_way_history {
226    my $uid = shift;
227    my $username = shift;
228    my $password = shift;
229    my $resp = curl::get ("way/$uid/history", $username, $password);
230    return $resp;
231}
232
233sub create_way {
234    my $segs = shift;
235    my $tags = shift;
236    my $username = shift;
237    my $password = shift;
238    my $data = "<osm version=\"0.3\">\n";
239    $data .= "  <way id=\"0\">\n";
240    foreach my $s (@{$segs}) {
241        $s =~ s/s//;
242        $data .= "    <seg id=\"$s\"/>\n";
243    }
244    foreach my $k (keys %{$tags}) {
245        my $val = $tags->{$k};
246        $data .= "    <tag k=\"$k\" v=\"$val\"/>\n";
247    }
248    $data .= "  </way>\n";
249    $data .= "</osm>\n";
250    print STDERR "DATA: $data\n";
251##    my $resp = "dummy";
252    my $uid = curl::put_data ("way/0", $data, $username, $password);
253    if ($uid < 0) {
254        $uid = 0;
255    }
256    return $uid;
257}
258
259sub delete_way {
260    my $uid = shift;
261    my $username = shift;
262    my $password = shift;
263
264    my $resp = curl::delete ("way/$uid", $username, $password);
265    if (not $resp) {
266        print STDERR "WARNING osmutil: Deletion of way $uid failed\n";
267    }
268    return $resp;
269}
270
271
272sub update_way {
273    my $uid = shift;
274    my $segs = shift;
275    my $tags = shift;
276    my $username = shift;
277    my $password = shift;
278
279    my $data = "<osm version='0.3'>\n";
280    $data .= "  <way id='$uid'>\n";
281    foreach my $s (@{$segs}) {
282        $s =~ s/s//;
283        $data .= "    <seg id=\"$s\"/>\n";
284    }
285    foreach my $k (keys %{$tags}) {
286        my $val = $tags->{$k};
287        $data .= "    <tag k=\"$k\" v=\"$val\"/>\n";
288    }
289    $data .= "  </way>\n";
290    $data .= "</osm>\n";
291
292    my $uid = curl::put_data ("way/$uid", $data, $username, $password);
293    if ($uid < 0) {
294        return 0;
295    }
296    return 1;
297}
298
299
300return 1;
Note: See TracBrowser for help on using the repository browser.