You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
1.7 KiB
67 lines
1.7 KiB
#!/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 = "<a href=\"https://jackpoint.obscuritus.ca/index.php?title=$article_name\">$name</a>";
|
|
}
|
|
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);
|
|
}
|
|
|