#!/usr/bin/perl -w # $Id:$ $out = "japan_us_map.ps"; $pngout = "japan_us_map.png"; # Scale $scale = "1:14000000"; # Coastline resolution $res = "i"; # Map extents $south = 25; # southern latitude $north = 50; # northern latitude $cent = 0.5*($south + $north); # Standard parallels for LCC projection $lat1 = 25; $lat2 = 45; # Longitude range $lon_range = 20; # Central longitude for Japan $j_lon = 136.5; $j_east = $j_lon + $lon_range/2; $j_west = $j_lon - $lon_range/2; # Central longitude for US $us_lon = -80; $us_east = $us_lon + $lon_range/2; $us_west = $us_lon - $lon_range/2; $us_proj= "l$us_lon/$cent/$lat1/$lat2/$scale"; $j_proj = "l$j_lon/$cent/$lat1/$lat2/$scale"; $us_region = "$us_west/$us_east/$south/$north"; $j_region = "$j_west/$j_east/$south/$north"; warn "us_region = $us_region\n"; warn "j_region = $j_region\n"; &init(); &do_us(); &do_state_labels(); &do_us_cities(); &do_japan(); &do_japan_cities(); &do_island_labels(); &do_scalebar(); &do_graticule(); &add_map_annotations(); &finish_up(); &convert_to_png(); sub init { system( "gmtset PLOT_DEGREE_FORMAT -ddd" ) and die "init: gmtset had a problem: $!"; system( "gmtset BASEMAP_TYPE plain" ) and die "init: gmtset had a problem: $!"; system( "gmtset GRID_PEN 0.5p/130/130/130ta" ) and die "init: gmtset had a problem: $!"; system( "gmtset FRAME_PEN 0.5p/255/255/255" ) and die "init: gmtset had a problem: $!"; system( "gmtset PAPER_MEDIA letter" ) and die "init: gmtset had a problem: $!"; # dummy start system( "psxy /dev/null -J$us_proj -R$us_region -Sp -P -Y4c -K -V > $out" ) and die; } sub do_us { system( "pscoast -J$us_proj -R$us_region -D$res -N1 -N2 -A2000 -G250 -W0.5p/0/0/0 -K -O -V >> $out" ) and die "do_us: pscoast had a problem: $!"; } sub do_state_labels { my $textsize = 9; my $labelfile = "/home/braup/lib/GMT/state_label_locations.txt"; open F, $labelfile or die "Couldn't open $labelfile for reading: $!"; open PSTEXT, "| pstext -J$us_proj -R$us_region -G30 -O -K -V >> $out" or die "Couldn't open pipe to pstext: $!"; while () { my ($lon, $lat, $label) = split; unless ($label eq "RI" ) { print PSTEXT "$lon $lat $textsize 0 0 CM $label\n"; } } close PSTEXT; close F; # Special cases for RI and CT open PSTEXT, "| pstext -J$us_proj -R$us_region -M -D0.3c/-0.35c -G30 -O -K -V >> $out" or die "Couldn't open pipe to pstext: $!"; print PSTEXT "> -71.4304202088889 41.5492257748148 $textsize 0 0 LC 2 3c r\nRI\n"; close PSTEXT; } sub do_us_cities { } sub do_japan { # system( "pscoast -J$j_proj -R$j_region -D$res -A100 -W0.5p/50 -G120 -O -K -V >> $out" ) # and die "do_japan: pscoast had a problem: $!"; my $command = "gzip -dc /home/braup/lib/GMT/State_Country_Boundaries/Asia/japan.dat.gz"; $command .= " | psxy -J$j_proj -R$j_region -M -W0.5p/50 -G120 -O -K -V >> $out"; system( "$command" ) and die "do_japan: pscoast had a problem: $!"; } sub do_japan_cities { my @cities = ( "140.0 35.74 Tokyo", ); # Make dots open PSXY, "| psxy -J$j_proj -R$j_region -Sc0.1c -G255 -O -K -V >> $out" or die "Couldn't open pipe to psxy: $!"; foreach $city (@cities) { print PSXY "$city\n"; } close PSXY; # Make Labels open PSTEXT, "| pstext -J$j_proj -R$j_region -D-0.1c/0.0c -G255 -O -K -V >> $out" or die "Couldn't open pipe to pstext: $!"; foreach $city (@cities) { my ($lon,$lat,$label) = split(' ', $city); print PSTEXT "$lon $lat 10 0 0 RB $label\n"; } close PSTEXT; } sub do_island_labels { my $size = 10; my @labels = ( "139.0 36.6 $size 0 0 CM HONSHU", "143.1 43.5 $size 0 0 CM HOKKAIDO", "133.4 33.7 $size 25 0 CM SHIKOKU", "131.0 32.5 $size 75 0 CM KYUSHU", "129.5 27.2 $size 50 0 CM RYUKYU ISLANDS" ); open PSTEXT, "| pstext -J$j_proj -R$j_region -G0 -O -K -V >> $out" or die "Couldn't open pipe to pstext: $!"; foreach $label (@labels) { print PSTEXT "$label\n"; } close PSTEXT; } sub do_scalebar { system( "psbasemap -J$j_proj -R$j_region -Lx12c/6.8c/40/500k -O -K -V >> $out" ) and die "do_scalebar: problem: $!"; system( "psbasemap -J$j_proj -R$j_region -Lx12c/5.6c/40/300m -O -K -V >> $out" ) and die "do_scalebar: problem: $!"; } sub do_graticule { system( "psbasemap -J$j_proj -R$j_region -B/a5f5g5WE -O -K -V >> $out" ) and die "do_graticule: problem: $!"; } sub add_map_annotations { my @notes = ( "125.5 24.1 8 0 0 LM Lambert Conformal Conic Projection. Produced using GMT (http://gmt.soest.hawaii.edu/)" ); open PSTEXT, "| pstext -J$j_proj -R$j_region -N -G0 -O -K -V >> $out" or die "Couldn't open pipe to pstext: $!"; foreach my $note (@notes) { print PSTEXT "$note\n"; } close PSTEXT; } sub finish_up { # dummy end system( "psxy /dev/null -J$us_proj -R$us_region -Sp -O -V >> $out" ) and die; } sub convert_to_png { warn "Converting to PNG ... "; system( "convert -trim -density 100 $out $pngout" ) and die "Couldn't convert to PNG: $!"; warn "Done\n"; }