source: subversion/applications/rendering/restguide/restguide @ 12909

Last change on this file since 12909 was 12909, checked in by blarson, 12 years ago

restguide -- create restaurant guides suitable for printing

File size: 2.8 KB
Line 
1#!/usr/bin/perl
2
3# Create restauraunt maps from openstreetmap
4# Copyright 2008 Blars Blarson
5# Distributed under GPL version 2.0
6
7# Usage:  restguide [options] name lat lon
8
9# Example, for Loscon at the LAX Mariot:
10#    restguide --lats 0.024 --lons 0.04 --dpi 1800 loscon 33.950 -118.380
11
12# version 0.2   add --poi and --sub options
13
14use strict;
15use warnings;
16
17# xml file to use
18my $XML="osm-blars.xml";
19
20my $download = 0;
21my $name="cf4";
22my $lat = 33.681;
23my $lon = -117.844;
24my $lats = 0.027;
25my $lons = 0.038;
26my $dpi = 1800;
27my $res = 300;
28my $poi;
29my $sub;
30
31while ($ARGV[0] =~ /^--/){
32   $_ = shift @ARGV;
33   if (/^--download$/) {
34     $download = 1;
35   } elsif (/^--dpi$/) {
36     $dpi = shift @ARGV;
37   } elsif (/^--res$/) {
38     $res = shift @ARGV;
39   } elsif (/^--lats$/) {
40     $lats = shift @ARGV;
41   } elsif (/^--lons$/) {
42     $lons = shift @ARGV;
43   } elsif (/^--poi$/) {
44     $poi = 1;
45   } elsif (/^--sub$/) {
46     $sub = 1;
47   }
48}
49if (@ARGV) {
50  $name = shift @ARGV;
51}
52if (@ARGV) {
53  $lat = shift @ARGV;
54}
55if (@ARGV) {
56  $lon = shift @ARGV;
57}
58
59#
60
61my $OSM="${name}.osm";
62my $SVG="${name}.svg";
63my $PNG="${name}.png";
64
65if ($download || ! -f $OSM) {
66  my $MINLAT=$lat - $lats;
67  my $MAXLAT=$lat + $lats;
68  my $MINLON=$lon - $lons;
69  my $MAXLON=$lon + $lons;
70  my $wget="wget -O ${OSM} http://api.openstreetmap.org/api/0.5/map?bbox=$MINLON,$MINLAT,$MAXLON,$MAXLAT";
71  print "$wget\n";
72  system($wget);
73}
74
75my $MINLAT=$lat - $lats/2;
76my $MAXLAT=$lat + $lats/2;
77my $MINLON=$lon - $lons/2;
78my $MAXLON=$lon + $lons/2;
79
80# AddBounds($XML, "${XML}.tmp", $MINLON, $MINLAT, $MAXLON, $MAXLAT);
81
82my $pf = "${name}.poi";
83if ($poi || ! -f $pf) {
84    system("restgpoi.pl $OSM");
85}
86if ($sub && -f $pf) {
87  system("restgsub.pl $OSM");
88  $OSM = $name.".sub.osm";
89  $SVG = $name.".sub.svg";
90}
91
92my $orp="orp --bbox=$MINLAT,$MINLON,$MAXLAT,$MAXLON -r ${XML} $OSM";
93print "$orp\n";
94system($orp);
95system("inkscape -D -d $dpi -e ${PNG}.tmp $SVG");
96system("pngcrush -res $res ${PNG}.tmp $PNG");
97
98
99#-----------------------------------------------------------------------------
100# Add bounding-box information to an osm-map-features file
101#-----------------------------------------------------------------------------
102sub AddBounds 
103{
104    my ($FileIn, $FileOut, $W,$S,$E,$N) = @_;
105   
106    # Read the old file
107    open(my $fpIn, "<", "$FileIn");
108    my $Data = join("",<$fpIn>);
109    close $fpIn;
110    die("no such $FileIn") if(! -f $FileIn);
111   
112    # Change some stuff
113    my $BoundsInfo = sprintf(
114      "<bounds minlat=\"%f\" minlon=\"%f\" maxlat=\"%f\" maxlon=\"%f\" />",
115      $S, $W, $N, $E);
116   
117    $Data =~ s/(<!--bounds_mkr1-->).*(<!--bounds_mkr2-->)/$1\n<!-- Inserted by restguide -->\n$BoundsInfo\n$2/s;
118   
119    # Save back to the same location
120    open(my $fpOut, ">$FileOut");
121    print $fpOut $Data;
122    close $fpOut;
123}
Note: See TracBrowser for help on using the repository browser.