Karl Lohner > WebService-GoogleMaps-0.07 > WebService::GoogleMaps

Download:
WebService-GoogleMaps-0.07.tar.gz

Dependencies

Annotate this POD

CPAN RT

New  1
Open  1
View Bugs
Report a bug
Module Version: 0.07   Source  

NAME ^

WebService::GoogleMaps - Automated interface to Google Maps

SYNOPSIS ^

    use WebService::GoogleMaps;

    # Set up a new object with a viewport of 640 x 480 pixels
    my $gmap = WebService::GoogleMaps->new( 640, 480 );

    # Specify a location to view
    $gmap->set(
        latitude   => 40.750275,
        longitude  => -73.993034,
        zoom_level => 4,          # valid values are 0..14, lower value is more zoomed
        cache_dir  => "/tmp",     # optional, but recommended!  Helps speed up future requests
        pan_x      => 0,          # move viewport to the east  (+) or west  (-) a number of pixels
        pan_y      => 0,          # move viewport to the south (+) or north (-) a number of pixels
    );

    # create a GD object containing our bitmapped map object
    $gmap->generate_gd();

    # or simply
    # $gmap->generate_gd(40.750275, -73.993034, 4);  # latitude, longitude, zoom_level

    my $error = $gmap->error();
    $error && print "Error: $error\n";
    
    open (FH, ">", "mymap.png");
    binmode FH;
    print FH $gmap->{gd}->png;
    close(FH);

DESCRIPTION ^

WebService::GoogleMaps provides an automated interface to Google Maps http://maps.google.com/, which provides free street maps of locations in the USA and Canada. This module allows you to specify an image size, latitude, longitude, and zoom level and returns a GD object containing a street level map.

METHODS ^

new()

The constructor. You can pass it an image width and height in pixels, or nothing to let it default to 640 x 480 pixels. Or instead, pass it a list of initial options and values.

    # set up our object to create a 320 x 240 pixel image
    my $gmap = WebService::GoogleMaps->new( 800, 600 );

    # use the default 640 x 480 image size
    my $gmap = WebService::GoogleMaps->new();

    # specify several options and values
    my $gmap = WebService::GoogleMaps->new(
        width      => 800,
        height     => 600,
        latitude   => 40.750275,
        longitude  => -73.993034,
        zoom_level => 3,
        agent      => "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)",  # optional, default is a Firefox agent.
        cache_dir  => "/tmp",     # optional, but helps speed up future requests
        pan_x      => 100,        # move viewport 100 pixels east
        pan_y      => 100,        # move viewport 100 pixels south
    );

set()

Use this method to add or change any of the map options after you have created the object.

    # Create our object, using the default 640 x 480 image size
    my $gmap = WebService::GoogleMaps->new();
    
    # Set width, height, latitude, longitude, zoom level and cache directory when requesting map data
    $gmap->set(
        width      => 800,
        height     => 600,
        latitude   => 40.750275,
        longitude  => -73.993034,
        zoom_level => 9,
        cache_dir  => "/tmp",
    );

get()

Use this method to retrieve the value of any of the current options

    # Find out what the current zoom level is set to
    my $zoom_level = $gmap->get("zoom_level");

error()

Use this to retrieve any errors generated by this module.

center_viewport_on_coordinates()

Pass it a list of array references, each array must contain at least two elements, a latitude and longitude of a place on the map.

The method will set the center of the viewport to the middle of all the passed coordinates, and set a zoom level that will keep all the coordinates inside the viewport.

    my @markerlist=(
        [40.725464,  -74.002289, "H!Hiroko's Place"],
        [40.748199,  -74.031575, "=!The Bagel Smashery"],
        [40.8161293, -73.979786, "+!Taiyaki"]
    );
    
    $gmap->center_viewport_on_coordinates(@markerlist);

generate_gd()

This performs the retrieval of the image from Google Maps. If the images are not found in the cache, (assuming you have specified a directory to use for the cache), this may take a little extra time to complete.

It will return a GD object, which you may then use as you please. It is useful to save it to a file.

If there is a problem creating the image, an error message will be set. You may retrieve this error message at $gmap->error()

insert_latlon_marker_gd()

After you use generate_gd() to draw the map, you may add a number of labeled points to the map.

Pass this method a list of array references. Each array reference must contain at least two elements, the latitude and longitude of a coordinate that you want to be marked. Optionally, each array reference may have a third element, a label for the point.

The syntax for this point may be:

    use WebService::GoogleMaps;
    
    my $gmap = WebService::GoogleMaps->new(640, 480);
    
    $gmap->set(
        cache_dir  => "/tmp",     # optional, but helps speed up future requests
    );
    
    my @markerlist=(
        [40.725464,  -74.002289, "H!Hiroko's Place"],
        [40.748199,  -74.031575, "=!The Bagel Smashery"],
        [40.8161293, -73.979786, "+!Taiyaki"]
    );
    
    $gmap->center_viewport_on_coordinates(@markerlist);
    
    $gmap->generate_gd();
    
    $gmap->insert_latlon_marker_gd(@markerlist);
    
    $gmap->{error} && die "Error: $gmap->{error}\n";
    
    open (FH, ">", "goodeats.png");
    binmode FH;
    print FH $gmap->{gd}->png;
    close(FH);

generate_html()

Not available in this version. The plan is to have this return HTML code that will reference images on the Google Maps server to render the map image.

TODO ^

AUTHOR ^

Karl Lohner, <karllohner+googlemaps@gmail.com>

BUGS ^

I am sure there is a few in here...

Please report any bugs or feature requests to <karllohner+googlemaps@gmail.com>.

Really, I would like to know how you are using this module and what you would like to see to make it better.

REFERENCES ^

ACKNOWLEDGEMENTS ^

Thanks to Joel Webber and his blog article at http://jgwebber.blogspot.com/2005/02/mapping-google.html as well as to the many people who added comments there, particularly the anonymous comments that detailed the algorithm used to map latitude/longitude to specific tiles.

COPYRIGHT AND LICENSE ^

Copyright 2005 by Karl Lohner, All Rights Reserved.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.