source: subversion/utils/srtm2osm/mkcntr.pl @ 2191

Last change on this file since 2191 was 2125, checked in by enxrah, 13 years ago

srtm2osm a little utility to create contour lines in OSM format

  • Property svn:executable set to *
File size: 1.7 KB
Line 
1#!/usr/bin/perl
2
3open ASC, "$ARGV[0]";
4
5for($i=0;$i<6;$i++){
6    $head[$i]=<ASC>;
7    chomp $head[$i];
8    $head[$i]=~s/[a-zA-Z]//g;
9}
10
11$ncols = $head[0];
12$nrows = $head[1];
13$xllcorner = $head[2];
14$yllcorner = $head[3];
15$cellsize = $head[4];
16$NULL = $head[5];
17$l=$ARGV[1];
18
19system("tail -n +7 $ARGV[0] > tmp");
20print STDERR "Invoking gnuplot to generate contours at $l intervals\n";
21open GNUPLOT, "|gnuplot";
22print GNUPLOT "unset surface
23set contour
24set cntrparam level incremental 0, $l, 1000
25set table 'tmp.cnt'
26splot 'tmp' matrix w l
27unset table
28";
29
30close GNUPLOT;
31open CNT, "tmp.cnt";
32
33$nid0 = 0;
34$lastnode = $lastway = $lastseg = 10000; 
35$prefix = "-";
36
37print "<?xml version='1.0' encoding='UTF-8'?>
38<osm version='0.3' generator='mkcntr'>
39";
40
41foreach (<CNT>){
42    next if (/^\#/);
43    if (/^[^0-9]*$/) {
44        if($nid0 && $nid0!=$nidF){
45            #seg($nid0, $nidF);
46            way($z, @segs);
47            undef @segs;
48        }
49        $nid0 = 0;
50        $nidF = 0;
51        next;
52    }
53    chomp;
54    ($i, $j, $z) = split;
55#    next if(!defined($d));
56    $nid1 = node($i, $j);
57    if($nid0>0) {
58        push @segs, seg($nid0, $nid1);
59    } else {
60        $nidF = $nid1;
61    }
62    $nid0=$nid1;
63}
64
65print "</osm>\n";
66
67sub node {
68    $lon = $xllcorner+$cellsize*$_[0];
69    $lat = $yllcorner+$cellsize*($nrows-$_[1]);
70    $id = $lastnode++;
71    print "<node id='$prefix$id' lat='$lat' lon='$lon' />\n";
72    return $id;
73}
74
75sub seg {
76    $id = $lastseg++;
77    print "<segment id='$prefix$id' from='$prefix$_[0]' to='$prefix$_[1]' />\n";
78    return $id;
79}
80
81sub way {
82    $id = $lastway++;
83    $z = shift @_;
84    print "<way id='$prefix$id'>\n";
85    while (@_){
86        $s = shift(@_);
87        print "<seg id='$prefix$s' />\n";
88    }
89    print "<tag k='contour' v='$z' />\n";
90    print "<tag k='created_by' v='mkcntr' />\n";
91    print "</way>\n";
92    return $id;
93   
94}
Note: See TracBrowser for help on using the repository browser.