diff --git a/enex2kml.pl b/enex2kml.pl index 8750828..1b33c71 100644 --- a/enex2kml.pl +++ b/enex2kml.pl @@ -24,12 +24,15 @@ my $verbose = 0; my $showSkipped = 0; my $foldername = 'Evernote'; my $help = 0; +my $csv = 0; +my @csvdata = (); GetOptions( 'i|input=s' => \$inFile, 'o|output=s' => \$outFile, 'v|verbose' => \$verbose, 's|showSkipped' => \$showSkipped, 'f|folder=s' => \$foldername, + 'c|csv' => \$csv, 'h|help' => \$help); if ($help || $inFile eq '' || $outFile eq '') { @@ -40,40 +43,47 @@ if ($help || $inFile eq '' || $outFile eq '') { my $parser = XML::LibXML->new(); my $notes = $parser->parse_file($inFile); + my $kml; + my $folder; + my $root; + my $document; - my $kml = XML::LibXML::Document->new('1.0', 'utf-8'); - my $root = $kml->createElement('kml'); - $root->setAttribute('xmlns'=> 'http://www.opengis.net/kml/2.2'); - my $document = $kml->createElement('Document'); - my $folder = $kml->createElement('Folder'); - my $name = $kml->createElement('name'); - $name->appendTextNode($foldername); - $root->appendChild($document); - $folder->appendChild($name); - $kml->setDocumentElement($root); + if ($csv == 0) { + $kml = XML::LibXML::Document->new('1.0', 'utf-8'); + $root = $kml->createElement('kml'); + $root->setAttribute('xmlns'=> 'http://www.opengis.net/kml/2.2'); + $document = $kml->createElement('Document'); + $folder = $kml->createElement('Folder'); + my $name = $kml->createElement('name'); + $name->appendTextNode($foldername); + $root->appendChild($document); + $folder->appendChild($name); + $kml->setDocumentElement($root); - my $style = $kml->createElement('Style'); - $style->setAttribute('id' => 'done_style'); - my $iconStyle = $kml->createElement('IconStyle'); - $style->appendChild($iconStyle); - my $scale = $kml->createElement('scale'); - $scale->appendTextNode('1.3'); - $iconStyle->appendChild($scale); - my $icon = $kml->createElement('Icon'); - $iconStyle->appendChild($icon); - my $href = $kml->createElement('href'); - $href->appendTextNode('http://maps.google.com/mapfiles/kml/pushpin/grn-pushpin.png'); - $icon->appendChild($href); - my $hotspot = $kml->createElement('hotSpot'); - $hotspot->setAttribute('x', '20'); - $hotspot->setAttribute('y', '2'); - $hotspot->setAttribute('xunits', 'pixels'); - $hotspot->setAttribute('yunits', 'pixels'); - $icon->appendChild($hotspot); - - $document->appendChild($style); - $document->appendChild($folder); + my $style = $kml->createElement('Style'); + $style->setAttribute('id' => 'done_style'); + my $iconStyle = $kml->createElement('IconStyle'); + $style->appendChild($iconStyle); + my $scale = $kml->createElement('scale'); + $scale->appendTextNode('1.3'); + $iconStyle->appendChild($scale); + my $icon = $kml->createElement('Icon'); + $iconStyle->appendChild($icon); + my $href = $kml->createElement('href'); + $href->appendTextNode('http://maps.google.com/mapfiles/kml/pushpin/grn-pushpin.png'); + $icon->appendChild($href); + my $hotspot = $kml->createElement('hotSpot'); + $hotspot->setAttribute('x', '20'); + $hotspot->setAttribute('y', '2'); + $hotspot->setAttribute('xunits', 'pixels'); + $hotspot->setAttribute('yunits', 'pixels'); + $icon->appendChild($hotspot); + $document->appendChild($style); + $document->appendChild($folder); + } else { + + } foreach my $note ($notes->findnodes('/en-export/note')) { my($title) = $note->findnodes('./title'); my($lat) = $note->findnodes('./note-attributes/latitude'); @@ -100,30 +110,41 @@ if ($help || $inFile eq '' || $outFile eq '') { if ($lat && $long && $lat->to_literal != 0 && $long->to_literal != 0) { $exported++; - my $place = $kml->createElement('Placemark'); - my $name = $kml->createElement('name'); - $name->appendTextNode($title->to_literal); + if ($csv == 0) { + my $place = $kml->createElement('Placemark'); + my $name = $kml->createElement('name'); + $name->appendTextNode($title->to_literal); - my $point = $kml->createElement('Point'); - my $coord = $kml->createElement('coordinates'); - $coord->appendTextNode($long->to_literal.','.$lat->to_literal.',0'); - $point->appendChild($coord); - my $styleurl = $kml->createElement('styleUrl'); - $styleurl->appendTextNode('#done_style'); - - $place->appendChild($name); - if ($done eq 'Yes') { $place->appendChild($styleurl); } - $place->appendChild($point); - $folder->appendChild($place); + my $point = $kml->createElement('Point'); + my $coord = $kml->createElement('coordinates'); + $coord->appendTextNode($long->to_literal.','.$lat->to_literal.',0'); + $point->appendChild($coord); + my $styleurl = $kml->createElement('styleUrl'); + $styleurl->appendTextNode('#done_style'); + + $place->appendChild($name); + if ($done eq 'Yes') { $place->appendChild($styleurl); } + $place->appendChild($point); + $folder->appendChild($place); + } else { + my $t = '"'.$title->to_literal.'"'; + push(@csvdata, join(',', $long->to_literal, $lat->to_literal, $t)); + } } elsif ($showSkipped) { print encode_utf8("Skipped: ".$title->to_literal."\n"); } } - open KMLOUT, ">", $outFile or die $!; - print KMLOUT $kml->toString(1); - close KMLOUT; + if ($csv == 0) { + open KMLOUT, ">", $outFile or die $!; + print KMLOUT $kml->toString(1); + close KMLOUT; + } else { + open CSVOUT, ">", $outFile or die $!; + foreach (@csvdata) { print CSVOUT $_."\n"; } + close CSVOUT; + } my $skipped = $count-$exported; print "\ninput:\t$inFile\n"; @@ -156,6 +177,7 @@ please visit http://creativecommons.org/licenses/by-sa/3.0/deed.de o|output file to write/overwrite v|verbose show more infos s|showSkipped show skipped entries + c|csv save in csv for Navigon instead of kml f|folder foldername in kml/Google Earth h|help show this help