source: subversion/applications/editors/osmpedit/osmnode.pm @ 34435

Last change on this file since 34435 was 1108, checked in by tpersson, 13 years ago

More support for ways added

File size: 3.6 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 osmbase;
25
26use strict;
27
28use osmutil;
29
30use vars qw (@ISA  $AUTOLOAD);
31@ISA = qw (osmbase);
32
33
34sub new {
35    my $this = shift;
36    my $class = ref($this) || $this;
37    SUPER::new $class (
38                       LAT => 0,
39                       LON => 0,
40                       FROMS => [],
41                       TOS => [],
42                       @_
43                       );
44}
45
46
47sub set_lat {
48    my $self = shift;
49    my $val = shift;
50    $self->{LAT} = $val;
51}
52
53sub get_lat {
54    my $self = shift;
55    return $self->{LAT};;
56}
57
58sub set_lon {
59    my $self = shift;
60    my $val = shift;
61    $self->{LON} = $val;
62}
63
64sub get_lon {
65    my $self = shift;
66    return $self->{LON};
67}
68
69sub get_osmuid {
70    my $self = shift;
71    my $res = $self->get_uid ();
72    $res =~ s/n//;
73    return $res;
74}
75
76sub add_from {
77    my $self = shift;
78    my $uid = shift;
79##    print STDERR "ADDING FROM: $uid\n";
80    push @{$self->{FROMS}}, $uid;
81}
82
83sub add_to {
84    my $self = shift;
85    my $uid = shift;
86##    print STDERR "ADDING TO: $uid\n";
87    push @{$self->{TOS}}, $uid;
88}
89
90sub get_froms {
91    my $self = shift;
92    return @{$self->{FROMS}};
93}
94
95sub get_tos {
96    my $self = shift;
97    return @{$self->{TOS}};
98}
99
100
101sub print {
102    my $self = shift;
103    my $lat = $self->get_lat ();
104    my $lon = $self->get_lon ();
105    my $uid = $self->get_uid ();
106    my $tags = $self->get_tags ();
107    print "OSMNODE: $lat $lon $uid: ";
108    foreach my $k (keys %{$tags}) {
109        my $val = $tags->{$k};
110        print "$k - $val; ";
111    }
112    print "\n";
113}
114
115sub parse_waypoint {
116    my $self = shift;
117    my $filename = shift;
118    my $class = shift;
119    my $creator = shift;
120    if (-f "$filename") {
121        my $p = XML::TokeParser->new("$filename");
122        if (not $p) {
123            print STDERR "WARNING: Could not parse waypoint\n";
124            return 0;
125        }
126        my $wpname = "unspecified";
127        while (my $t = $p->get_tag()) {
128            if ($t->is_start_tag) {
129                my $name = "$t->[0]";
130                if ($name eq "wpt") {
131                    my $attr = $t->attr;
132                    my $lat = $attr->{lat};
133                    my $lon = $attr->{lon};
134                    $self->set_lat ($lat);
135                    $self->set_lon ($lon);
136                    next;
137                }
138                if ($name eq "name") {
139                    $wpname = $p->get_trimmed_text ("/name");
140                }
141            }
142            if ($t->is_end_tag) {
143                my $name = "$t->[0]";
144                if ($name eq "/wpt") {
145###                 $self->set_tags ("name=$wpname;class=$class;creator=$creator");
146                }
147            }
148        }
149    }
150    return 1;
151}
152
153sub upload_osm_node {
154    my $self = shift;
155    my $username = shift;
156    my $password = shift;
157
158    my $lat = $self->get_lat ();
159    my $lon = $self->get_lon ();
160    my $tags = $self->get_tags ();
161
162    my $uid = $self->get_osmuid ();
163    if ($uid) {
164        return osmutil::update_node ($uid, $lat, $lon, $tags, $username,
165                                     $password);
166    } else {
167        my $uid = osmutil::create_node ($lat, $lon, $tags, $username,
168                                        $password);
169        if ($uid < 0) {
170            return 0;
171        } else {
172            return $uid;
173        }
174    }
175}
176
177
178return 1;
Note: See TracBrowser for help on using the repository browser.