source: subversion/applications/utils/import/gadm2osm/gadm2osm.pl @ 6304

Last change on this file since 6304 was 5881, checked in by hakan, 13 years ago

Complete enough to produce data for turkish city borders

  • Property svn:executable set to *
File size: 3.7 KB
Line 
1#!/usr/bin/perl
2
3
4use strict;
5
6use Geo::ShapeFile;
7use Data::Dumper;
8
9#
10#   Bounding box for Turkey
11#
12our $min_lat = 35.5;
13our $max_lat = 42.2;
14our $min_lon = 26.0;
15our $max_lon = 45.0;
16
17
18#
19#
20#
21sub read_shapes
22{
23    my ($filename) = @_;
24
25    my (%shapes, $key);
26
27    my $shapeFile = new Geo::ShapeFile($filename);
28    print $shapeFile->shapes() . " shapes in " . $filename . "\n";
29
30    for (1..$shapeFile->shapes ())
31    {
32        my %db = $shapeFile->get_dbf_record ($_);
33
34        # if ($db{"ISO"} eq "TUR")
35        {
36            $key = $db{"ISO"} . "-" . $db{"NAME_1"};
37            $shapes{$key} = [] unless (defined $shapes{$key});
38            push (@{$shapes{$key}}, $_);
39        }
40    }
41
42    foreach $key (sort keys %shapes)
43    {
44        print $key . " : " . Dumper($shapes{$key}) . "\n";
45       
46        my $filename = "osm/" . $key . ".osm";       
47
48        mkdir("osm", 0755);
49        open (OUT, "> $filename");
50
51        # Output header
52        print OUT "<?xml version='1.0' encoding='UTF-8'?>\n";
53        print OUT "<osm version='0.5' generator='gadm2osm.pl'>\n";
54
55        my $cnt=1;
56
57        my $node_id = -1;
58
59        foreach my $shapeid(@{$shapes{$key}}) 
60        {
61            my %db = $shapeFile->get_dbf_record($shapeid);
62            print $shapeid . " : " . Dumper(\%db) . "\n";
63
64            my $shape = $shapeFile->get_shp_record ($shapeid);
65            for(1 .. $shape->num_parts) 
66            {
67                # shape kann mehrere parts haben, auf keinen fall einfach
68                # $shape->getpoints machen!
69
70                my @part = $shape->get_part($_);
71                my @polypoints;
72
73                my $node_id_start = $node_id;
74                my $node_id_end = $node_id;
75
76                print "Block $cnt has " . @part . " parts\n";
77
78                print OUT "\n";
79                printf OUT "<!-- Block %d -->\n", $cnt++;
80               
81               
82                #
83                #   Save the nodes
84                #
85                foreach my $pt(@part)
86                {
87                    print OUT "<node id='" . $node_id . "' lat='" . $pt->Y() . "' lon='" . $pt->X() . "' />\n";
88                    $node_id_end = $node_id;
89                    $node_id--;
90                }
91
92                #
93                #   Now, save the way
94                #
95                my $way_id = $node_id;
96                $node_id--;
97
98                print OUT "\n";
99                print OUT "<way id='" . $way_id . "' >\n";
100
101                for (my $node_ref = $node_id_start; $node_ref >= $node_id_end; $node_ref--)
102                {
103                    print OUT "  <nd ref='" . $node_ref . "' />\n";
104                }
105
106                print OUT "  <tag k=\"name\" v=\"Border ???? - ????\" />\n";
107                print OUT "  <tag k=\"boundary\" v=\"administrative\" />\n";
108                print OUT "  <tag k=\"border_type\" v=\"city\" />\n";
109                print OUT "  <tag k=\"admin_level\" v=\"10\" />\n";
110                print OUT "  <tag k=\"left:city\" v=\"????\" />\n";
111                print OUT "  <tag k=\"right:city\" v=\"????\" />\n";
112
113                print OUT "  <tag k=\"source\" v=\"GADM - http://biogeo.berkeley.edu/gadm/\" />\n";
114                print OUT "  <tag k=\"gadm:source\" v=\"" . $db{"ISO"} . " - " . $db{"HASC_1"} . "\" />\n";
115
116                print OUT "</way>\n";
117            }
118        }
119
120        print OUT "\n";
121        print OUT "</osm>";
122        close(OUT);
123    }
124}
125
126
127#
128#
129#
130sub create_osm_file
131{
132   
133}
134
135
136#
137#   Run that script...
138#
139
140# read_shapes("data/world_bnd_m");
141# read_shapes("data/world_boundaries_m");
142# read_shapes("data/GADM_v0-6");
143
144# read_shapes("data/TUR0");
145read_shapes("data/TUR1");
146
147# read_shapes("data/TUR_water_areas_dcw");
148# read_shapes("data/TUR_water_lines_dcw");
Note: See TracBrowser for help on using the repository browser.