aboutsummaryrefslogtreecommitdiffstats
path: root/maketiles/packtiles
diff options
context:
space:
mode:
Diffstat (limited to 'maketiles/packtiles')
-rwxr-xr-xmaketiles/packtiles157
1 files changed, 0 insertions, 157 deletions
diff --git a/maketiles/packtiles b/maketiles/packtiles
deleted file mode 100755
index dd12ae94f..000000000
--- a/maketiles/packtiles
+++ /dev/null
@@ -1,157 +0,0 @@
-#!/usr/bin/perl -w
-#
-# packtiles:
-# Pack a tree of tiles etc. as generated by 10kfull etc. into the more efficient
-# packed format which is read by the tile server.
-#
-# Copyright (c) 2006 UK Citizens Online Democracy. All rights reserved.
-# Email: chris@mysociety.org; WWW: http://www.mysociety.org/
-#
-
-my $rcsid = ''; $rcsid .= '$Id: packtiles,v 1.3 2006-09-20 14:57:42 chris Exp $';
-
-use strict;
-
-use CDB_File;
-use Errno;
-use File::Slurp;
-use File::stat;
-use IO::Dir;
-use IO::File;
-
-use constant TILEID_LEN => 20;
-use constant BLOCKING => 14;
-
-sub debug (@) {
- print STDERR @_;
-}
-
-sub pack_tile_dir ($$) {
- my ($indir, $outdir) = @_;
-
-}
-
-# new_index_block
-#
-sub new_index_block () {
- # Initially all tiles are null so all bits are set.
- my $bitmaplen = int((BLOCKING * BLOCKING + 8) / 8);
- my $buf = "\xff" x $bitmaplen;
- $buf .= "\00" x (BLOCKING * BLOCKING * TILEID_LEN);
-}
-
-# add_tile_to_index_block BLOCK X Y ID
-#
-sub add_tile_to_index_block ($$$$) {
- my $x = $_[1];
- my $y = $_[2];
- my $id = $_[3];
-
- # clear the nullness bit.
- my $off = $x + $y * BLOCKING;
- my $b = unpack('C', substr($_[0], $off >> 3, 1));
- $b &= ~(1 << ($off & 7));
- substr($_[0], $off >> 3, 1) = pack('C', $b);
-
- # stick the tile itself in.
- my $bitmaplen = int((BLOCKING * BLOCKING + 8) / 8);
- substr($_[0], $bitmaplen + $off * TILEID_LEN, TILEID_LEN) = $id;
-}
-
-die "arguments are input (unpacked) tile directory, and output (packed)\n"
- . "tileset directories\n"
- if (@ARGV != 2);
-
-my ($inputdir, $outputdir) = @ARGV;
-$inputdir =~ s#/$##;
-$outputdir =~ s#/$##;
-die "$inputdir: not a directory" if (!-d $inputdir);
-die "$outputdir: not a directory" if (!-d $outputdir);
-
-# first make the index of tile locations to IDs.
-my %index;
-debug("reading index of tile locations to IDs...\n");
-my $f = new IO::File("$inputdir/index", O_RDONLY);
-my $len = stat($f)->size();
-my $n = 0;
-while (defined(my $line = $f->getline())) {
- debug("\rreading index: ", $f->tell(), "/$len bytes")
- if (0 == ($n % 100));
- ++$n;
-
- next if ($line =~ /^#/);
-
- chomp($line);
- my ($x, $y, $hash) = split(/ /, $line);
- my $id = pack('H*', $hash);
-
- my $x2 = int($x / BLOCKING);
- my $y2 = int($y / BLOCKING);
-
- $index{"$x2,$y2"} ||= new_index_block();
- add_tile_to_index_block(
- $index{"$x2,$y2"},
- $x % BLOCKING, $y % BLOCKING,
- $id);
-}
-debug("\rreading index: $len/$len bytes\n");
-
-die "$inputdir/index: $!" if ($f->error());
-$f->close();
-
-debug("writing index blocks to index.cdb... ");
-my $C = new CDB_File("$outputdir/index.cdb", "$outputdir/index.new");
-$C->insert(blocking => BLOCKING);
-foreach (keys(%index)) {
- $C->insert($_, $index{$_});
-}
-debug("done\n");
-debug("finalising index.cdb... ");
-$C->finish();
-debug("done\n");
-
-debug("packing individual tile directories...\n");
-$n = 0;
-mkdir("$outputdir/tiles");
-for (my $u = 0; $u < 4096; ++$u) {
- my $subpath = sprintf('%x/%x/%x', $u & 0xf, ($u >> 4) & 0xf, $u >> 8);
-
- next unless (-d "$inputdir/tiles/$subpath");
-
- # Ensure the path exists.
- foreach my $p (qw(1 3 5)) {
- my $d = "$outputdir/tiles/" . substr($subpath, 0, $p);
- die "$d: mkdir: $!" if (!mkdir($d) && !$!{EEXIST});
- }
-
- my $in = "$inputdir/tiles/$subpath";
- my $out = "$outputdir/tiles/$subpath";
-
- my $f = new IO::File("$out/tiles", O_WRONLY | O_CREAT | O_TRUNC, 0644)
- or die "$out/tiles: open: $!";
- $C = new CDB_File("$out/tiles.cdb", "$out/tiles.tmp");
- my $d = new IO::Dir($in) or die "$in: $!";
- while (my $name = $d->read()) {
- next unless ($name =~ /^([0-9a-f]+)\.png$/);
- my $id = pack('H*', $1);
- my $buf = read_file("$in/$name") or die "$in/$name: $!";
-
- die "$in/$name: length of file read by File::Slurp did not match stat"
- unless (stat("$in/$name")->size() == length($buf));
-
- my $rec = sprintf('%x:%x', $f->tell(), length($buf));
- $C->insert($id, $rec);
-
- $f->print($buf) or die "$out/tiles: $!";
-
- ++$n;
- }
-
- $f->close();
- $C->finish();
-
- debug("\rpacking tiles: $u/4096");
-}
-
-debug("\rpacking tiles: 4096/4096\n");
-debug("packed $n tiles total\n");