diff -u ORG/gdmp/plmap.f90 gdmp/plmap.f90
--- ORG/gdmp/plmap.f90	2017-12-23 18:00:00.000000000 +0900
+++ gdmp/plmap.f90	2019-02-09 23:00:00.000000000 +0900
@@ -4,9 +4,9 @@
   real,allocatable :: g(:)
   character(80) :: wdr, flog, fnin, fnam, buf
   character(72) :: out;  character(20) :: sdtm;  character(8) :: area;
-  character(4) :: s4;  character(3) :: spl = '   ';  character(1) :: yn
+  character(6) :: ss;  character(3) :: spl = '   ';  character(1) :: yn
   integer :: ldr, mc, i, j, n, k, IER
-  integer :: istep, istp, lcap, kpl, kscl, klll, kshl, km, iinc, kinc
+  integer :: istep, istp, lcap, kpl, kscl, klll, kshl, km, ls, iinc, kinc
   integer :: nc, ncc, iorg, korg, ispa, ispb
   integer :: ixs, iys, mszx, mszy, nmx, nmy
   integer :: isf, itf, ksf, ktf, idf, kdf
@@ -125,17 +125,55 @@
       fscl = fscl * 100.
       ccm = fscl/100000.
       kscl = 0;  sclr = 0.;  sclu = 0.;  klll = 0;  kshl = 0
-      km = nint(fscl)/25000
-      if (km == 0)  km = 1
-      if (km > 50) km = 50
-      if ((km > 2) .and. (km < 5))   km = 2
-      if ((km > 5) .and. (km < 10))  km = 5
-      if ((km > 10) .and. (km < 20)) km = 10
-      if ((km > 20) .and. (km < 50)) km = 20
-      iinc = km;  kinc = km + km/2
-      if (km == 50) iinc = 60
-      if ((km == 1) .or. (km == 5) .or. (km == 50)) kinc = iinc
-      dscl = float(km)/ccm
+      if (fscl < 25000.) then               !ScaleBar (km [m])
+        km = nint(fscl)/25
+        if (km < 2) then
+          km = 1;  ss = '1 m';  ls = 3
+        else if (km < 5) then
+          km = 2;  ss = '2 m';  ls = 3
+        else if (km < 10) then
+          km = 5;  ss = '5 m';  ls = 3
+        else if (km < 20) then
+          km = 10;  ss = '10 m';  ls = 4
+        else if (km < 50) then
+          km = 20;  ss = '20 m';  ls = 4
+        else if (km < 100) then
+          km = 50;  ss = '50 m';  ls = 4
+        else if (km < 200) then
+          km = 100;  ss = '100 m';  ls = 5
+        else if (km < 500) then
+          km = 200;  ss = '200 m';  ls = 5
+        else
+          km = 500;  ss = '500 m';  ls = 5
+        endif
+          iinc = 1;  kinc = 1               ![LatLonIntv]: 1min x 1min
+        dscl = float(km*100) / fscl
+      else                                  !ScaleBar (km [km])
+        km = nint(fscl)/25000
+        if (km < 2) then
+          km = 1;  ss = '1 km';  ls = 4     ![LatLonIntv]: 1min x 1min
+        else if (km < 5) then
+          km = 2;  ss = '2 km';  ls = 4         !  2min x 3min
+        else if (km < 10) then
+          km = 5;  ss = '5 km';  ls = 4         !  5min x 5min
+        else if (km < 20) then
+          km = 10;  ss = '10 km';  ls = 5       ! 10min x 15min
+        else if (km < 50) then
+          km = 20;  ss = '20 km';  ls = 5       ! 20min x 30min
+        else if (km < 100) then
+          km = 50;  ss = '50 km';  ls = 5       !  1deg x 1deg
+        else if (km < 200) then
+          km = 100;  ss = '100 km';  ls = 6     !  2deg x 3deg
+        else if (km < 500) then
+          km = 200;  ss = '200 km';  ls = 6     !  5deg x 5deg
+        else
+          km = 500;  ss = '500 km';  ls = 6     ! 10deg x 10deg
+        endif
+        iinc = km;  if (km >= 50) iinc = km + km/5;  kinc = iinc
+        if ((km==2) .or. (km==10) .or. (km==20) .or. (km==100))   &
+          kinc = iinc + iinc/2
+        dscl = float(km)/ccm
+      endif
       call prompt('  Draw  Scale Bar  ?  ')
       call gparma('  "y" for Yes, othewise No ==> ', 1, yn)
       if ((yn == 'y') .or. (yn == 'Y')) then
@@ -204,9 +242,8 @@
         call plot(sclr+dscl, sclu,     2)
         call plot(sclr,      sclu,     2)
         call plot(sclr,      sclu+0.3, 2)
-        write(s4,'(i2,a2)') km, 'km'
         call lstyle('T', 0.5, 0., 0, -255)
-        call ptext(s4, 4, sclr+dscl/2., sclu+0.5, 2)
+        call ptext(ss, ls, sclr+dscl/2., sclu+0.5, 2)
         call newpen(1)
       endif
       call scisor(0., 0., wide, high)
diff -u ORG/gdmp/plmapc.f90 gdmp/plmapc.f90
--- ORG/gdmp/plmapc.f90	2017-12-23 18:00:00.000000000 +0900
+++ gdmp/plmapc.f90	2019-02-09 23:00:00.000000000 +0900
@@ -4,9 +4,9 @@
   real,allocatable :: g(:)
   character(80) :: wdr, flog, fnin, fnam, buf
   character(72) :: out;  character(20) :: sdtm;  character(8) :: area;
-  character(4) :: s4;  character(3) :: spl = '   ';  character(1) :: yn
+  character(6) :: ss;  character(3) :: spl = '   ';  character(1) :: yn
   integer :: ldr, mc, i, j, n, k, IER
-  integer :: istep, istp, kpl, kscl, klll, kshl, km, iinc, kinc
+  integer :: istep, istp, kpl, kscl, klll, kshl, km, ls, iinc, kinc
   integer :: nc, ncc, iorg, korg, ispa, ispb
   integer :: ixs, iys, mszx, mszy, nmx, nmy
   integer :: isf, itf, ksf, ktf, idf, kdf, mval
@@ -125,17 +125,55 @@
       fscl = fscl * 100.
       ccm = fscl/100000.
       kscl = 0;  sclr = 0.;  sclu = 0.;  klll = 0;  kshl = 0
