#!/usr/bin/perl # Converts usda spread sheet (available for any group at the USDA GRIN website) into a .kml file for google earth, seperates species into different folders. Ignores subspecies and hybrid species denoted with 'x'. Use and/or modify at your own risk. # usage perl USDA_data_to_GEkml.pl seldata.csv helianthus_usda.kml use warnings; use strict; unless (@ARGV == 2) {die;} my $in = $ARGV[0]; my $out = $ARGV[1]; open IN, "$in"; open OUT, ">$out"; print OUT ' '; my $last_species = "first"; while(){ chomp; unless (/^taxon/){ s/\r/ /g; s/\n//g; s/\s+/ /g; s/,\s/ /g; s/""/-/g; s/"//g; s/&//g; my $line = "$_"; my @fields = split(/,/,$_); my $name = $fields[9]; my $lat = $fields[18]; my $long = $fields[19]; my $des = "$fields[0] $fields[34] $fields[14]"; my @species = split(/\s/, $fields[0]); unless (($species[1] eq "sp.")or($species[1] eq "x")){ if ($last_species eq "first"){ print OUT ' '.$species[1].' 1 '; $last_species = $species[1]; } if ($species[1] ne $last_species){ print OUT ' H. '.$species[1].' 1 '; $last_species = $species[1]; } # fix lat long $lat =~ s/-/0/g; $long =~ s/-/0/g; if($lat =~ m/N/){ $lat =~ s/N//; $lat = $lat * 0.0001; } elsif($lat =~ m/S/){ $lat =~ s/S//; $lat = $lat * -0.0001; } else{ next; } if($long =~ m/E/){ $long =~ s/E//; $long = $long * 0.0001; } elsif($long =~ m/W/){ $long =~ s/W//; $long = $long * -0.0001; } else{ next; } print OUT ' '."$name".' '."$des".' #red '."$long,$lat".',0 '; } } } print OUT " ";