source: subversion/sites/other/trapi/dumptile.pl @ 31161

Last change on this file since 31161 was 14350, checked in by blarson, 11 years ago

Workaround one case of corrupt relations.
Better stats for waycache (forgot to mention adding waycache previously)
dumptile is less picky about arguments, can take multiple tiles
fetchtile is nasty hack to fetch all objects that appear to be in a tile

  • Property svn:executable set to *
File size: 2.5 KB
Line 
1#!/usr/bin/perl
2
3use strict;
4use warnings;
5use constant VERBOSE => 999;
6use trapi;
7
8ptdbinit('<');
9
10my $argl = join(' ', @ARGV);
11my @tiles = $argl =~ /^(?:z?(0|1\d)\D+(\d+)\D+(\d+)\D*)+$/;
12while (my $z = shift @tiles) {
13    my $x = shift @tiles;
14    my $y = shift @tiles;
15my $ptn = toptn($z, $x, $y);
16my $df = openptn($ptn, 'data');
17my $nf = openptn($ptn, 'nodes');
18my $wf = openptn($ptn, 'ways');
19my $rf = openptn($ptn, 'relations');
20
21seek $df, 0, 0;
22my $tv = getvnum($df);
23print "Tags version $tv\n\n";
24
25my %seen;
26seek $nf, 0, 0;
27while (my ($n, $lat, $lon, $off) = readnode($nf)) {
28    last unless(defined $n);
29    unless ($n) {
30        print "Empty node\n";
31        next;
32    }
33    $lat /= CONV;
34    $lon /= CONV;
35    print "Node $n at $lat,$lon offset $off\n";
36    if (exists $seen{$n}) {
37        print "  !!! seen before\n";
38    }
39    $seen{$n}++;
40    if ($off) {
41        seek $df, $off, 0;
42        my @tv = readtags($df, NODE);
43        while (my $tag = shift(@tv)) {
44            my $val = shift(@tv);
45            if (defined $val) {
46                print "  tag=\"$tag\" val=\"$val\"\n";
47            } else {
48                print "  tag=\"$tag\" !!! val= UNDEFINED\n";
49            }
50        }
51    }
52}
53
54%seen=();
55print "\n";
56seek $wf, 0, 0;
57while (my ($w, $off) = readway($wf)) {
58    last unless(defined $w);
59    unless ($w) {
60        print "Empty way\n";
61        next;
62    }
63    print "Way $w offset $off\n";
64    if (exists $seen{$w}) {
65        print "  !!! seen before\n";
66    }
67    $seen{$w}++;
68    if ($off) {
69        seek $df, $off, 0;
70        my @nodes = readwaynodes($df);
71        print "  ".scalar(@nodes)." nodes\n";
72        foreach my $n (@nodes) {
73            print "  node $n\n";
74        }
75        my @tv = readtags($df, WAY);
76        while (my $tag = shift(@tv)) {
77            my $val = shift(@tv);
78            if (defined $val) {
79                print "  tag=\"$tag\" val=\"$val\"\n";
80            } else {
81                print "  tag=\"$tag\" !!! val= UNDEFINED\n";
82            }
83        }
84    }
85}
86
87%seen=();
88print "\n";
89seek $rf, 0, 0;
90while (my ($r, $off) = readrel($rf)) {
91    last unless(defined $r);
92    unless ($r) {
93        print "Empty relation\n";
94        next;
95    }
96    print "Relation $r offset $off\n";
97    if (exists $seen{$r}) {
98        print "  !!! seen before\n";
99    }
100    $seen{$r}++;
101    if ($off) {
102        seek $df, $off, 0;
103        my @m = readmemb($rf);
104        foreach my $m (@m) {
105            my ($type, $mid, $role) = @$m;
106            if ($type < 4) {
107                print "  member ".(MEMBERTYPE)[$type]." id=$mid role=\"$role\"\n";
108            } else {
109                print "  meber !!! type $type id=$mid role=\"$role\"\n";
110            }
111        }
112        my @tv = readtags($df, RELATION);
113        while (my $tag = shift(@tv)) {
114            my $val = shift(@tv);
115            if (defined $val) {
116                print "  tag=\"$tag\" val=\"$val\"\n";
117            } else {
118                print "  tag=\"$tag\" !!! val= UNDEFINED\n";
119            }
120        }
121    }
122}
123}
Note: See TracBrowser for help on using the repository browser.