-      km = nint(fscl)/25000
-      if (km == 0)  km = 1
-      if (km > 50) km = 50
-      if ((km > 2) .and. (km < 5))   km = 2
-      if ((km > 5) .and. (km < 10))  km = 5
-      if ((km > 10) .and. (km < 20)) km = 10
-      if ((km > 20) .and. (km < 50)) km = 20
-      iinc = km;  kinc = km + km/2
-      if (km == 50) iinc = 60
-      if ((km == 1) .or. (km == 5) .or. (km == 50)) kinc = iinc
-      dscl = float(km)/ccm
+      if (fscl < 25000.) then               !ScaleBar (km [m])
+        km = nint(fscl)/25
+        if (km < 2) then
+          km = 1;  ss = '1 m';  ls = 3
+        else if (km < 5) then
+          km = 2;  ss = '2 m';  ls = 3
+        else if (km < 10) then
+          km = 5;  ss = '5 m';  ls = 3
+        else if (km < 20) then
+          km = 10;  ss = '10 m';  ls = 4
+        else if (km < 50) then
+          km = 20;  ss = '20 m';  ls = 4
+        else if (km < 100) then
+          km = 50;  ss = '50 m';  ls = 4
+        else if (km < 200) then
+          km = 100;  ss = '100 m';  ls = 5
+        else if (km < 500) then
+          km = 200;  ss = '200 m';  ls = 5
+        else
+          km = 500;  ss = '500 m';  ls = 5
+        endif
+          iinc = 1;  kinc = 1               ![LatLonIntv]: 1min x 1min
+        dscl = float(km*100) / fscl
+      else                                  !ScaleBar (km [km])
+        km = nint(fscl)/25000
+        if (km < 2) then
+          km = 1;  ss = '1 km';  ls = 4     ![LatLonIntv]: 1min x 1min
+        else if (km < 5) then
+          km = 2;  ss = '2 km';  ls = 4         !  2min x 3min
+        else if (km < 10) then
+          km = 5;  ss = '5 km';  ls = 4         !  5min x 5min
+        else if (km < 20) then
+          km = 10;  ss = '10 km';  ls = 5       ! 10min x 15min
+        else if (km < 50) then
+          km = 20;  ss = '20 km';  ls = 5       ! 20min x 30min
+        else if (km < 100) then
+          km = 50;  ss = '50 km';  ls = 5       !  1deg x 1deg
+        else if (km < 200) then
+          km = 100;  ss = '100 km';  ls = 6     !  2deg x 3deg
+        else if (km < 500) then
+          km = 200;  ss = '200 km';  ls = 6     !  5deg x 5deg
+        else
+          km = 500;  ss = '500 km';  ls = 6     ! 10deg x 10deg
+        endif
+        iinc = km;  if (km >= 50) iinc = km + km/5;  kinc = iinc
+        if ((km==2) .or. (km==10) .or. (km==20) .or. (km==100))   &
+          kinc = iinc + iinc/2
+        dscl = float(km)/ccm
+      endif
       call prompt('  Draw  Scale Bar  ?  ')
       call gparma('  "y" for Yes, othewise No ==> ', 1, yn)
       if ((yn == 'y') .or. (yn == 'Y')) then
@@ -206,9 +244,8 @@
         call plot(sclr+dscl, sclu,     2)
         call plot(sclr,      sclu,     2)
         call plot(sclr,      sclu+0.3, 2)
-        write(s4,'(i2,a2)') km, 'km'
         call lstyle('T', 0.5, 0., 0, -255)
-        call ptext(s4, 4, sclr+dscl/2., sclu+0.5, 2)
+        call ptext(ss, ls, sclr+dscl/2., sclu+0.5, 2)
         call newpen(1)
       endif
       call scisor(0., 0., wide, high)
diff -u ORG/gdmp/plmapcl.f90 gdmp/plmapcl.f90
--- ORG/gdmp/plmapcl.f90	2017-12-23 18:00:00.000000000 +0900
+++ gdmp/plmapcl.f90	2019-02-09 23:00:00.000000000 +0900
@@ -4,9 +4,9 @@
   real,allocatable :: g(:)
   character(80) :: wdr, flog, fnin, fnln, fnam, buf
   character(72) :: out;  character(20) :: sdtm;  character(8) :: area;
-  character(4) :: s4;  character(3) :: spl = '   ';  character(1) :: yn
+  character(6) :: ss;  character(3) :: spl = '   ';  character(1) :: yn
   integer :: ldr, mc, i, j, n, k, IER
-  integer :: istep, istp, kpl, kscl, klll, kshl, km, iinc, kinc
+  integer :: istep, istp, kpl, kscl, klll, kshl, km, ls, iinc, kinc
   integer :: nc, ncc, iorg, korg, ispa, ispb
   integer :: ixs, iys, mszx, mszy, nmx, nmy
   integer :: isf, itf, ksf, ktf, idf, kdf, kl, mval, np
@@ -131,17 +131,55 @@
       fscl = fscl * 100.
       ccm = fscl/100000.
       kscl = 0;  sclr = 0.;  sclu = 0.;  klll = 0;  kshl = 0
-      km = nint(fscl)/25000
-      if (km == 0)  km = 1
-      if (km > 50) km = 50
-      if ((km > 2) .and. (km < 5))   km = 2
-      if ((km > 5) .and. (km < 10))  km = 5
-      if ((km > 10) .and. (km < 20)) km = 10
-      if ((km > 20) .and. (km < 50)) km = 20
-      iinc = km;  kinc = km + km/2
-      if (km == 50) iinc = 60
-      if ((km == 1) .or. (km == 5) .or. (km == 50)) kinc = iinc
-      dscl = float(km)/ccm
+      if (fscl < 25000.) then               !ScaleBar (km [m])
+        km = nint(fscl)/25
+        if (km < 2) then
+          km = 1;  ss = '1 m';  ls = 3
+        else if (km < 5) then
+          km = 2;  ss = '2 m';  ls = 3
+        else if (km < 10) then
+          km = 5;  ss = '5 m';  ls = 3
+        else if (km < 20) then
+          km = 10;  ss = '10 m';  ls = 4
+        else if (km < 50) then
+          km = 20;  ss = '20 m';  ls = 4
+        else if (km < 100) then
+          km = 50;  ss = '50 m';  ls = 4
+        else if (km < 200) then
+          km = 100;  ss = '100 m';  ls = 5
+        else if (km < 500) then
+          km = 200;  ss = '200 m';  ls = 5
+        else
+          km = 500;  ss = '500 m';  ls = 5
+        endif
+          iinc = 1;  kinc = 1               ![LatLonIntv]: 1min x 1min
+        dscl = float(km*100) / fscl
+      else                                  !ScaleBar (km [km])
+        km = nint(fscl)/25000
+        if (km < 2) then
+          km = 1;  ss = '1 km';  ls = 4     ![LatLonIntv]: 1min x 1min
+        else if (km < 5) then
+          km = 2;  ss = '2 km';  ls = 4         !  2min x 3min
+        else if (km < 10) then
+          km = 5;  ss = '5 km';  ls = 4         !  5min x 5min
+        else if (km < 20) then
+          km = 10;  ss = '10 km';  ls = 5       ! 10min x 15min
+        else if (km < 50) then
+          km = 20;  ss = '20 km';  ls = 5       ! 20min x 30min
+        else if (km < 100) then
+          km = 50;  ss = '50 km';  ls = 5       !  1deg x 1deg
+        else if (km < 200) then
+          km = 100;  ss = '100 km';  ls = 6     !  2deg x 3deg
+        else if (km < 500) then
+          km = 200;  ss = '200 km';  ls = 6     !  5deg x 5deg
+        else
+          km = 500;  ss = '500 km';  ls = 6     ! 10deg x 10deg
+        endif
+        iinc = km;  if (km >= 50) iinc = km + km/5;  kinc = iinc
+        if ((km==2) .or. (km==10) .or. (km==20) .or. (km==100))   &
+          kinc = iinc + iinc/2
+        dscl = float(km)/ccm
+      endif
       call prompt('  Draw  Scale Bar  ?  ')
       call gparma('  "y" for Yes, othewise No ==> ', 1, yn)
       if ((yn == 'y') .or. (yn == 'Y')) then
@@ -213,9 +251,8 @@
         call plot(sclr+dscl, sclu,     2)
         call plot(sclr,      sclu,     2)
         call plot(sclr,      sclu+0.3, 2)
-        write(s4,'(i2,a2)') km, 'km'
         call lstyle('T', 0.5, 0., 0, -255)
-        call ptext(s4, 4, sclr+dscl/2., sclu+0.5, 2)
+        call ptext(ss, ls, sclr+dscl/2., sclu+0.5, 2)
         call newpen(1)
       endif
       call scisor(0., 0., wide, high)
diff -u ORG/gdmp/plmapcs.f90 gdmp/plmapcs.f90
--- ORG/gdmp/plmapcs.f90	2017-12-23 18:00:00.000000000 +0900
+++ gdmp/plmapcs.f90	2019-02-09 23:00:00.000000000 +0900
@@ -5,9 +5,9 @@
   real,parameter :: RAD = (180./3.141593)
   character(80) :: wdr, flog, fnin, fnam, buf
   character(72) :: out;  character(20) :: sdtm;  character(8) :: area;
