source: subversion/editors/osmpedit/osmnode.pm @ 1044

Last change on this file since 1044 was 766, checked in by tpersson, 15 years ago

Tag editor=osmpedit-svn added to changes done by osmpedit

File size: 4.4 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 osmnode;
18
19use FindBin qw($RealBin);
20use lib "$RealBin/../perl";
21
22use XML::TokeParser;
23
24use strict;
25
26use osmutil;
27
28sub new {
29    my $this = shift;
30    my $class = ref($this) || $this;
31    my $obj = bless {
32        LAT => 0,
33        LON => 0,
34        UID => 0,
35        TAGS => "",
36        FROMS => [],
37        TOS => [],
38        KEYVALUE => {},
39        @_
40        }, $class;
41    return $obj;
42}
43
44
45sub add_key_value {
46    my $self = shift;
47    my $key = shift;
48    my $value = shift;
49##    print STDERR "SETTAGS: $key - $value\n";
50    $self->{KEYVALUE}->{$key} = $value;
51}
52
53sub key_value_hash {
54    my $self = shift;
55    return $self->{KEYVALUE}
56}
57
58sub have_key_values {
59    my $self = shift;
60    if ($self->{TAGS}) {
61        return 1;
62    } else {
63        return 0;
64    }
65}
66
67sub set_lat {
68    my $self = shift;
69    my $val = shift;
70    $self->{LAT} = $val;
71}
72
73sub get_lat {
74    my $self = shift;
75    return $self->{LAT};;
76}
77
78sub set_lon {
79    my $self = shift;
80    my $val = shift;
81    $self->{LON} = $val;
82}
83
84sub get_lon {
85    my $self = shift;
86    return $self->{LON};;
87}
88
89sub set_uid {
90    my $self = shift;
91    my $val = shift;
92    $self->{UID} = $val;
93}
94
95sub get_uid {
96    my $self = shift;
97    return $self->{UID};;
98}
99
100sub set_tags {
101    my $self = shift;
102    my $val = shift;
103    $self->{TAGS} = $val;
104##    print STDERR "VAL:$val:\n";
105    my @items = split (";", $val);
106    foreach my $item (@items) {
107#       print STDERR "ITEM:$item\n";
108        $item =~ s/^\s*//;
109        $item =~ s/\s*$//;
110        my ($name, $val) = split ("=", $item);
111        if ($name and $val) {
112            $self->add_key_value ($name, $val);
113        }
114    }
115}
116
117sub get_tags {
118    my $self = shift;
119    my $res = "";
120    foreach my $k (keys %{$self->{KEYVALUE}}) {
121        my $val = $self->{KEYVALUE}->{$k};
122        $res .= "$k=$val;";
123    }
124    return $res;
125
126}
127
128sub add_from {
129    my $self = shift;
130    my $uid = shift;
131#    print STDERR "ADDING FROM: $uid\n";
132    push @{$self->{FROMS}}, $uid;
133}
134
135sub add_to {
136    my $self = shift;
137    my $uid = shift;
138#    print STDERR "ADDING TO: $uid\n";
139    push @{$self->{TOS}}, $uid;
140}
141
142sub get_froms {
143    my $self = shift;
144    return @{$self->{FROMS}};
145}
146
147sub get_tos {
148    my $self = shift;
149    return @{$self->{TOS}};
150}
151
152
153sub print {
154    my $self = shift;
155    my $lat = $self->get_lat ();
156    my $lon = $self->get_lon ();
157    my $uid = $self->get_uid ();
158    my $tags = $self->get_tags ();
159    print "OSMNODE: $lat $lon $uid '$tags'\n";
160}
161
162sub parse_waypoint {
163    my $self = shift;
164    my $filename = shift;
165    my $class = shift;
166    my $creator = shift;
167    if (-f "$filename") {
168        my $p = XML::TokeParser->new("$filename");
169        if (not $p) {
170            print STDERR "WARNING: Could not parse waypoint\n";
171            return 0;
172        }
173        my $wpname = "unspecified";
174        while (my $t = $p->get_tag()) {
175            if ($t->is_start_tag) {
176                my $name = "$t->[0]";
177                if ($name eq "wpt") {
178                    my $attr = $t->attr;
179                    my $lat = $attr->{lat};
180                    my $lon = $attr->{lon};
181                    $self->set_lat ($lat);
182                    $self->set_lon ($lon);
183                    next;
184                }
185                if ($name eq "name") {
186                    $wpname = $p->get_trimmed_text ("/name");
187                }
188            }
189            if ($t->is_end_tag) {
190                my $name = "$t->[0]";
191                if ($name eq "/wpt") {
192                    $self->set_tags ("name=$wpname;class=$class;creator=$creator");
193                }
194            }
195        }
196    }
197    return 1;
198}
199
200sub upload_osm_node {
201    my $self = shift;
202    my $username = shift;
203    my $password = shift;
204
205    my $lat = $self->get_lat ();
206    my $lon = $self->get_lon ();
207    my $tags = $self->get_tags ();
208
209    my $uid = $self->get_uid ();
210    if ($uid) {
211        return osmutil::update_node ($uid, $lat, $lon, $tags, $username,
212                                     $password);
213    } else {
214        my $uid = osmutil::create_node ($lat, $lon, $tags, $username,
215                                        $password);
216        if ($uid < 0) {
217            return 0;
218        } else {
219            return $uid;
220        }
221    }
222}
223
224
225return 1;
Note: See TracBrowser for help on using the repository browser.