Geo::G...uggable(3pm)

πŸ“¦
version 0.17 Β· 2 versions
, in debian bookworm, debian trixie, ubuntu jammy, ubuntu noble, ubuntu resolute

πŸ’– Geo::GoogleEarth::Pluggable πŸ’–

okay bestie, welcome to Geo::GoogleEarth::Pluggable β€” the Perl module that spits out Google Earth documents, and yeah it lives in the 3pm section of the manual, we love that for it. πŸ’…


✨ NAME ✨

Geo::GoogleEarth::Pluggable β€” Generates GoogleEarth Documents πŸ—ΊοΈβœ¨


🌸 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;

πŸ¦‹ 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. fr fr that's the whole job and it ate. πŸ”₯

Geo::GoogleEarth::Pluggable (aka Document) is a Geo::GoogleEarth::Pluggable::Folder with a render method. so it's giving folder but make it extra. πŸ’…

πŸ‘‘ Object Inheritance Graph πŸ‘‘

  --- Constructor -+- Base --- Folder    --- Document
                   |        |
                   |        +- Placemark -+- Point
                   |        |             +- LineString
                   |        |             +- LinearRing
                   |        |
                   |        +- StyleBase -+- Style
                   |        |             +- StyleMap
                   |        |
                   |        +- NetworkLink
                   |
                   +- LookAt

πŸŽ€ Constructors that append to the parent folder object πŸŽ€

Folder, NetworkLink, Point, LineString, LinearRing

πŸ’œ Constructors that return objects for future use πŸ’œ

LookAt(), Style(), StyleMap()

🌈 Wrappers (what makes it easy) 🌈

Style => IconStyle, LineStyle, PolyStyle, LabelStyle, ListStyle

Point => MultiPoint


🌟 USAGE 🌟

This is all of the code you need to generate a complete Google Earth document. no cap, that's it. 🫢

  use Geo::GoogleEarth::Pluggable;
  my $document=Geo::GoogleEarth::Pluggable->new;
  $document->Point(name=>"White House", lat=>38.897337, lon=>-77.036503);
  print $document->render;

πŸ’… CONSTRUCTOR πŸ’…

✨ new ✨

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

πŸ“ 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! iconic behaviour honestly, self-aware king. πŸ‘‘

✨ 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

🧚 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)

πŸ’€ BUGS πŸ’€

Please log on RT and send to the geo-perl email list. bestie pls report it, we wanna know πŸ™ˆ


🚧 LIMITATIONS 🚧

Not So Pretty XML

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 -

Write Only

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.


🫢 SUPPORT 🫢

DavisNetworks.com supports all Perl applications including this package. πŸ₯Ή


🌸 AUTHOR 🌸

  Michael R. Davis (mrdvt92)
  CPAN ID: MRDVT

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.


πŸ”₯ SEE ALSO πŸ”₯

Geo::KML, XML::LibXML, XML::LibXML::LazyBuilder, Archive::Zip, IO::Scalar


and that's a wrap bestie! πŸŽ€ this lil manual page is perl v5.32.1, dated 2021-11-28, and it's the Geo::G...uggable(3pm) one from the User Contributed Perl Documentation crew β€” slay, mwah, go build a globe πŸ’–πŸŒβœ¨

πŸ“¦ where this page comes from