-  character(4) :: s4;  character(3) :: spl = '   ';  character(1) :: yn
+  character(6) :: ss;  character(3) :: spl = '   ';  character(1) :: yn
   integer :: ldr, mc, i, j, n, k, IER
-  integer :: istep, istp, kpl, kscl, klll, kshl, km, iinc, kinc
+  integer :: istep, istp, kpl, kscl, klll, kshl, km, ls, iinc, kinc
   integer :: nc, ncc, iorg, korg, ispa, ispb
   integer :: ixs, iys, mszx, mszy, nmx, nmy
   integer :: isf, itf, ksf, ktf, idf, kdf, mval
@@ -137,17 +137,55 @@
       fscl = fscl * 100.
       ccm = fscl/100000.
       kscl = 0;  sclr = 0.;  sclu = 0.;  klll = 0;  kshl = 0
-      km = nint(fscl)/25000
-      if (km == 0)  km = 1
-      if (km > 50) km = 50
-      if ((km > 2) .and. (km < 5))   km = 2
-      if ((km > 5) .and. (km < 10))  km = 5
-      if ((km > 10) .and. (km < 20)) km = 10
-      if ((km > 20) .and. (km < 50)) km = 20
-      iinc = km;  kinc = km + km/2
-      if (km == 50) iinc = 60
-      if ((km == 1) .or. (km == 5) .or. (km == 50)) kinc = iinc
-      dscl = float(km)/ccm
+      if (fscl < 25000.) then               !ScaleBar (km [m])
+        km = nint(fscl)/25
+        if (km < 2) then
+          km = 1;  ss = '1 m';  ls = 3
+        else if (km < 5) then
+          km = 2;  ss = '2 m';  ls = 3
+        else if (km < 10) then
+          km = 5;  ss = '5 m';  ls = 3
+        else if (km < 20) then
+          km = 10;  ss = '10 m';  ls = 4
+        else if (km < 50) then
+          km = 20;  ss = '20 m';  ls = 4
+        else if (km < 100) then
+          km = 50;  ss = '50 m';  ls = 4
+        else if (km < 200) then
+          km = 100;  ss = '100 m';  ls = 5
+        else if (km < 500) then
+          km = 200;  ss = '200 m';  ls = 5
+        else
+          km = 500;  ss = '500 m';  ls = 5
+        endif
+          iinc = 1;  kinc = 1               ![LatLonIntv]: 1min x 1min
+        dscl = float(km*100) / fscl
+      else                                  !ScaleBar (km [km])
+        km = nint(fscl)/25000
+        if (km < 2) then
+          km = 1;  ss = '1 km';  ls = 4     ![LatLonIntv]: 1min x 1min
+        else if (km < 5) then
+          km = 2;  ss = '2 km';  ls = 4         !  2min x 3min
+        else if (km < 10) then
+          km = 5;  ss = '5 km';  ls = 4         !  5min x 5min
+        else if (km < 20) then
+          km = 10;  ss = '10 km';  ls = 5       ! 10min x 15min
+        else if (km < 50) then
+          km = 20;  ss = '20 km';  ls = 5       ! 20min x 30min
+        else if (km < 100) then
+          km = 50;  ss = '50 km';  ls = 5       !  1deg x 1deg
+        else if (km < 200) then
+          km = 100;  ss = '100 km';  ls = 6     !  2deg x 3deg
+        else if (km < 500) then
+          km = 200;  ss = '200 km';  ls = 6     !  5deg x 5deg
+        else
+          km = 500;  ss = '500 km';  ls = 6     ! 10deg x 10deg
+        endif
+        iinc = km;  if (km >= 50) iinc = km + km/5;  kinc = iinc
+        if ((km==2) .or. (km==10) .or. (km==20) .or. (km==100))   &
+          kinc = iinc + iinc/2
+        dscl = float(km)/ccm
+      endif
       call prompt('  Draw  Scale Bar  ?  ')
       call gparma('  "y" for Yes, othewise No ==> ', 1, yn)
       if ((yn == 'y') .or. (yn == 'Y')) then
@@ -264,9 +302,8 @@
         call plot(sclr+dscl, sclu,     2)
         call plot(sclr,      sclu,     2)
         call plot(sclr,      sclu+0.3, 2)
-        write(s4,'(i2,a2)') km, 'km'
         call lstyle('T', 0.5, 0., 0, -255)
-        call ptext(s4, 4, sclr+dscl/2., sclu+0.5, 2)
+        call ptext(ss, ls, sclr+dscl/2., sclu+0.5, 2)
         call newpen(1)
       endif
       call scisor(0., 0., wide, high)
diff -u ORG/gdmp/plmapg.f90 gdmp/plmapg.f90
--- ORG/gdmp/plmapg.f90	2017-12-23 18:00:00.000000000 +0900
+++ gdmp/plmapg.f90	2019-02-09 23:00:00.000000000 +0900
@@ -4,9 +4,9 @@
   real,allocatable :: g(:)
   character(80) :: wdr, flog, fnin, fnam, buf
   character(72) :: out;  character(20) :: sdtm;  character(8) :: area;
-  character(4) :: s4;  character(3) :: spl = '   ';  character(1) :: yn
+  character(6) :: ss;  character(3) :: spl = '   ';  character(1) :: yn
   integer :: ldr, mc, i, j, n, k, IER
-  integer :: istep, istp, kpl, kscl, klll, kshl, km, iinc, kinc
+  integer :: istep, istp, kpl, kscl, klll, kshl, km, ls, iinc, kinc
   integer :: nc, ncc, iorg, korg, ispa, ispb
   integer :: ixs, iys, mszx, mszy, nmx, nmy
   integer :: isf, itf, ksf, ktf, idf, kdf, mval
@@ -125,17 +125,55 @@
       fscl = fscl * 100.
       ccm = fscl/100000.
       kscl = 0;  sclr = 0.;  sclu = 0.;  klll = 0;  kshl = 0
-      km = nint(fscl)/25000
-      if (km == 0)  km = 1
-      if (km > 50) km = 50
-      if ((km > 2) .and. (km < 5))   km = 2
-      if ((km > 5) .and. (km < 10))  km = 5
-      if ((km > 10) .and. (km < 20)) km = 10
-      if ((km > 20) .and. (km < 50)) km = 20
-      iinc = km;  kinc = km + km/2
-      if (km == 50) iinc = 60
-      if ((km == 1) .or. (km == 5) .or. (km == 50)) kinc = iinc
-      dscl = float(km)/ccm
+      if (fscl < 25000.) then               !ScaleBar (km [m])
+        km = nint(fscl)/25
+        if (km < 2) then
+          km = 1;  ss = '1 m';  ls = 3
+        else if (km < 5) then
+          km = 2;  ss = '2 m';  ls = 3
+        else if (km < 10) then
+          km = 5;  ss = '5 m';  ls = 3
+        else if (km < 20) then
+          km = 10;  ss = '10 m';  ls = 4
+        else if (km < 50) then
+          km = 20;  ss = '20 m';  ls = 4
+        else if (km < 100) then
+          km = 50;  ss = '50 m';  ls = 4
+        else if (km < 200) then
+          km = 100;  ss = '100 m';  ls = 5
+        else if (km < 500) then
+          km = 200;  ss = '200 m';  ls = 5
+        else
+          km = 500;  ss = '500 m';  ls = 5
+        endif
+          iinc = 1;  kinc = 1               ![LatLonIntv]: 1min x 1min
+        dscl = float(km*100) / fscl
+      else                                  !ScaleBar (km [km])
+        km = nint(fscl)/25000
+        if (km < 2) then
+          km = 1;  ss = '1 km';  ls = 4     ![LatLonIntv]: 1min x 1min
+        else if (km < 5) then
+          km = 2;  ss = '2 km';  ls = 4         !  2min x 3min
+        else if (km < 10) then
+          km = 5;  ss = '5 km';  ls = 4         !  5min x 5min
+        else if (km < 20) then
+          km = 10;  ss = '10 km';  ls = 5       ! 10min x 15min
+        else if (km < 50) then
+          km = 20;  ss = '20 km';  ls = 5       ! 20min x 30min
+        else if (km < 100) then
+          km = 50;  ss = '50 km';  ls = 5       !  1deg x 1deg
+        else if (km < 200) then
+          km = 100;  ss = '100 km';  ls = 6     !  2deg x 3deg
+        else if (km < 500) then
+          km = 200;  ss = '200 km';  ls = 6     !  5deg x 5deg
+        else
+          km = 500;  ss = '500 km';  ls = 6     ! 10deg x 10deg
+        endif
+        iinc = km;  if (km >= 50) iinc = km + km/5;  kinc = iinc
+        if ((km==2) .or. (km==10) .or. (km==20) .or. (km==100))   &
+          kinc = iinc + iinc/2
+        dscl = float(km)/ccm
+      endif
       call prompt('  Draw  Scale Bar  ?  ')
       call gparma('  "y" for Yes, othewise No ==> ', 1, yn)
       if ((yn == 'y') .or. (yn == 'Y')) then
