logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

Geo::GoogleEarth::Pluggable - Generates GoogleEarth Documents

Author

         Michael R. Davis (mrdvt92)
         CPAN ID: MRDVT

Bugs

       Please log on RT and send to the geo-perl email list.

Constructor

new
         my $document=Geo::GoogleEarth::Pluggable->new(name=>"My Name");

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;

See Also