Skip to content

UTM zones in GMT Documentation are actually MGRS zones + associated confusion #8623

Open
@bwwjohnson

Description

@bwwjohnson

This is all pretty low priority and it's a bit extreme to call them bugs, putting this here as a record and for people like me who got confused. May try to do some of the Doc updating myself if I can figure out how.

Suggested fixes (the tldr)

  • Update Documentation to add "MGRS" subheading and put current UTM figure in there, making clear those are MGRS latitude codes
  • Update Documentation to explicitly state that a "+" is needed to indicate "UTM north of equator"
  • Adding a figure from PROJ to replace current UTM Figure
  • If EPSG specifications are allowed, document how to use them, as this is useful when working with this data.

--- I can't do the below ----

  • Add routines to catch people not adding + or - when specifying UTM projection without latitude code: i.e. -Ju34/1:xxxxx and throw an error along the lines of ERROR: UTM projection insufficiently specified - did you forget to add a latitude code or +/-? because at the moment the error message implies the -R value is wrong.
  • Adding routines to catch when people are using EPSG codes wrong for UTM (if this is not supported then a routine to say "this is not supported").

Description of the problems in detail

I have had a few related issues with how UTM coordinates get handled in GMT. I'm happy to handle some of the documentation changes myself if I can, but recording them all here as an issue so it's formalised.

GMT documentation on UTM refers to latitude zones that don't appear in GIS software such as QGIS or packages such as PROJ, or in the EPSG system. It turns out these latitude zones are a feature in the US Army's MGRS grid system, so not really a UTM feature. It might be good to make this clear because UTM zones are split into north (N) and south (S) of the equator in other GIS software, and confusingly MGRS has those letters as latitude zones, but both are north of the equator! Modifying the documentation to point out this difference will save a lot of confusion for newer users. Good article on the difference between UTM and MGRS here.

ISSUE 1

In the GMT documentation on UTM it says

UTM zone (A, B, 1–60, Y, Z). Use negative values for numerical zones in the southern hemisphere or append the latitude modifiers (C–H, J–N, P–X) to specify an exact UTM grid zone.

and

Furthermore, each zone is divided into latitude bands but these are not needed to specify the projection for most cases

This only works in the north if you use a "+" (-Ju+31/1:xxxxx) if you leave it blank (-Ju31/1:xxxx) and assume that counts as a "positive number" you get thrown a misleading -R parsing error:

coast [ERROR]: UTM projection insufficiently specified to auto-determine geographic region
coast [ERROR]: Option -R parsing failure. Correct syntax:
....
....
coast [ERROR]: Offending option -R353932.665723/429763.511095/5618692.59768/5692923.34264+ue

I suggest adding a line in the documentation to explicitly say "you need a plus when not specifying a MGRS latitude zone north of the equator".

ISSUE 2

If using data projected in EPSG:32631 (UTM 31N) you get some weird effects
-Ju31(N-Z) -- correct for all zone specifications
-Ju31(A-M) -- incorrect for all zone specifications (thinks you're in the southern hemisphere)

This is probably not a priority because if someone just looks at the chart and uses a MGRS zone that is approximately right, then it works! But it is confusing.

I suggest updating documentation to state the difference between UTM and MGRS and that MGRS codes have nothing to do with UTM as understood by most GIS software.

ISSUE 3

Specifying your projection using the EPSG code you projected it into doesn't work, but it's difficult to tell if this is because EPSG codes are not supported, or if the -R argument is wrong:

Using:
-J"EPSG:32631/1:650000"

Results in a similar misleading -R parsing error for Issue 1 (you get a similar error if you try to do it with -R${gridfile} like in Example 28)

coast [ERROR]: UTM projection insufficiently specified to auto-determine geographic region
coast [ERROR]: Option -R parsing failure. Correct syntax:
...
...
coast [ERROR]: Offending option -R353932.665723/429763.511095/5618692.59768/5692923.34264+ue

I suggest routines that either catch people using EPSG codes and telling them it's not allowed, or updating documentation to reflect how they actually work, because I don't understand how this is insufficiently specified.

Code to replicate these issues:

Here is some code that replicates these issues, with a small DEM attached, projected into EPSG:32631 (UTM 31N)
test_dem.zip



#!/bin/bash

# gmt version 6.4.0

file='bash-gmt-utm-test'

bounds="-R353932.665723/429763.511095/5618692.59768/5692923.34264+ue"


gmt grdconvert test_dem1.tif -Gtest_dem.grd
grid=test_dem.grd
gmt begin $file

    gmt grdimage $grid -Jx1:650000 
    gmt basemap $bounds -Jx1:650000 -B20000g20000+u"@:8:m@::" -BesNE --FONT_ANNOT_PRIMARY=10p 	--MAP_GRID_CROSS_SIZE_PRIMARY=0.25c --FONT_LABEL=10p
    
    # "correct" MGRS ZONE -- plots correct frame
    gmt coast  $bounds -Ju31U/1:650000 -Df -B -Ia -W
    
    # "incorrect" MGRS ZONES (above the equator) -- plots correct frame
    gmt coast  $bounds -Ju31S/1:650000 -Df -B -Ia -W
    gmt coast $bounds -J"EPSG:32631/1:650000" -Df -B -Ia -W
    
    # "incorrect" MGRS ZONE (below the equator) -- plots incorrect frame
    gmt coast  $bounds -Ju31D/1:650000 -Df -B -Ia -W
    
    # UTM without any latitude zone -- throws a -R parsing error
    gmt coast  $bounds -Ju31/1:650000 -Df -B -Ia -W
    
    # UTM specified using the EPSG code
    gmt coast $bounds -J"EPSG:32631/1:650000" -Df -B -Ia -W

    # Region specified using grid
    gmt coast -R$grid -J"EPSG:32631/1:650000" -Df -B -Ia -W

gmt end show

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingdocumentationImprove documentation

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions