zipcodes

package module
v1.0.0 Latest Latest
Warning

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

Go to latest
Published: Nov 24, 2022 License: MIT Imports: 7 Imported by: 0

README

zipcodes - Zip Code Lookups

A Zipcode lookup package that uses the GeoNames Postal Code dataset from http://www.geonames.org . You can initialize it with a Postal Code dataset downloaded from http://download.geonames.org/export/zip .

Install

Install with

go get github.com/fegoa89/zipcodes
Initialize Struct

Initializes a zipcodes struct. It will throw an error if:

  • The file does not exist / wrong format.
  • Some of the lines contain less that 12 elements (in the readme.txt of each postal code dataset, they define up to 12 elements).
  • Where latitude / longitude value are contains a wrong format (string that can not be converted to float64).
zipcodesDataset, err := zipcodes.New("path/to/my/dataset.txt")
Lookup

Looks for a zipcode inside the map interface we loaded. If the object can not be found by the zipcode, it will return an error. When a object is found, returns its zipcode, place name, administrative name, latitude and longitude:

location, err := zipcodesDataset.Lookup("10395")
DistanceInKm

Returns the line of sight distance between two zipcodes in kilometers:

location, err := zipcodesDataset.DistanceInKm("01945", "03058") // 49.87
DistanceInMiles

Returns the line of sight distance between two zipcodes in miles:

location, err := zipcodesDataset.DistanceInMiles("01945", "03058") // 30.98
DistanceInKmToZipCode

Calculates the distance between a zipcode and a give lat/lon in Kilometers:

location, err := zipcodesDataset.DistanceInKmToZipCode("01945", 51.4267, 13.9333) // 1.11
DistanceInMilToZipCode

Calculates the distance between a zipcode and a give lat/lon in Miles:

location, err := zipcodesDataset.DistanceInMilToZipCode("01945", 51.4267, 13.9333) // 0.69
GetZipcodesWithinKmRadius

Returns a list of zipcodes within the radius of this zipcode in Kilometers:

location, err := zipcodesDataset.GetZipcodesWithinKmRadius("01945", 50) // ["03058"]
GetZipcodesWithinMlRadius

Returns a list of zipcodes within the radius of this zipcode in Miles:

location, err := zipcodesDataset.GetZipcodesWithinMlRadius("01945", 50) // ["03058"]

Documentation

Overview

zipcodes is a package that uses the GeoNames Postal Code dataset from http://www.geonames.org in order to perform zipcode lookup operations

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func DistanceBetweenPoints

func DistanceBetweenPoints(latitude1, longitude1, latitude2, longitude2 float64, radius float64) float64

DistanceBetweenPoints returns the distance between two lat/lon points using the Haversin distance formula.

Types

type ZipCodeLocation

type ZipCodeLocation struct {
	ZipCode   string
	PlaceName string
	AdminName string
	State     string
	Lat       float64
	Lon       float64
}

ZipCodeLocation struct represents each line of the dataset

type Zipcodes

type Zipcodes struct {
	DatasetList map[string]ZipCodeLocation
}

Zipcodes contains the whole list of structs representing the zipcode dataset

func LoadDataset

func LoadDataset(datasetPath string) (Zipcodes, error)

LoadDataset reads and loads the dataset into a map interface

func New

func New(datasetPath string) (*Zipcodes, error)

New loads the dataset that this packages uses and returns a struct that contains the dataset as a map interface

func (*Zipcodes) CalculateDistance

func (zc *Zipcodes) CalculateDistance(zipCodeA string, zipCodeB string, radius float64) (float64, error)

CalculateDistance returns the line of sight distance between two zipcodes in Kilometers

func (*Zipcodes) DistanceInKm

func (zc *Zipcodes) DistanceInKm(zipCodeA string, zipCodeB string) (float64, error)

DistanceInKm returns the line of sight distance between two zipcodes in Kilometers

func (*Zipcodes) DistanceInKmToZipCode

func (zc *Zipcodes) DistanceInKmToZipCode(zipCode string, latitude, longitude float64) (float64, error)

DistanceInKmToZipcode calculates the distance between a zipcode and a give lat/lon in Kilometers

func (*Zipcodes) DistanceInMilToZipCode

func (zc *Zipcodes) DistanceInMilToZipCode(zipCode string, latitude, longitude float64) (float64, error)

DistanceInMilToZipcode calculates the distance between a zipcode and a give lat/lon in Miles

func (*Zipcodes) DistanceInMiles

func (zc *Zipcodes) DistanceInMiles(zipCodeA string, zipCodeB string) (float64, error)

DistanceInMiles returns the line of sight distance between two zipcodes in Miles

func (*Zipcodes) FindZipcodesWithinRadius

func (zc *Zipcodes) FindZipcodesWithinRadius(location *ZipCodeLocation, maxRadius float64, earthRadius float64) []string

FindZipcodesWithinRadius finds zipcodes within a given radius

func (*Zipcodes) GetZipcodesWithinKmRadius

func (zc *Zipcodes) GetZipcodesWithinKmRadius(zipCode string, radius float64) ([]string, error)

GetZipcodesWithinKmRadius get all zipcodes within the radius of this zipcode

func (*Zipcodes) GetZipcodesWithinMlRadius

func (zc *Zipcodes) GetZipcodesWithinMlRadius(zipCode string, radius float64) ([]string, error)

GetZipcodesWithinMlRadius get all zipcodes within the radius of this zipcode

func (*Zipcodes) Lookup

func (zc *Zipcodes) Lookup(zipCode string) (*ZipCodeLocation, error)

Lookup looks for a zipcode inside the map interface

Jump to

Keyboard shortcuts

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