Popularity
3.0
Growing
Activity
6.8
-
45
4
8

Description

Bidirectional UTM-WGS84 converter for golang. It's port from UTM python version by Tobias Bieniek

Programming language: Go
License: GNU General Public License v3.0 only
Tags: GIS     Geospatial     Coordinates     Latitude     Longitude    
Latest version: v1.2.2

UTM alternatives and similar packages

Based on the "GIS" category.
Alternatively, view UTM alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of UTM or a related project?

Add another 'GIS' Package

README

Build Status Coverage Status GoDoc

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