@@ -204,9 +242,8 @@
         call plot(sclr+dscl, sclu,     2)
         call plot(sclr,      sclu,     2)
         call plot(sclr,      sclu+0.3, 2)
-        write(s4,'(i2,a2)') km, 'km'
         call lstyle('T', 0.5, 0., 0, -255)
-        call ptext(s4, 4, sclr+dscl/2., sclu+0.5, 2)
+        call ptext(ss, ls, sclr+dscl/2., sclu+0.5, 2)
         call newpen(1)
       endif
       call scisor(0., 0., wide, high)
diff -u ORG/gdmp/plmapl.f90 gdmp/plmapl.f90
--- ORG/gdmp/plmapl.f90	2017-12-23 18:00:00.000000000 +0900
+++ gdmp/plmapl.f90	2019-02-09 23:00:00.000000000 +0900
@@ -4,9 +4,9 @@
   real,allocatable :: g(:)
   character(80) :: wdr, flog, fnin, fnln, fnam, buf
   character(72) :: out;  character(20) :: sdtm;  character(8) :: area;
-  character(4) :: s4;  character(3) :: spl = '   ';  character(1) :: yn
+  character(6) :: ss;  character(3) :: spl = '   ';  character(1) :: yn
   integer :: ldr, mc, i, j, n, k, IER
-  integer :: istep, istp, lcap, kpl, kscl, klll, kshl, km, iinc, kinc
+  integer :: istep, istp, lcap, kpl, kscl, klll, kshl, km, ls, iinc, kinc
   integer :: nc, ncc, iorg, korg, ispa, ispb
   integer :: ixs, iys, mszx, mszy, nmx, nmy
   integer :: isf, itf, ksf, ktf, idf, kdf, kl, np
@@ -131,17 +131,55 @@
       fscl = fscl * 100.
       ccm = fscl/100000.
       kscl = 0;  sclr = 0.;  sclu = 0.;  klll = 0;  kshl = 0
-      km = nint(fscl)/25000
-      if (km == 0)  km = 1
-      if (km > 50) km = 50
-      if ((km > 2) .and. (km < 5))   km = 2
-      if ((km > 5) .and. (km < 10))  km = 5
-      if ((km > 10) .and. (km < 20)) km = 10
-      if ((km > 20) .and. (km < 50)) km = 20
-      iinc = km;  kinc = km + km/2
-      if (km == 50) iinc = 60
-      if ((km == 1) .or. (km == 5) .or. (km == 50)) kinc = iinc
-      dscl = float(km)/ccm
+      if (fscl < 25000.) then               !ScaleBar (km [m])
+        km = nint(fscl)/25
+        if (km < 2) then
+          km = 1;  ss = '1 m';  ls = 3
+        else if (km < 5) then
+          km = 2;  ss = '2 m';  ls = 3
+        else if (km < 10) then
+          km = 5;  ss = '5 m';  ls = 3
+        else if (km < 20) then
+          km = 10;  ss = '10 m';  ls = 4
+        else if (km < 50) then
+          km = 20;  ss = '20 m';  ls = 4
+        else if (km < 100) then
+          km = 50;  ss = '50 m';  ls = 4
+        else if (km < 200) then
+          km = 100;  ss = '100 m';  ls = 5
+        else if (km < 500) then
+          km = 200;  ss = '200 m';  ls = 5
+        else
+          km = 500;  ss = '500 m';  ls = 5
+        endif
+          iinc = 1;  kinc = 1               ![LatLonIntv]: 1min x 1min
+        dscl = float(km*100) / fscl
+      else                                  !ScaleBar (km [km])
+        km = nint(fscl)/25000
+        if (km < 2) then
+          km = 1;  ss = '1 km';  ls = 4     ![LatLonIntv]: 1min x 1min
+        else if (km < 5) then
+          km = 2;  ss = '2 km';  ls = 4         !  2min x 3min
+        else if (km < 10) then
+          km = 5;  ss = '5 km';  ls = 4         !  5min x 5min
+        else if (km < 20) then
+          km = 10;  ss = '10 km';  ls = 5       ! 10min x 15min
+        else if (km < 50) then
+          km = 20;  ss = '20 km';  ls = 5       ! 20min x 30min
+        else if (km < 100) then
+          km = 50;  ss = '50 km';  ls = 5       !  1deg x 1deg
+        else if (km < 200) then
+          km = 100;  ss = '100 km';  ls = 6     !  2deg x 3deg
+        else if (km < 500) then
+          km = 200;  ss = '200 km';  ls = 6     !  5deg x 5deg
+        else
+          km = 500;  ss = '500 km';  ls = 6     ! 10deg x 10deg
+        endif
+        iinc = km;  if (km >= 50) iinc = km + km/5;  kinc = iinc
+        if ((km==2) .or. (km==10) .or. (km==20) .or. (km==100))   &
+          kinc = iinc + iinc/2
+        dscl = float(km)/ccm
+      endif
       call prompt('  Draw  Scale Bar  ?  ')
       call gparma('  "y" for Yes, othewise No ==> ', 1, yn)
       if ((yn == 'y') .or. (yn == 'Y')) then
@@ -210,9 +248,8 @@
         call plot(sclr+dscl, sclu,     2)
         call plot(sclr,      sclu,     2)
         call plot(sclr,      sclu+0.3, 2)
-        write(s4,'(i2,a2)') km, 'km'
         call lstyle('T', 0.5, 0., 0, -255)
-        call ptext(s4, 4, sclr+dscl/2., sclu+0.5, 2)
+        call ptext(ss, ls, sclr+dscl/2., sclu+0.5, 2)
         call newpen(1)
       endif
       call scisor(0., 0., wide, high)
diff -u ORG/gdmp/plmaps.f90 gdmp/plmaps.f90
--- ORG/gdmp/plmaps.f90	2017-12-23 18:00:00.000000000 +0900
+++ gdmp/plmaps.f90	2019-02-09 23:00:00.000000000 +0900
@@ -5,9 +5,9 @@
   real,parameter :: RAD = (180./3.141593)
   character(80) :: wdr, flog, fnin, fnam, buf
   character(72) :: out;  character(20) :: sdtm;  character(8) :: area;
-  character(4) :: s4;  character(3) :: spl = '   ';  character(1) :: yn
+  character(6) :: ss;  character(3) :: spl = '   ';  character(1) :: yn
   integer :: ldr, mc, i, j, n, k, IER
