How can I convert Military Grid Reference System (MGRS) to lat/long or UTM?
I had to write code to convert MGRS to LL last year, however I am unable to post the code. What I can post though are the two main resources I utilized while writing the code:
US Military Grid Reference System description, published by NGA and the related Appendix and an Online MGRS to LL Converter to check your results as you are coding.
edit: There is also GeographicLib, an open source library that has code for MGRS conversions, and is licensed under MIT. You'll need to look at the GeographicLib::MGRS class, and the MGRS.hpp and MGRS.cpp files if you need to look at the code.
edit #2: If you can elaborate more on whether you are looking for code, a library, or a utility to convert one or more coordinates, you'll get better answers.
I'm sorry -- I should probably add that the lib is, more accurately, USNG, which is apparently very closely related to MGRS but not exactly the same.
When referenced to NAD 83 or WGS 84, USNG values are equivalent to Military Grid Reference System (MGRS) values. The difference in these two systems is that USNG referenced to NAD27 uses the MGRS WGS 84 scheme of 100,000m Square Identifications...
It looks like OpenLayers lets you do it as well -- example of it in a production environment (MIT-flavor license) here.
GDAL has a silent implementation of MGRS.
You can find the source code here:
You could also use Python to convert MGRS to lat/long and vice versa. Using the library
pyproj you can convert a given MGRS tile (say, WGS84) as follows:
import pyproj geod = pyproj.Geod(ellps='WGS84') lat_min, lon_min = mgrs_object.toLatLon(mgrs_id) x_var = geod.line_length([lon_min, lon_min], [lat_min, lat_min + 1]) y_var = geod.line_length([lon_min, lon_min + 1], [lat_min, lat_min]) lat_max = lat_min + mgrs_tile_edge_size / x_var lon_max = lon_min + mgrs_tile_edge_size / y_var
lon_max then give the corners of the tile in lon/lat coordinates.
For more background information you can have a look at this blog post.