Giter VIP home page Giter VIP logo

vincenty's Introduction

Vincenty

DESCRIPTION:

  • Vincenty wrote an algorithm for calculating the bearing and distance between two coordinates on the earth and an algorithm for finding a second coordinate, given a starting coordinate, bearing and destination. The algorithms model the earth as an ellipsoid, using the WGS-84 model. This is the common GPS model for mapping to latitudes and longitudes.

    This is a Ruby implementation of Vincenty's algorithms, and the Vincenty class includes two methods for modeling the earth as a sphere. These were added as a reference for testing the Vincenty algorithm, but could be used on their own.

    The package also makes use of several other classes that may be useful in their own Right. These include class Angle, class Latitude (subclass of Angle), class Longitude (subclass of Angle), class TrackAndBearing and class coordinate (which class Vincenty is a subclass)

    Angle requires extensions to Numeric and String to provide to_radians (to_r) and to_degrees (to_d). String also includes a to_decimal_degrees(), which converts most string forms of Latitude and Longitude to decimal form. These extensions are included in the package in core_extensions.rb. Float has also been extended to change round to have an optional argument specifying the number of decimal places to round to. This is fully compatible with the Float.round, as the default is to round to 0 decimal places.

  • The Vincenty code is based on the wikipedia presentation of the Vincenty algorithm http://en.wikipedia.org/wiki/Vincenty%27s_formulae .

  • The algorithm was modified to include changes I found at http://www.movable-type.co.uk/scripts/latlong-vincenty-direct.html.

  • I also altered the formulae to correctly return the bearing for angles greater than 180.

  • Vincenty's original publication

** T Vincenty, "Direct and Inverse Solutions of Geodesics on the Ellipsoid with application of nested equations", Survey Review, vol XXII no 176, 1975 http://www.ngs.noaa.gov/PUBS_LIB/inverse.pdf

FEATURES/PROBLEMS:

  • None that I yet know of :)

SYNOPSIS:

flindersPeak = Vincenty.new("-37°57′3.72030''", "144°25′29.52440''" ) buninyong = Vincenty.new("-37° 39' 10.15610''", "143° 55' 35.38390''") track_and_bearing = flindersPeak.distanceAndAngle( buninyong ) puts track_and_bearing

#or the reverse destination = flindersPeak.destination(TrackAndDistance.new("306° 52' 5.37"", 54972.271)) puts destination

#Angles is the parent class of Latitude and Longitude Angle.new("-37°01′.125").strf( "The angle is %d°%2m′%2.5s″%N" ) -> "The angle is 37°01′07.50000″S"

REQUIREMENTS:

  • require 'rubygems'

INSTALL:

  • sudo gem install vincenty

LICENSE:

Code unique to this implementation of Vincentys algrithm is distributed under the Ruby License.

Copyright (c) 2009

  1. You may make and give away verbatim copies of the source form of the software without restriction, provided that you duplicate all of the original copyright notices and associated disclaimers.

  2. You may modify your copy of the software in any way, provided that you do at least ONE of the following:

    • place your modifications in the Public Domain or otherwise make them Freely Available, such as by posting said modifications to Usenet or an equivalent medium, or by allowing the author to include your modifications in the software.
    • use the modified software only within your corporation or organization.
    • rename any non-standard executables so the names do not conflict with standard executables, which must also be provided.
    • make other distribution arrangements with the author.
  3. You may distribute the software in object code or executable form, provided that you do at least ONE of the following:

    • distribute the executables and library files of the software, together with instructions (in the manual page or equivalent) on where to get the original distribution.
    • accompany the distribution with the machine-readable source of the software.
    • give non-standard executables non-standard names, with instructions on where to get the original software distribution.
    • make other distribution arrangements with the author.
  4. You may modify and include the part of the software into any other software (possibly commercial). But some files or libraries used by code in this distribution may not written by the author, so that they are not under these terms.

  5. The scripts and library files supplied as input to or produced as output from the software do not automatically fall under the copyright of the software, but belong to whomever generated them, and may be sold commercially, and may be aggregated with this software.

  6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.

vincenty's People

Contributors

rbur004 avatar

Stargazers

 avatar Romuald avatar dash14.ack avatar Yarin Kessler avatar  avatar Toby Privett avatar Bruno Bonamin avatar  avatar Mike Rapadas avatar

Watchers

 avatar James Cloos avatar

Forkers

ianfixes

vincenty's Issues

Float#to_d

Float#to_d is used to convert to decimal, after I include vincenty into my Gemfile, all my AR decimal columns become float instead of BigDecimal.

Is there is a way to rename it or scope the changes?

Float#round always returns float

Another issue with Float class method redefined.
Sass library calls #to_s(16) on the result of f.round. Ruby default Float behaviour is to return int when round is called without args. Since gem's float returns float, this call fails.

Is it possible to limit new Float#round to the scope of the gem?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.