Description
Bidirectional UTM-WGS84 converter for golang. It's port from UTM python version by Tobias Bieniek
UTM alternatives and similar packages
Based on the "GIS" category.
Alternatively, view UTM alternatives based on common mentions on social networks and blogs.
CodeRabbit: AI Code Reviews for Developers

Do you think we are missing an alternative of UTM or a related project?
Popular Comparisons
README
UTM
Bidirectional UTM-WGS84 converter for golang. It use logic from UTM python version by Tobias Bieniek
Usage
go get github.com/im7mortal/UTM
Convert a latitude, longitude into an UTM coordinate
easting, northing, zoneNumber, zoneLetter, err := UTM.FromLatLon(40.71435, -74.00597, false)
Convert an UTM coordinate into a latitude, longitude.
latitude, longitude, err := UTM.ToLatLon(377486, 6296562, 30, "V")
Since the zone letter is not strictly needed for the conversion you may also
the northern
parameter instead, which is a named parameter and can be set
to either true
or false
. In this case you should define fields clearly(!).
You can't set ZoneLetter or northern both.
latitude, longitude, err := UTM.ToLatLon(377486, 6296562, 30, "", false)
The UTM coordinate system is explained on this Wikipedia page
Speed
Benchmark | Amount of iterations | Average speed |
---|---|---|
ToLatLon | 10000000 | 123 ns/op |
ToLatLonWithNorthern | 10000000 | 121 ns/op |
FromLatLon | 20000000 | 80.6 ns/op |
go test -bench=.
Full example
package main
import (
"github.com/im7mortal/UTM"
"fmt"
)
func main() {
easting, northing, zoneNumber, zoneLetter, err := UTM.FromLatLon(40.71435, -74.00597, false)
if err != nil {
panic(err.Error())
}
fmt.Println(
fmt.Sprintf(
"Easting: %d; Northing: %d; ZoneNumber: %d; ZoneLetter: %s;",
easting,
northing,
zoneNumber,
zoneLetter,
))
easting, northing, zoneNumber, zoneLetter, err = UTM.FromLatLon(40.71435, -74.00597, true)
if err != nil {
panic(err.Error())
}
fmt.Println(
fmt.Sprintf(
"Easting: %d; Northing: %d; ZoneNumber: %d; ZoneLetter: %s;",
easting,
northing,
zoneNumber,
zoneLetter,
))
latitude, longitude, err := UTM.ToLatLon(377486, 6296562, 30, "", true)
fmt.Println(fmt.Sprintf("Latitude: %.5f; Longitude: %.5f;", latitude, longitude))
latitude, longitude, err = UTM.ToLatLon(377486, 6296562, 30, "V")
fmt.Println(fmt.Sprintf("Latitude: %.5f; Longitude: %.5f;", latitude, longitude))
}
Authors
- Petr Lozhkin [email protected]