#!/usr/bin/perl
# Copyright : http://www.fsf.org/copyleft/gpl.html
# Author 作者 : 積丹尼 Dan Jacobson -- https://www.jidanni.org/
# Thanks 特別感謝 : millerliu@gmail.com
# Created On : Thu Jan 17 11:54:56 2013
# Last Modified On: Sun Jun 7 17:59:02 2020
# Update Count : 428
## 將 millerliu GPX 廣播電台座標 GPX 檔轉成 KML
use strict;
use warnings FATAL => q(all);
use XML::TreePP;
my $tree->{kml}->{Document}->{name} = "台灣廣播電台發射點位址圖";
$tree->{kml}->{-xmlns} = "http://www.opengis.net/kml/2.2";
my $tpp = XML::TreePP->new(
indent => 2,
first_out => [qw/name open description Style TimeStamp styleUrl Point/]
);
##my @colors = qw/red green blue yellow/;
my @colors = qw/red grn blue ylw/;
my %FolderIndex;
my $c = 0;
for (qw/AM FM SW x/) {
push @{ $tree->{kml}->{Document}->{Style} }, [
{
-id => $_,
IconStyle => {
Icon => {
href =>
## 2020: /opt/google/earth/pro/resources/userpalette.kml has these that will work offline?:
##http://maps.google.com/mapfiles/kml/pushpin/blue-pushpin.png
##http://maps.google.com/mapfiles/kml/pushpin/grn-pushpin.png
##http://maps.google.com/mapfiles/kml/pushpin/ltblu-pushpin.png
##http://maps.google.com/mapfiles/kml/pushpin/pink-pushpin.png
##http://maps.google.com/mapfiles/kml/pushpin/purple-pushpin.png
##http://maps.google.com/mapfiles/kml/pushpin/red-pushpin.png
##http://maps.google.com/mapfiles/kml/pushpin/wht-pushpin.png
##http://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png
## "http://maps.gstatic.com/intl/en_ALL/mapfiles/ms/icons/"
"http://maps.google.com/mapfiles/kml/pushpin/" . ( shift @colors )
##. "-dot.png",
. "-pushpin.png",
}
}
}
];
last if /x/;
$FolderIndex{$_} = $c;
$tree->{kml}->{Document}->{Folder}[ $c++ ] =
{ name => $_, open => 0 };
}
# my $latest = ''; But he could mark a station as decommissioned and this would miss it.
for ( @{ $tpp->parsefile("/dev/stdin")->{gpx}->{wpt} } ) {
# if ( ( $_->{time} cmp $latest ) == 1 ) { $latest = $_->{time}; }
my @name = split /\s+/, $_->{name};
$name[0] =~ s/^x//;
my $decommissioned = $& || '';
my @coordinates;
for ( $_->{-lon}, $_->{-lat}, $_->{ele} ) {
if (defined) {
my $s = sprintf "%.6f", $_;
$s =~ s/\.?0+$//;
push @coordinates, $s;
}
}
my $nn = join '', $decommissioned, @name[ 1, 2 ];
push
@{ $tree->{kml}->{Document}->{Folder}[ $FolderIndex{ $name[0] } ]->{Placemark}
}, [
{
'-id' => $nn,
name => $nn,
description => $_->{desc},
## https://developers.google.com/kml/documentation/time
## but that causes problems for some applications. So commenting out:
## TimeStamp => { when => $_->{time} },
styleUrl => '#' . ( $decommissioned || $name[0] ),
Point => {
coordinates => join ",",
@coordinates
}
}
];
}
#$latest =~ s/T.*//;
my ( $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst ) =
localtime(time);
$tree->{kml}->{Document}->{description} =
qq{由 Miller Liu 逐筆修正 NCC 電台坐標數據, 再由積丹尼於 }
. ( sprintf "%d-%02d-%02d", $year + 1900, $mon + 1, $mday )
. qq{ 存放於台描。 "x"=停播。};
print $tpp->write($tree);