10
ShapeToOsm::ShapeToOsm ($file,$prefix,$defaulttags,$proj);
14
# Copyright (c) 2006 Gabriel Ebner <ge@gabrielebner.at>
15
# updated in 2008 by Tobias Wendorff <tobias.wendorff@uni-dortmund.de>
16
# hacks by James Michael DuPont JamesMikeDuPont@googlemail.com
17
# HTML-Entities based on ideas of Hermann Schw�rzler
18
# Gau�-Kr�ger implementation based on gauss.pl by Andreas Achtzehn
19
# version 1.3 (17. September 2008)
23
use HTML::Entities qw(encode_entities_numeric);
45
my $default_tags = shift;
48
$dir = "out${prefix}";
49
mkdir "$dir" unless -d "out";
51
my $shpf = Geo::ShapeFile->new($file);
54
open OUT , ">${dir}/${prefix}_ways_1.osm" or die "cannot open $dir ";
55
print OUT "<?xml version='1.0'?>
56
<osm version='0.5' generator='shp2osm.pl'>";
58
proc_shpf($shpf,$default_tags);
60
## FINALLY CLOSE THE LAST ONE
70
my %tags = $tags ? %$tags : ();
71
delete $tags{'_deleted'} unless $tags{'_deleted'};
73
while ( my ( $k, $v ) = each %tags ) {
74
my $key = encode_entities_numeric($k);
75
my $val = encode_entities_numeric($v);
76
# warn "no valu $v for $k" unless $val;
77
push @tags , ' <tag k="'. $key .'" v="'. $val ."\"/>\n" if $val;
83
my ( $lon, $lat, $tags ) = @_;
87
my ($wgs84lon, $wgs84lat) = gk2geo($lon, $lat);
88
push @nodes , " <node id='$id' visible='true' lat='$wgs84lat' lon='$wgs84lon' />\n";
90
push @nodes , " <node id='$id' visible='true' lat='$lat' lon='$lon' />\n";
101
my ( $segs, $tags ) = @_;
104
if ($waycount % 100 ==0)
106
print "new file $waycount\n";
112
open OUT , ">$dir/${prefix}_ways_${waycount}.osm";
113
print OUT "<?xml version='1.0'?>
114
<osm version='0.5' generator='shp2osm.pl'>";
117
print OUT join "\n",@nodes;
120
print OUT " <way id='$id' visible='true'>\n";
121
print OUT " <nd ref='$_' />\n" for @$segs;
124
print OUT join "\n",@tags;
127
print OUT " </way>\n";
132
my ( $pts, $tags, $connect_last_seg ) = @_;
134
my ( $first_node, $last_node, @segs );
136
my $node = node_out @$pt;
137
push @segs, seg_out $last_node, $node;
139
$first_node ||= $last_node;
141
push @segs, seg_out $last_node, $first_node
142
if $first_node && $connect_last_seg;
143
way_out \@segs, $tags;
147
my ( $shp, $dbf, $type,$default_tags ) = @_;
148
my $tags = { %{$default_tags}, %$dbf };
149
# warn Dumper($tags);
151
my $is_polygon = $type % 10 == 5;
152
for ( 1 .. $shp->num_parts ) {
153
polyline_out [ map( [ $_->X(), $_->Y() ], $shp->get_part($_) ) ], $tags,
159
my ($shpf,$default_tags) = @_;
160
my $type = $shpf->shape_type;
161
for ( 1 .. $shpf->shapes() ) {
162
my $shp = $shpf->get_shp_record($_);
163
my %dbf = $shpf->get_dbf_record($_);
164
proc_obj $shp, \%dbf, $type,$default_tags;
172
my ($lat, $lon) = $proj->inverse($e, $n);
173
return( $lon, $lat );