-  integer :: istep, istp, lcap, kpl, kscl, klll, kshl, km, iinc, kinc
+  integer :: istep, istp, lcap, kpl, kscl, klll, kshl, km, ls, iinc, kinc
   integer :: nc, ncc, iorg, korg, ispa, ispb
   integer :: ixs, iys, mszx, mszy, nmx, nmy
   integer :: isf, itf, ksf, ktf, idf, kdf
@@ -137,17 +137,55 @@
       fscl = fscl * 100.
       ccm = fscl/100000.
       kscl = 0;  sclr = 0.;  sclu = 0.;  klll = 0;  kshl = 0
-      km = nint(fscl)/25000
-      if (km == 0)  km = 1
-      if (km > 50) km = 50
-      if ((km > 2) .and. (km < 5))   km = 2
-      if ((km > 5) .and. (km < 10))  km = 5
-      if ((km > 10) .and. (km < 20)) km = 10
-      if ((km > 20) .and. (km < 50)) km = 20
-      iinc = km;  kinc = km + km/2
-      if (km == 50) iinc = 60
-      if ((km == 1) .or. (km == 5) .or. (km == 50)) kinc = iinc
-      dscl = float(km)/ccm
+      if (fscl < 25000.) then               !ScaleBar (km [m])
+        km = nint(fscl)/25
+        if (km < 2) then
+          km = 1;  ss = '1 m';  ls = 3
+        else if (km < 5) then
+          km = 2;  ss = '2 m';  ls = 3
+        else if (km < 10) then
+          km = 5;  ss = '5 m';  ls = 3
+        else if (km < 20) then
+          km = 10;  ss = '10 m';  ls = 4
+        else if (km < 50) then
+          km = 20;  ss = '20 m';  ls = 4
+        else if (km < 100) then
+          km = 50;  ss = '50 m';  ls = 4
+        else if (km < 200) then
+          km = 100;  ss = '100 m';  ls = 5
+        else if (km < 500) then
+          km = 200;  ss = '200 m';  ls = 5
+        else
+          km = 500;  ss = '500 m';  ls = 5
+        endif
+          iinc = 1;  kinc = 1               ![LatLonIntv]: 1min x 1min
+        dscl = float(km*100) / fscl
+      else                                  !ScaleBar (km [km])
+        km = nint(fscl)/25000
+        if (km < 2) then
+          km = 1;  ss = '1 km';  ls = 4     ![LatLonIntv]: 1min x 1min
+        else if (km < 5) then
+          km = 2;  ss = '2 km';  ls = 4         !  2min x 3min
+        else if (km < 10) then
+          km = 5;  ss = '5 km';  ls = 4         !  5min x 5min
+        else if (km < 20) then
+          km = 10;  ss = '10 km';  ls = 5       ! 10min x 15min
+        else if (km < 50) then
+          km = 20;  ss = '20 km';  ls = 5       ! 20min x 30min
+        else if (km < 100) then
+          km = 50;  ss = '50 km';  ls = 5       !  1deg x 1deg
+        else if (km < 200) then
+          km = 100;  ss = '100 km';  ls = 6     !  2deg x 3deg
+        else if (km < 500) then
+          km = 200;  ss = '200 km';  ls = 6     !  5deg x 5deg
+        else
+          km = 500;  ss = '500 km';  ls = 6     ! 10deg x 10deg
+        endif
+        iinc = km;  if (km >= 50) iinc = km + km/5;  kinc = iinc
+        if ((km==2) .or. (km==10) .or. (km==20) .or. (km==100))   &
+          kinc = iinc + iinc/2
+        dscl = float(km)/ccm
+      endif
       call prompt('  Draw  Scale Bar  ?  ')
       call gparma('  "y" for Yes, othewise No ==> ', 1, yn)
       if ((yn == 'y') .or. (yn == 'Y')) then
@@ -266,9 +304,8 @@
         call plot(sclr+dscl, sclu,     2)
         call plot(sclr,      sclu,     2)
         call plot(sclr,      sclu+0.3, 2)
-        write(s4,'(i2,a2)') km, 'km'
         call lstyle('T', 0.5, 0., 0, -255)
-        call ptext(s4, 4, sclr+dscl/2., sclu+0.5, 2)
+        call ptext(ss, ls, sclr+dscl/2., sclu+0.5, 2)
         call newpen(1)
       endif
       call scisor(0., 0., wide, high)
diff -u ORG/gdmp/shade.f90 gdmp/shade.f90
--- ORG/gdmp/shade.f90	2017-12-23 18:00:00.000000000 +0900
+++ gdmp/shade.f90	2019-02-09 23:00:00.000000000 +0900
@@ -5,9 +5,9 @@
   real,parameter :: RAD = (180./3.141593)
   character(80) :: wdr, flog, fnin, fnam, buf
   character(72) :: out;  character(20) :: sdtm;  character(8) :: area;
-  character(4) :: s4;  character(3) :: spl = '   ';  character(1) :: yn
+  character(6) :: ss;  character(3) :: spl = '   ';  character(1) :: yn
   integer :: ldr, i, j, n, k, IER
-  integer :: kpl, kscl, klll, kshl, km, iinc, kinc
+  integer :: kpl, kscl, klll, kshl, km, ls, iinc, kinc
   integer :: nc, ncc, mc, iorg, korg, ispa, ispb
   integer :: ixs, iys, mszx, mszy, mx, my
   integer :: isf, itf, ksf, ktf, idf, kdf
@@ -132,17 +132,55 @@
       fscl = fscl * 100.
       ccm = fscl/100000.
       kscl = 0;  sclr = 0.;  sclu = 0.;  klll = 0;  kshl = 0
-      km = nint(fscl)/25000
-      if (km == 0)  km = 1
-      if (km > 50) km = 50
-      if ((km > 2) .and. (km < 5))   km = 2
-      if ((km > 5) .and. (km < 10))  km = 5
-      if ((km > 10) .and. (km < 20)) km = 10
-      if ((km > 20) .and. (km < 50)) km = 20
-      iinc = km;  kinc = km + km/2
-      if (km == 50) iinc = 60
-      if ((km == 1) .or. (km == 5) .or. (km == 50)) kinc = iinc
-      dscl = float(km)/ccm
+      if (fscl < 25000.) then               !ScaleBar (km [m])
+        km = nint(fscl)/25
+        if (km < 2) then
+          km = 1;  ss = '1 m';  ls = 3
+        else if (km < 5) then
+          km = 2;  ss = '2 m';  ls = 3
+        else if (km < 10) then
+          km = 5;  ss = '5 m';  ls = 3
+        else if (km < 20) then
+          km = 10;  ss = '10 m';  ls = 4
+        else if (km < 50) then
+          km = 20;  ss = '20 m';  ls = 4
+        else if (km < 100) then
+          km = 50;  ss = '50 m';  ls = 4
+        else if (km < 200) then
+          km = 100;  ss = '100 m';  ls = 5
+        else if (km < 500) then
+          km = 200;  ss = '200 m';  ls = 5
+        else
+          km = 500;  ss = '500 m';  ls = 5
+        endif
+          iinc = 1;  kinc = 1               ![LatLonIntv]: 1min x 1min
+        dscl = float(km*100) / fscl
+      else                                  !ScaleBar (km [km])
+        km = nint(fscl)/25000
+        if (km < 2) then
+          km = 1;  ss = '1 km';  ls = 4     ![LatLonIntv]: 1min x 1min
+        else if (km < 5) then
+          km = 2;  ss = '2 km';  ls = 4         !  2min x 3min
+        else if (km < 10) then
+          km = 5;  ss = '5 km';  ls = 4         !  5min x 5min
+        else if (km < 20) then
+          km = 10;  ss = '10 km';  ls = 5       ! 10min x 15min
+        else if (km < 50) then
+          km = 20;  ss = '20 km';  ls = 5       ! 20min x 30min
+        else if (km < 100) then
+          km = 50;  ss = '50 km';  ls = 5       !  1deg x 1deg
+        else if (km < 200) then
+          km = 100;  ss = '100 km';  ls = 6     !  2deg x 3deg
+        else if (km < 500) then
+          km = 200;  ss = '200 km';  ls = 6     !  5deg x 5deg
+        else
+          km = 500;  ss = '500 km';  ls = 6     ! 10deg x 10deg
+        endif
+        iinc = km;  if (km >= 50) iinc = km + km/5;  kinc = iinc
+        if ((km==2) .or. (km==10) .or. (km==20) .or. (km==100))   &
+          kinc = iinc + iinc/2
+        dscl = float(km)/ccm
+      endif
       call prompt('  Draw  Scale Bar  ?  ')
       call gparma('  "y" for Yes, othewise No ==> ', 1, yn)
       if ((yn == 'y') .or. (yn == 'Y')) then
