#!/usr/bin/perl
use 5.34.0;
# extracts oceans, seas & bays from unzipped Geonames allCountries.zip
my $input_file = 'allCountries.txt';
my $output_file = 'hydro_features.txt';
open my $in, '<', $input_file or die "Cannot open $input_file: $!";
open my $out, '>', $output_file or die "Cannot open $output_file: $!";
# Write a header
# 0 9985994:2727792
# 1 Yoldiabukta
# 2 Yoldiabukta
# 3 Yoldia Bay,Yoldiabukta
# 4 78.4982
# 5 14.56569
# 6 H
# 7 BAY
# 8 SJ
# 9 00
# 10 0-9999
# 11 Arctic/Longyearbyen
# 12 2023-12-06
print $out join "\t", qw(geonameid name feature_class feature_code
latitude longitude country_code admin1 admin2), "\n";
while (<$in>) {
chomp;
my @f = split /\t/;
# GeoNames fields:
# 0=geonameid, 1=name, 6=feature_class, 7=feature_code,
# 4=lat, 5=lon, 8=country code, 10=admin1, 11=admin2
my ($geoid, $name, $feat_class, $feat_code, $lat, $lon,
$country, $admin1, $admin2) = @f[0,1,6,7,4,5,8,10,17];
# Keep only hydrographic features
next unless $feat_class eq 'H';
next unless $feat_code =~ /^(OCN|SEA|BAY)$/; # not interested in lakes, rivers, etc
my $str = join "\t", $geoid,$name,$feat_class,$feat_code,$lat,
$lon,$country,$admin1,$admin2, "\n"; # say $str if $str =~ /Yoldiabukta/;
print $out $str;
}
close $in;
close $out;
print "Hydrographic features extracted to $output_file\n";