File Exchange

image thumbnail

wgs2utm (version 2)

version (3.1 KB) by alexandre schimel
Convert WGS84 coordinates (Latitude, Longitude) into UTM coordinates (northing, easting).


Updated 01 Feb 2012

View Version History

View License

function similar to Rafael Palacios's deg2utm.m but using formulas from "Map Projections - A Working Manual" by J.P. Snyder (1987) for better precision in Southern hemisphere.

This second version allows forcing UTM zone and hemisphere in input, but can still be used like the previous version in which the function finds the appropriate zone.

Lat=[48.866667; 34.05; -36.85 ];
Lon=[2.333056; -118.25; 174.783333];
% data zones:
[x1,y1,utmzone1,utmhemi1] = wgs2utm(Lat,Lon)
% forced zone:
[x2,y2,utmzone2,utmhemi2] = wgs2utm(Lat,Lon,60,'S')

Cite As

alexandre schimel (2021). wgs2utm (version 2) (, MATLAB Central File Exchange. Retrieved .

Comments and Ratings (20)

John McDowell

alexandre schimel

Hi and sorry for the late answers. I don't use this account, nor support this function anymore.

I'm afraid I didn't write a companion function to turn transverse Mercator coordinates into lat/long as I did not need one. However, equations should be found in "Map Projections - A Working Manual" by J.P. Snyder (1987).

For all other questions, feel free to modify the function as per your needs. Exchanging the input orders, or modifying the format of the output UTM zone should be easy.

Otherwise, try the more recently developed


hello, what if my UTM data points are located in two different zone? how to convert this data set containing two different UTM zones into LONG LAT? thanks

Mahsa khodaee

Ahmad Pishehvari

Uilke Stelwagen

Two comments:
1) Where is the companion function utm2wgs?
2) The utmzone is numeric whereas the utmzone from for example deg2utm is a number plus a character?


Works great, and gives better results in southern hemisphere than others on File Exchange. I guess the only thing I would have done differently would be the order of inputs - since the output is X then Y, I would have made the inputs Longitude then Latitude, but obviously not a big deal. Thanks for contributing


Sorry, really simple question. I need this code to work but i`m not very good in matlab.
Could you please explain how to put the inputs?
Sorry for the question


Thank you very much. This function works perfectly for me. I'm working on geolocation of buses in London and the function has no problems and is helping me a lot in my research.



really thanks.

M Sohrabinia

Hey again, had been working on this issue since I wrote the comment, it appears Matlab's built-in functions need more tweaking (I checked this with ArcGIS too), your function works accuratesly with sub-meter precision. Please ignore my previous comment.

M Sohrabinia

Hi and thanks for your code,
I just did a quick comparison between your code and Matlab's built-in functions to calculate UTM values based on LatLon, here are the results:
mstruct = defaultm('utm');,172.5);
mstruct = defaultm(mstruct);
[x,y] = mfwdtran(mstruct,-43.5,172.5)
Result: 621272.828768645 5182478.29916538
Your code:
[x,y,zone1,utmhemi1] = wgs2utm(-43.5, 172.5)
Result: 621267.241003134 5182565.80639284
(there is almost 100 meter diff in y).
By the way, you have used utmzone as variable name in the output which conflicts with Matlab's built-in function name, it took me a while why I am getting weird errors after trying your function (output from your function stops utmzone function from working). Good luck


alexandre schimel

FYI. I just submitted a new version of the wgs2utm allowing to force UTM zone and hemisphere in input, as per requests.

You can still use it like the old one though, ie with no forcing and let the function choose the appropriate zone. The new function should be compatible with any code using the old version. Check function's help for more info on use.

Andrew McGillis

Thanks for the tip - I will use that when needed.

alexandre schimel

Comment about forcing output UTM zone.

Two parameters change for each UTM zone: the reference longitude and the false northing. In the current code, these values are caculated from the input data at lines 63 and 68:
Lon0 = floor(Lon./6).*6+3; % reference longitude in degrees
FN = (Lat < 0).*10000000; % false northing

In order to force the output UTM zone, one can force these two parameters to their desired value. If you know your reference longitude, just replace Lon0 by this value. If you know the zone number ii, replace Lon0 by 6*ii-183

Set FN to 0 for northern hemisphere, or 10000000 for southern hemisphere.

Alexandre Schimel

Thanks Andrew, I understand your concern. I have been working on data from an area in between two zones and my code didn't handle this issue.

I completely modified my original code to be able to force the UTM zone but also:
- to allow converting to local Transverse Mercator projections (NZ projections are preset)
- to compute grid convergence (difference between true north and grid north, absolutely needed information when dealing with orientation data)

I suggest you move to local projections if possible. If your data span on several UTM zones, your deformations will be huge.

I can provide you with the new function if you mail me directly. I am not sure of putting it online here for the moment. Same comment for everyone else who is interested.

Andrew McGillis

Very good, thank you. Any chance to force output into a single zone? I work with models that cannot handle multiple UTM zones, yet sometimes my datasets span multiple zones, so it would be nice to re-project everything to a specified zone (recognizing that this will reduce the accuracy for those data points outside of the correct zone). Very nice regardless. Many thanks!

Alexandre Schimel

Users, can you please write reviews to assess the transformation quality in your areas of interest ? thanks

MATLAB Release Compatibility
Created with R2011b
Compatible with any release
Platform Compatibility
Windows macOS Linux

Inspired by: deg2utm

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!