@@ -257,9 +295,8 @@
         call plot(sclr+dscl, sclu,     2)
         call plot(sclr,      sclu,     2)
         call plot(sclr,      sclu+0.3, 2)
-        write(s4,'(i2,a2)') km, 'km'
         call lstyle('T', 0.5, 0., 0, -255)
-        call ptext(s4, 4, sclr+dscl/2., sclu+0.5, 2)
+        call ptext(ss, ls, sclr+dscl/2., sclu+0.5, 2)
         call newpen(1)
       endif
       call scisor(0., 0., wide, high)
diff -u ORG/gdmp/xplmap.f90 gdmp/xplmap.f90
--- ORG/gdmp/xplmap.f90	2017-12-23 18:00:00.000000000 +0900
+++ gdmp/xplmap.f90	2019-02-09 23:00:00.000000000 +0900
@@ -10,12 +10,12 @@
   character(LBUF) :: sbf
   character(80) :: wdr, flog, fnin, fnobj, fncap, fnam, buf
   character(72) :: out;  character(40) :: slbl;  character(20) :: sdtm
-  character(8) :: area;  character(4) :: sht, s4;  character(3) :: fnt
-  character(1) :: yn
+  character(8) :: area;  character(6) :: ss;  character(4) :: sht
+  character(3) :: fnt;  character(1) :: yn
   integer :: ldr, nseq, ns, n, i, j, k, kpolyg, m, nct, IER
   integer :: nc, ncc, mc, iorg, korg, ispa, ispb
   integer :: ixs, iys, mszx, mszy, nmx, nmy
-  integer :: istep, istp, lcapt, km, iinc, kinc, kscl, klll, kshl, klbl
+  integer :: istep, istp, lcapt, km, ls, iinc, kinc, kscl, klll, kshl, klbl
   integer :: ibcol, itcol, idf, isf, itf, kdf, ksf, ktf, ksp, mark
   real :: vnul, dmy, xs, ys, gsum, gmin, gmax, szx, szy, swd, shi
   real :: fscl, am, bm, csiz, high, wide, rs, ts, ccm, dscl, sclr, sclu
@@ -171,21 +171,55 @@
   call premsg(out)
 
   ccm = fscl/100000.
-  km = nint(fscl)/25000
-  if (km < 1) km = 1
-  if ((km > 2) .and. (km < 5)) km = 2
-  if ((km > 5) .and. (km < 10)) km = 5
-  if ((km > 10) .and. (km < 20)) km = 10
-  if ((km > 20) .and. (km < 50)) km = 20
-  if ((km >= 50) .and. (km < 120)) km = 60
-  if ((km > 120) .and. (km < 300)) km = 120
-  if ((km > 300) .and. (km < 600)) km = 300
-  if (km > 600) km = 600
-  iinc = km
-  kinc = km + km/2
-  if (km > 50) km = 50
-  if ((km == 5) .or. (km == 50)) kinc = iinc
-  dscl = float(km)/ccm
+  if (fscl < 25000.) then               !ScaleBar (km [m])
+    km = nint(fscl)/25
+    if (km < 2) then
+      km = 1;  ss = '1 m';  ls = 3
+    else if (km < 5) then
+      km = 2;  ss = '2 m';  ls = 3
+    else if (km < 10) then
+      km = 5;  ss = '5 m';  ls = 3
+    else if (km < 20) then
+      km = 10;  ss = '10 m';  ls = 4
+    else if (km < 50) then
+      km = 20;  ss = '20 m';  ls = 4
+    else if (km < 100) then
+      km = 50;  ss = '50 m';  ls = 4
+    else if (km < 200) then
+      km = 100;  ss = '100 m';  ls = 5
+    else if (km < 500) then
+      km = 200;  ss = '200 m';  ls = 5
+    else
+      km = 500;  ss = '500 m';  ls = 5
+    endif
+      iinc = 1;  kinc = 1               ![LatLonIntv]: 1min x 1min
+    dscl = float(km*100) / fscl
+  else                                  !ScaleBar (km [km])
+    km = nint(fscl)/25000
+    if (km < 2) then
+      km = 1;  ss = '1 km';  ls = 4     ![LatLonIntv]: 1min x 1min
+    else if (km < 5) then
+      km = 2;  ss = '2 km';  ls = 4         !  2min x 3min
+    else if (km < 10) then
+      km = 5;  ss = '5 km';  ls = 4         !  5min x 5min
+    else if (km < 20) then
+      km = 10;  ss = '10 km';  ls = 5       ! 10min x 15min
+    else if (km < 50) then
+      km = 20;  ss = '20 km';  ls = 5       ! 20min x 30min
+    else if (km < 100) then
+      km = 50;  ss = '50 km';  ls = 5       !  1deg x 1deg
+    else if (km < 200) then
+      km = 100;  ss = '100 km';  ls = 6     !  2deg x 3deg
+    else if (km < 500) then
+      km = 200;  ss = '200 km';  ls = 6     !  5deg x 5deg
+    else
+      km = 500;  ss = '500 km';  ls = 6     ! 10deg x 10deg
+    endif
+    iinc = km;  if (km >= 50) iinc = km + km/5;  kinc = iinc
+    if ((km==2) .or. (km==10) .or. (km==20) .or. (km==100))   &
+      kinc = iinc + iinc/2
+    dscl = float(km)/ccm
+  endif
 
   kscl = 0;  sclr = 0.;  sclu = 0.;  klll = 0;  kshl = 0
   call prompt('  Draw  Scale Bar  ?  ')
@@ -248,8 +282,10 @@
     if (mod(kshl/10,10) /= 0) write(6,'(a,$)') '+River'
     if ((kshl/100) /= 0) write(6,'(a,$)') '+PrefB'
     if (klll /= 0) write(6,'(a,$)') '  LatLonLines'
-    if (kscl /= 0) write(6,'(a,f5.1,a,f5.1,a,$)')   &
-                     '  ScaleBar [', sclr, ',', sclu, ' ]'
+    if (kscl /= 0) then
+      write(6,'(a,f5.1,$)') '  ScaleBar [', sclr
+      write(6,'(a,f5.1,a,$)') ',', sclu, ' ]'
+    endif
     write(6,'(a)')
   endif
   if (klbl /= 0) write(6,'(a,a)') '      Identifier : ', slbl
@@ -415,9 +451,8 @@
 
   if (kscl /= 0) then
     call premsg('--- Drawing Scale-Bar')
-    write(s4,'(i2,a2)') km, 'km'
     call lstyle('TB ', 0.7, 0., 0, -999)
-    call ptext(s4, 4, sclr+dscl/2., sclu+0.5, 2)
+    call ptext(ss, ls, sclr+dscl/2., sclu+0.5, 2)
     call newpen(2)
     call plot(sclr,      sclu+0.1, 3)
     call plot(sclr+dscl, sclu+0.1, 2)
