Thanks to visit codestin.com
Credit goes to pkg.go.dev

earth

package
v0.0.0-...-522ac1f Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 2, 2025 License: Apache-2.0 Imports: 4 Imported by: 0

Documentation

Overview

Package earth implements functions for working with the planet Earth modeled as a sphere.

Index

Examples

Constants

View Source
const (
	// Radius is the Earth's mean radius, which is the radius of the
	// equivalent sphere with the same surface area. According to NASA,
	// this value is 6371.01 +/- 0.02 km. The equatorial radius is 6378.136
	// km, and the polar radius is 6356.752 km. They differ by one part in
	// 298.257.
	//
	// Reference: http://ssd.jpl.nasa.gov/phys_props_earth.html, which
	// quotes Yoder, C.F. 1995. "Astrometric and Geodetic Properties of
	// Earth and the Solar System" in Global Earth Physics, A Handbook of
	// Physical Constants, AGU Reference Shelf 1, American Geophysical
	// Union, Table 2.
	//
	// This value is the same as in s2earth.h and S2Earth.java in order to be
	// able to make consistent conversions across programming languages.
	Radius = 6371.01 * unit.Kilometer

	LowestAltitude = -10898 * unit.Meter

	HighestAltitude = 8848 * unit.Meter
)

Variables

This section is empty.

Functions

func AngleFromLength

func AngleFromLength(d unit.Length) s1.Angle

AngleFromLength returns the angle from a given distance on the spherical earth's surface.

Example
package main

import (
	"fmt"

	"github.com/golang/geo/earth"
	"github.com/google/go-units/unit"
)

func main() {
	length := 500 * unit.Mile
	angle := earth.AngleFromLength(length)
	fmt.Printf("I would walk 500 miles (%.4f rad)", angle.Radians())
}
Output:

I would walk 500 miles (0.1263 rad)

func AreaFromSteradians

func AreaFromSteradians(s float64) unit.Area

AreaFromSteradians returns the area on the spherical Earth's surface covered by s steradians, as returned by Area() methods on s2 geometry types.

Example
package main

import (
	"fmt"

	"github.com/golang/geo/earth"
	"github.com/golang/geo/s2"
)

func main() {
	bermuda := s2.PointFromLatLng(s2.LatLngFromDegrees(32.361457, -64.663495))
	culebra := s2.PointFromLatLng(s2.LatLngFromDegrees(18.311199, -65.300765))
	miami := s2.PointFromLatLng(s2.LatLngFromDegrees(25.802018, -80.269892))
	triangle := s2.PolygonFromLoops(
		[]*s2.Loop{s2.LoopFromPoints([]s2.Point{bermuda, miami, culebra})})
	area := earth.AreaFromSteradians(triangle.Area())
	fmt.Printf("Bermuda Triangle is %.2f square miles", area.SquareMiles())
}
Output:

Bermuda Triangle is 464541.15 square miles

func InitialBearingFromLatLngs

func InitialBearingFromLatLngs(a, b s2.LatLng) s1.Angle

InitialBearingFromLatLngs computes the initial bearing from a to b.

This is the bearing an observer at point a has when facing point b. A bearing of 0 degrees is north, and it increases clockwise (90 degrees is east, etc).

If a == b, a == -b, or a is one of the Earth's poles, the return value is undefined.

Example
package main

import (
	"fmt"

	"github.com/golang/geo/earth"
	"github.com/golang/geo/s2"
)

func main() {
	christchurch := s2.LatLngFromDegrees(-43.491402, 172.522275)
	riogrande := s2.LatLngFromDegrees(-53.777156, -67.734719)
	bearing := earth.InitialBearingFromLatLngs(christchurch, riogrande)
	fmt.Printf("Head southeast (%.2f°)", bearing.Degrees())
}
Output:

Head southeast (146.90°)

func LengthFromAngle

func LengthFromAngle(a s1.Angle) unit.Length

LengthFromAngle returns the distance on the spherical earth's surface from a given angle.

Example
package main

import (
	"fmt"

	"github.com/golang/geo/earth"
	"github.com/golang/geo/s1"
)

func main() {
	angle := 2 * s1.Degree
	length := earth.LengthFromAngle(angle)
	fmt.Printf("2° is %.0f miles", length.Miles())
}
Output:

2° is 138 miles

func LengthFromLatLngs

func LengthFromLatLngs(a, b s2.LatLng) unit.Length

LengthFromLatLngs returns the distance on the spherical earth's surface between two LatLngs.

Example
package main

import (
	"fmt"

	"github.com/golang/geo/earth"
	"github.com/golang/geo/s2"
)

func main() {
	chukchi := s2.LatLngFromDegrees(66.025893, -169.699684)
	seward := s2.LatLngFromDegrees(65.609727, -168.093694)
	length := earth.LengthFromLatLngs(chukchi, seward)
	fmt.Printf("Bering Strait is %.0f feet", length.Feet())
}
Output:

Bering Strait is 283979 feet

func LengthFromPoints

func LengthFromPoints(a, b s2.Point) unit.Length

LengthFromPoints returns the distance between two points on the spherical earth's surface.

Example
package main

import (
	"fmt"
	"math"

	"github.com/golang/geo/earth"
	"github.com/golang/geo/s2"
)

func main() {
	equator := s2.PointFromCoords(1, 0, 0)
	pole := s2.PointFromCoords(0, 1, 0)
	length := earth.LengthFromPoints(equator, pole)
	fmt.Printf("Equator to pole is %.2f km, π/2*Earth radius is %.2f km",
		length.Kilometers(), math.Pi/2*earth.Radius.Kilometers())
}
Output:

Equator to pole is 10007.56 km, π/2*Earth radius is 10007.56 km

func SteradiansFromArea

func SteradiansFromArea(a unit.Area) float64

SteradiansFromArea returns the number of steradians covered by an area on the spherical Earth's surface. The value will be between 0 and 4 * math.Pi if a does not exceed the area of the Earth.

Example
package main

import (
	"fmt"

	"github.com/golang/geo/earth"
	"github.com/golang/geo/s2"
	"github.com/google/go-units/unit"
)

func main() {
	steradians := earth.SteradiansFromArea(unit.SquareCentimeter)
	fmt.Printf("1 square centimeter is %g steradians, close to a level %d cell",
		steradians, s2.AvgAreaMetric.ClosestLevel(steradians))
}
Output:

1 square centimeter is 2.4636750563592804e-18 steradians, close to a level 30 cell

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL