Thread punkte auf karte vermerken
(4 answers)
Opened by esskar at 2009-05-01 17:10
Ich habe das schon mal gemacht. Womöglich habe ich es sogar hier irgendwo gepostet. Es gibt ein freies Geo-? Projekt, von dem man eine Liste mit PLZ und Koordinaten verwenden kann. Dann brauchst du nur noch eine Karte, bei der du zwei Punkte pixelgenau identifizierst. Bei Bedarf such ich nochmal genauer. ob ich den Code und die Karten noch finde.
EDIT: Google mal nach OpenGeoDB! Die Datenbank hatte ich damals AFAIR genutzt. EDIT2: Habe noch ein wenig von dem alten Zeug gefunden: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 #!/usr/bin/perl use strict; use warnings; use POSIX qw(floor); use GD::Image; # use GD::Simple; use Data::Dumper; my %map_data = ( border_left => 5.8, border_right => 17.2, border_bottom => 45.8, border_top => 55.1, ); my %img_data = ( max_x => 800.0, max_y => 1029.0, ); my %coords; sub as_pixel_coords { my $m = shift; my $i = shift; my $t = shift || [ 50.107368, 8.664651 ]; # ffm centralstation my $x_pixel = floor( ( $t->[1] - $m->{'border_left'} ) * ( $i->{'max_x'} / ( $m->{'border_right'} - $m->{'border_left'} ) ) ); my $y_pixel = floor( ( $t->[0] - $m->{'border_top'} ) * ( $i->{'max_y'} / ( $m->{'border_bottom'} - $m->{'border_top'} ) ) ); return $x_pixel, $y_pixel; } sub area_tag { my ( $y, $x, $radius, $url, $user, $uid ) = @_; $url ||= 'http://www.example.net/forum/member.php?u='; $user ||= 'john doe'; $uid ||= '0815'; return qq{ <area shape="circle" coords="$x,$y,$radius" href="$url$uid" title="$user" /> }; } open(my $db, '<', 'opengeodb.txt') or die $!; while (<$db>) { chomp; next if /^#/ or /^\s*$/; my $row = [ split /;/, $_ ]; $coords{$row->[-1]} = [ $row->[-2], $row->[-3] ]; } close $db or warn $!; my $img = GD::Image->new( 'au_ch_de.png' ); @img_data{'max_x', 'max_y'} = ( $img->width(), $img->height() ); my $red = $img->colorAllocate(255,0,0); print q{ <img src="map.png" alt="Karte" usemap="#usermap" /> <map name="usermap"> }; while(<DATA>) { chomp; next unless /^\w+;\d+;\d+$/; my ($user, $uid, $postcode) = split /;/; $img->filledEllipse( as_pixel_coords( \%map_data, \%img_data, $coords{$postcode} ), 7, 7, $red ); print area_tag( as_pixel_coords(\%map_data, \%img_data, $coords{$postcode}), 7, undef, $user, $uid ); } print q{ </map> }; open(MAP, '>', 'map.png') or die $!; print MAP $img->png; close MAP; __DATA__ tim;201;64287 tom;202;80331 joe;203;20095 bob;204;01067 Last edited: 2009-05-01 18:59:34 +0200 (CEST) -- yet another amateur perl hacker
|