@@ -579,8 +614,10 @@
       if (mod(kshl/10,10) /= 0) write(99,'(a,$)') '+River'
       if ((kshl/100) /= 0) write(99,'(a,$)') '+PrefB'
       if (klll /= 0) write(99,'(a,$)') '  LatLonLines'
-      if (kscl /= 0) write(99,'(a,f5.1,a,f5.1,a,$)')   &
-                       '  ScaleBar [', sclr, ',', sclu, ' ]'
+      if (kscl /= 0) then
+        write(99,'(a,f5.1,$)') '  ScaleBar [', sclr
+        write(99,'(a,f5.1,a,$)') ',', sclu, ' ]'
+      endif
       write(99,'(a)')
     endif
     if (klbl /= 0) write(99,'(a,a)') '      Identifier : ', slbl
diff -u ORG/gdmp/xplmapc.f90 gdmp/xplmapc.f90
--- ORG/gdmp/xplmapc.f90	2017-12-23 18:00:00.000000000 +0900
+++ gdmp/xplmapc.f90	2019-02-09 23:00:00.000000000 +0900
@@ -10,12 +10,12 @@
   character(LBUF) :: sbf
   character(80) :: wdr, flog, fnin, fnobj, fncap, fnam, buf
   character(72) :: out;  character(40) :: slbl;  character(20) :: sdtm
-  character(10) :: cunit;  character(8) :: area;  character(6) :: s6
+  character(10) :: cunit;  character(8) :: area;  character(6) :: ss
   character(4) :: sht;  character(3) :: fnt;  character(1) :: yn
   integer :: ldr, nseq, ns, n, i, j, k, kpolyg, m, nct, IER
   integer :: nc, ncc, mc, iorg, korg, ispa, ispb
   integer :: ixs, iys, mszx, mszy, nmx, nmy
-  integer :: istep, istp, km, iinc, kinc, kscl, klll, kshl, klbl
+  integer :: istep, istp, km, ls, iinc, kinc, kscl, klll, kshl, klbl
   integer :: ibcol, itcol, idf, isf, itf, kdf, ksf, ktf, ksp, mark
   integer :: kcgl, mval, nras
   real :: vnul, dmy, xs, ys, gsum, gmin, gmax, szx, szy, swd, shi
@@ -178,21 +178,55 @@
   call premsg(out)
 
   ccm = fscl/100000.
-  km = nint(fscl)/25000
-  if (km < 1) km = 1
-  if ((km > 2) .and. (km < 5)) km = 2
-  if ((km > 5) .and. (km < 10)) km = 5
-  if ((km > 10) .and. (km < 20)) km = 10
-  if ((km > 20) .and. (km < 50)) km = 20
-  if ((km >= 50) .and. (km < 120)) km = 60
-  if ((km > 120) .and. (km < 300)) km = 120
-  if ((km > 300) .and. (km < 600)) km = 300
-  if (km > 600) km = 600
-  iinc = km
-  kinc = km + km/2
-  if (km > 50) km = 50
-  if ((km == 5) .or. (km == 50)) kinc = iinc
-  dscl = float(km)/ccm
+  if (fscl < 25000.) then               !ScaleBar (km [m])
+    km = nint(fscl)/25
+    if (km < 2) then
+      km = 1;  ss = '1 m';  ls = 3
+    else if (km < 5) then
+      km = 2;  ss = '2 m';  ls = 3
+    else if (km < 10) then
+      km = 5;  ss = '5 m';  ls = 3
+    else if (km < 20) then
+      km = 10;  ss = '10 m';  ls = 4
+    else if (km < 50) then
+      km = 20;  ss = '20 m';  ls = 4
+    else if (km < 100) then
+      km = 50;  ss = '50 m';  ls = 4
+    else if (km < 200) then
+      km = 100;  ss = '100 m';  ls = 5
+    else if (km < 500) then
+      km = 200;  ss = '200 m';  ls = 5
+    else
+      km = 500;  ss = '500 m';  ls = 5
+    endif
+      iinc = 1;  kinc = 1               ![LatLonIntv]: 1min x 1min
+    dscl = float(km*100) / fscl
+  else                                  !ScaleBar (km [km])
+    km = nint(fscl)/25000
+    if (km < 2) then
+      km = 1;  ss = '1 km';  ls = 4     ![LatLonIntv]: 1min x 1min
+    else if (km < 5) then
+      km = 2;  ss = '2 km';  ls = 4         !  2min x 3min
+    else if (km < 10) then
+      km = 5;  ss = '5 km';  ls = 4         !  5min x 5min
+    else if (km < 20) then
+      km = 10;  ss = '10 km';  ls = 5       ! 10min x 15min
+    else if (km < 50) then
+      km = 20;  ss = '20 km';  ls = 5       ! 20min x 30min
+    else if (km < 100) then
+      km = 50;  ss = '50 km';  ls = 5       !  1deg x 1deg
+    else if (km < 200) then
+      km = 100;  ss = '100 km';  ls = 6     !  2deg x 3deg
+    else if (km < 500) then
+      km = 200;  ss = '200 km';  ls = 6     !  5deg x 5deg
+    else
+      km = 500;  ss = '500 km';  ls = 6     ! 10deg x 10deg
+    endif
+    iinc = km;  if (km >= 50) iinc = km + km/5;  kinc = iinc
+    if ((km==2) .or. (km==10) .or. (km==20) .or. (km==100))   &
+      kinc = iinc + iinc/2
+    dscl = float(km)/ccm
+  endif
 
   kcgl = 0;  cglf = 1.;  cglr = 0.;  cglu = 0.
   call prompt('  Draw Color-Grading Legend ?')
@@ -274,8 +308,10 @@
     if (mod(kshl/10,10) /= 0) write(6,'(a,$)') '+River'
     if ((kshl/100) /= 0) write(6,'(a,$)') '+PrefB'
     if (klll /= 0) write(6,'(a,$)') '  LatLonLines'
-    if (kscl /= 0) write(6,'(a,f5.1,a,f5.1,a,$)')   &
-                     '  ScaleBar [', sclr, ',', sclu, ' ]'
+    if (kscl /= 0) then
+      write(6,'(a,f5.1,$)') '  ScaleBar [', sclr
+      write(6,'(a,f5.1,a,$)') ',', sclu, ' ]'
+    endif
     write(6,'(a)')
   endif
   if (klbl /= 0) write(6,'(a,a)') '      Identifier : ', slbl
@@ -445,9 +481,8 @@
 
   if (kscl /= 0) then
     call premsg('--- Drawing Scale-Bar')
-    write(s6,'(i2,a2)') km, 'km'
     call lstyle('TB ', 0.7, 0., 0, -999)
-    call ptext(s6, 4, sclr+dscl/2., sclu+0.5, 2)
+    call ptext(ss, ls, sclr+dscl/2., sclu+0.5, 2)
     call newpen(2)
     call plot(sclr,      sclu+0.1, 3)
     call plot(sclr+dscl, sclu+0.1, 2)
@@ -524,8 +559,8 @@
     call lstyle('CFN', cglf*0.48, 0., 0, -999)
     do i=-10,10
       y = y + cglf
-      write(s6,'(i6)') mval+istp*2*i
-      call ptext(s6, 6, x-cglf*0.06, y-cglf*0.12, 1)
+      write(ss,'(i6)') mval+istp*2*i
+      call ptext(ss, 6, x-cglf*0.06, y-cglf*0.12, 1)
     enddo
   endif
 
@@ -641,8 +676,10 @@
       if (mod(kshl/10,10) /= 0) write(99,'(a,$)') '+River'
       if ((kshl/100) /= 0) write(99,'(a,$)') '+PrefB'
       if (klll /= 0) write(99,'(a,$)') '  LatLonLines'
