Skip to content

A collection of algorithms I use for the analysis of geospatial data. Written in C, wrapped in Python.

License

Notifications You must be signed in to change notification settings

nathanrooy/spatial-analysis

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

41 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

spatial-analysis

ci GitHub license codecov

Python scripts I use for the analysis of spatial data

Installation

You can either download/clone this repo and use as is, or you can pip install it with the following command:

pip install git+https://github.com/nathanrooy/spatial-analysis

Usage

Haversine

Calculate the distance between two longitude/latitude pairs using the Haversine formula. For more information on the math/implementation details, see this blog post [here].

>>> from spatial import haversine
>>> p1 = [-84.4941318, 39.113223]     # p1=[longitude_1, latitude_1]
>>> p2 = [-81.4061265, 41.250386]     # p2=[longitude_2, latitude_2]
>>> haversine(p1, p2)                 # meters (default)
353922.9402484654

By default, the distance returned is in meters (m), however additional units can be specified as follows:

>>> haversine(p1, p2, units='km')  # kilometers
353.9229402484654
>>> haversine(p1, p2, units='mi')  # miles
219.9174513051292
>>> haversine(p1, p2, units='nm')  # nautical miles
191.10309948621241
>>> haversine(p1, p2, units='yd')  # yards
387054.83402915805
>>> haversine(p1, p2, units='ft')  # feet
1161164.1428910822
>>> haversine(p1, p2, units='m')   # meters
353922.9402484654

Vincenty Inverse

If more accuracy is needed than what the Haversine formula can provide, a good option is Vincenty's Inverse formulae. For more information on the math/implementation details, see this blog post [here].

>>> from spatial import vincenty_inverse as vi
>>> p1 = [-84.4941318, 39.113223]     # p1=[longitude_1, latitude_1]
>>> p2 = [-81.4061265, 41.250386]     # p2=[longitude_2, latitude_2]
>>> vi(p1, p2)                        # meters (default)
354188.01859971555

Just like the haversine method, vincenty_inverse supports meters,kilometers,miles,nautical miles,yards, and feet as seen below:

>>> vi(p1, p2, units='km')  # kilometers
354.1880185997156
>>> vi(p1, p2, units='mi')  # miles
220.08216330532386
>>> vi(p1, p2, units='nm')  # nautical miles
191.24623034541875
>>> vi(p1, p2, units='yd')  # yards
387344.7272391767
>>> vi(p1, p2, units='ft')  # feet
1162033.8222521099
>>> vi(p1, p2, units='m')   # meters
354188.01859971555

Since Vincenty's inverse formulae is an iterative approach, it employs two methods for stopping. The first is to simply specify a maximum number of iterations using maxIter as seen below:

>>> vi(p1, p2, maxIter=500)

The default value for maxIter is 250 iterations. The second stopping method is specified using tol. When the iteration-to-iteration difference in distance residual drops below the value specified by tol, the iteration loop terminates. By default, this value is 1E-12.

>>> vi(p1, p2, tol=1E-10)

When using tol as the primary stopping criteria, make sure to increase maxIter to a sufficiently high level so as to not force an early exit.

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy