diff --git a/kml.pl b/kml.pl new file mode 100755 index 0000000..ac644e3 --- /dev/null +++ b/kml.pl @@ -0,0 +1,67 @@ +#!/usr/bin/env perl + +use 5.010; +use strict; +use warnings; + +use XML::LibXML; +use Data::Dumper; + +my $filename = 'ours.kml'; +my $dom = XML::LibXML->load_xml(location => $filename, no_blanks => 1); +my $xpc = XML::LibXML::XPathContext->new($dom); +$xpc->registerNs('k', "http://earth.google.com/kml/2.2"); + +append_placemark("Fo'o", '-122,47', 'Fo%27o'); +append_placemark("Bar", '-122.5,47.5'); + +# say $dom->toString(1); +open TEST_KML, ">test.kml"; +print TEST_KML $dom->toString(1); +close TEST_KML; + +sub add_empty_child +{ + my $node = shift; + my $element_name = shift; + my $child_node = $dom->createElement($element_name); + $node->appendChild($child_node); + return $child_node; +} + +sub append_placemark +{ + my $name = shift; + my $coordinates = shift; + my $article_name = shift; + my $placemark = add_empty_child($dom->documentElement, 'Placemark'); + $placemark->{id} = to_id($name); + + my $name_node = add_empty_child($placemark, 'name'); + my $name_content; + if(defined($article_name)) + { + $name_content = "$name"; + } + else + { + $name_content = $name; + } + + my $name_cdata = $dom->createCDATASection($name_content); + $name_node->appendChild($name_cdata); + + my $style_node = add_empty_child($placemark, 'styleUrl'); + $style_node->appendText('#jackpoint-logo'); + + my $point_node = add_empty_child($placemark, 'Point'); + my $coordinates_node = add_empty_child($point_node, 'coordinates'); + $coordinates_node->appendText($coordinates); +} +sub to_id +{ + my $string = shift; + $string =~ s/ /_/g; + $string =~ s/\W//g; + return lc($string); +}