Geo::GoogleEarth::Pluggable - Generates GoogleEarth Documents
Contents
Bugs
Please log on RT and send to the geo-perl email list.
Constructor
new
my $document=Geo::GoogleEarth::Pluggable->new(name=>"My Name");
Copyright
This program is free software licensed under the...
The BSD License
The full text of the license can be found in the LICENSE file included with this module.
Description
Geo::GoogleEarth::Pluggable is a Perl object oriented interface that allows for the creation of XML
documents that can be used with Google Earth.
Geo::GoogleEarth::Pluggable (aka Document) is a Geo::GoogleEarth::Pluggable::Folder with a render method.
ObjectInheritanceGraph
--- Constructor -+- Base --- Folder --- Document
| |
| +- Placemark -+- Point
| | +- LineString
| | +- LinearRing
| |
| +- StyleBase -+- Style
| | +- StyleMap
| |
| +- NetworkLink
|
+- LookAt
Constructorsthatappendtotheparentfolderobject
Folder, NetworkLink, Point, LineString, LinearRing
ConstructorsthatreturnobjectsforfutureuseLookAt(), Style(), StyleMap()Wrappers(whatmakesiteasy)
Style => IconStyle, LineStyle, PolyStyle, LabelStyle, ListStyle
Point => MultiPoint
Limitations
NotSoPrettyXML
The XML produced by XML::LibXML is not "pretty". If you need pretty XML you must pass the output through
xmllint or a simular product.
For example:
perl -MGeo::GoogleEarth::Pluggable -e "print Geo::GoogleEarth::Pluggable->new->render" | xmllint --format -
WriteOnly
This package can only write KML and KMZ files. However, if you need to read KML files, please see the
Geo::KML package's "from" method.
Methods
type
Returns the object type.
my $type=$folder->type;
document
Returns the document object.
All objects know to which document they belong even the document itself!
render
Returns an XML document with an XML declaration and a root name of "Document"
print $document->render;
archive
Returns a KMZ formatted Zipped archive of the XML document
print $document->archive;
xmlns
Add or update a namespace
$document->xmlns->{"namespace"}=$url;
Delete a namespace
delete($document->xmlns->{"xmlns:gx"});
Replace all namespaces
$document->{"xmlns"}={namespace=>$url};
Reset to default namespaces
delete($document->{"xmlns"});
nextId
This method is in the document since all Styles and StyleMaps are in the document not folders.
my $id=$document->nextId($type); #$type in "Style" or "StyleMap"
header,header_kml
Returns a header appropriate for a web application
Content-type: application/vnd.google-earth.kml+xml
Content-Disposition: attachment; filename=filename.xls
$document->header #embedded in browser
$document->header(filename=>"filename.xls") #download prompt
$document->header(content_type=>"application/vnd.google-earth.kml+xml") #default content type
header_kmz
Returns a header appropriate for a web application
Content-type: application/vnd.google-earth.kml+xml
Content-Disposition: attachment; filename=filename.xls
$document->header_kmz #embedded in browser
$document->header_kmz(filename=>"filename.xls") #download prompt
$document->header_kmz(content_type=>"application/vnd.google-earth.kmz") #default content type
Name
Geo::GoogleEarth::Pluggable - Generates GoogleEarth Documents
See Also
Geo::KML, XML::LibXML, XML::LibXML::LazyBuilder, Archive::Zip, IO::Scalar
perl v5.32.1 2021-11-28 Geo::GoogleEarth::Pluggable(3pm)
Support
DavisNetworks.com supports all Perl applications including this package.
Synopsis
use Geo::GoogleEarth::Pluggable;
my $document=Geo::GoogleEarth::Pluggable->new(%data); #is a special Folder...
my $folder =$document->Folder(%data); #isa Geo::GoogleEarth::Pluggable::Folder
my $point =$document->Point(%data); #isa Geo::GoogleEarth::Pluggable::Point
my $netlink =$document->NetworkLink(%data); #isa Geo::GoogleEarth::Pluggable::NetworkLink
my $lookat =$document->LookAt(%data); #isa Geo::GoogleEarth::Pluggable::LookAt
my $style =$document->Style(%data); #isa Geo::GoogleEarth::Pluggable::Style
print $document->render;
KML CGI Example
use Geo::GoogleEarth::Pluggable;
my $document=Geo::GoogleEarth::Pluggable->new(name=>"KML Document");
print $document->header,
$document->render;
KMZ CGI Example
use Geo::GoogleEarth::Pluggable;
my $document=Geo::GoogleEarth::Pluggable->new(name=>"KMZ Document");
print $document->header_kmz,
$document->archive;
Todo
Support for default Polygon and Line styles that are nicer than GoogleEarth's
Support for DateTime object in the constructor that is promoted to the LookAt object.
Create a GPS::Point plugin (Promote tag as name and datetime to LookAt)
Usage
This is all of the code you need to generate a complete Google Earth document.
use Geo::GoogleEarth::Pluggable;
my $document=Geo::GoogleEarth::Pluggable->new;
$document->Point(name=>"White House", lat=>38.897337, lon=>-77.036503);
print $document->render;