-      if (kscl /= 0) write(99,'(a,f5.1,a,f5.1,a,$)')   &
-                       '  ScaleBar [', sclr, ',', sclu, ' ]'
+      if (kscl /= 0) then
+        write(99,'(a,f5.1,$)') '  ScaleBar [', sclr
+        write(99,'(a,f5.1,a,$)') ',', sclu, ' ]'
+      endif
       write(99,'(a)')
     endif
     if (klbl /= 0) write(99,'(a,a)') '      Identifier : ', slbl
diff -u ORG/gdmp/xplmapcs.f90 gdmp/xplmapcs.f90
--- ORG/gdmp/xplmapcs.f90	2017-12-23 18:00:00.000000000 +0900
+++ gdmp/xplmapcs.f90	2019-02-09 23:00:00.000000000 +0900
@@ -10,12 +10,12 @@
   character(LBUF) :: sbf
   character(80) :: wdr, flog, fnin, fnobj, fncap, fnam, buf
   character(72) :: out;  character(40) :: slbl;  character(20) :: sdtm
-  character(10) :: cunit;  character(8) :: area;  character(6) :: s6
+  character(10) :: cunit;  character(8) :: area;  character(6) :: ss
   character(4) :: sht;  character(3) :: fnt;  character(1) :: yn
   integer :: ldr, nseq, ns, n, i, j, k, kpolyg, m, nct, IER
   integer :: nc, ncc, mc, iorg, korg, ispa, ispb
   integer :: ixs, iys, mszx, mszy, nmx, nmy
-  integer :: istep, istp, km, iinc, kinc, kscl, klll, kshl, klbl
+  integer :: istep, istp, km, ls, iinc, kinc, kscl, klll, kshl, klbl
   integer :: ibcol, itcol, idf, isf, itf, kdf, ksf, ktf, ksp, mark
   integer :: kcgl, mval, nras
   real :: vnul, dmy, xs, ys, gsum, gmin, gmax, szx, szy, swd, shi
@@ -189,21 +189,55 @@
   call premsg(out)
 
   ccm = fscl/100000.
-  km = nint(fscl)/25000
-  if (km < 1) km = 1
-  if ((km > 2) .and. (km < 5)) km = 2
-  if ((km > 5) .and. (km < 10)) km = 5
-  if ((km > 10) .and. (km < 20)) km = 10
-  if ((km > 20) .and. (km < 50)) km = 20
-  if ((km >= 50) .and. (km < 120)) km = 60
-  if ((km > 120) .and. (km < 300)) km = 120
-  if ((km > 300) .and. (km < 600)) km = 300
-  if (km > 600) km = 600
-  iinc = km
-  kinc = km + km/2
-  if (km > 50) km = 50
-  if ((km == 5) .or. (km == 50)) kinc = iinc
-  dscl = float(km)/ccm
+  if (fscl < 25000.) then               !ScaleBar (km [m])
+    km = nint(fscl)/25
+    if (km < 2) then
+      km = 1;  ss = '1 m';  ls = 3
+    else if (km < 5) then
+      km = 2;  ss = '2 m';  ls = 3
+    else if (km < 10) then
+      km = 5;  ss = '5 m';  ls = 3
+    else if (km < 20) then
+      km = 10;  ss = '10 m';  ls = 4
+    else if (km < 50) then
+      km = 20;  ss = '20 m';  ls = 4
+    else if (km < 100) then
+      km = 50;  ss = '50 m';  ls = 4
+    else if (km < 200) then
+      km = 100;  ss = '100 m';  ls = 5
+    else if (km < 500) then
+      km = 200;  ss = '200 m';  ls = 5
+    else
+      km = 500;  ss = '500 m';  ls = 5
+    endif
+      iinc = 1;  kinc = 1               ![LatLonIntv]: 1min x 1min
+    dscl = float(km*100) / fscl
+  else                                  !ScaleBar (km [km])
+    km = nint(fscl)/25000
+    if (km < 2) then
+      km = 1;  ss = '1 km';  ls = 4     ![LatLonIntv]: 1min x 1min
+    else if (km < 5) then
+      km = 2;  ss = '2 km';  ls = 4         !  2min x 3min
+    else if (km < 10) then
+      km = 5;  ss = '5 km';  ls = 4         !  5min x 5min
+    else if (km < 20) then
+      km = 10;  ss = '10 km';  ls = 5       ! 10min x 15min
+    else if (km < 50) then
+      km = 20;  ss = '20 km';  ls = 5       ! 20min x 30min
+    else if (km < 100) then
+      km = 50;  ss = '50 km';  ls = 5       !  1deg x 1deg
+    else if (km < 200) then
+      km = 100;  ss = '100 km';  ls = 6     !  2deg x 3deg
+    else if (km < 500) then
+      km = 200;  ss = '200 km';  ls = 6     !  5deg x 5deg
+    else
+      km = 500;  ss = '500 km';  ls = 6     ! 10deg x 10deg
+    endif
+    iinc = km;  if (km >= 50) iinc = km + km/5;  kinc = iinc
+    if ((km==2) .or. (km==10) .or. (km==20) .or. (km==100))   &
+      kinc = iinc + iinc/2
+    dscl = float(km)/ccm
+  endif
 
   kcgl = 0;  cglf = 1.;  cglr = 0.;  cglu = 0.
   call prompt('  Draw Color-Shading Legend ?')
@@ -288,8 +322,10 @@
     if (mod(kshl/10,10) /= 0) write(6,'(a,$)') '+River'
     if ((kshl/100) /= 0) write(6,'(a,$)') '+PrefB'
     if (klll /= 0) write(6,'(a,$)') '  LatLonLines'
-    if (kscl /= 0) write(6,'(a,f5.1,a,f5.1,a,$)')   &
-                     '  ScaleBar [', sclr, ',', sclu, ' ]'
+    if (kscl /= 0) then
+      write(6,'(a,f5.1,$)') '  ScaleBar [', sclr
+      write(6,'(a,f5.1,a,$)') ',', sclu, ' ]'
+    endif
     write(6,'(a)')
   endif
   if (klbl /= 0) write(6,'(a,a)') '      Identifier : ', slbl
@@ -500,9 +536,8 @@
 
   if (kscl /= 0) then
     call premsg('--- Drawing Scale-Bar')
-    write(s6,'(i2,a2)') km, 'km'
     call lstyle('TB ', 0.7, 0., 0, -999)
-    call ptext(s6, 4, sclr+dscl/2., sclu+0.5, 2)
+    call ptext(ss, ls, sclr+dscl/2., sclu+0.5, 2)
     call newpen(2)
     call plot(sclr,      sclu+0.1, 3)
     call plot(sclr+dscl, sclu+0.1, 2)
@@ -578,8 +613,8 @@
     call lstyle('CFN', cglf*0.48, 0., 0, -999)
     do i=-10,10
       y = y + cglf
-      write(s6,'(i6)') mval+istp*2*i
-      call ptext(s6, 6, x-cglf*0.06, y-cglf*0.12, 1)
+      write(ss,'(i6)') mval+istp*2*i
+      call ptext(ss, 6, x-cglf*0.06, y-cglf*0.12, 1)
     enddo
   endif
 
@@ -698,8 +733,10 @@
       if (mod(kshl/10,10) /= 0) write(99,'(a,$)') '+River'
       if ((kshl/100) /= 0) write(99,'(a,$)') '+PrefB'
       if (klll /= 0) write(99,'(a,$)') '  LatLonLines'
-      if (kscl /= 0) write(99,'(a,f5.1,a,f5.1,a,$)')   &
-                       '  ScaleBar [', sclr, ',', sclu, ' ]'
+      if (kscl /= 0) then
+        write(99,'(a,f5.1,$)') '  ScaleBar [', sclr
+        write(99,'(a,f5.1,a,$)') ',', sclu, ' ]'
+      endif
       write(99,'(a)')
     endif
     if (klbl /= 0) write(99,'(a,a)') '      Identifier : ', slbl
