On 5 Dec 2018, at 08:23, Alistair Grant <akgrant0710@gmail.com> wrote:
Hi Sven,
On Tue, 4 Dec 2018 at 11:04, Sven Van Caekenberghe <sven@stfx.eu> wrote:
Hi Alistair,
On 4 Dec 2018, at 10:21, Alistair Grant <akgrant0710@gmail.com> wrote:
Hi,
Does anyone know of a library for processing GPS coordinates?
What I'm looking for are things like:
- Parsing from and printing to various string formats (HMS, NESW, decimal) - Distance between two points - etc.
Thanks, Alistair
We've got some elementary stuff based on WGS84 coordinates as points. For example,
T3GeoTools distanceBetween: 5.33732@50.926 and: 5.49705@50.82733. T3GeoTools bearingFrom: 5.33732@50.926 to: 5.49705@50.82733. T3GeoTools destinationFrom: 5.33732@50.926 bearing: 45 distance: 2500. T3GeoTools centroidOf: { 5.48230@50.82249. 5.49523@50.81288. 5.50138@50.82008. 5.50228@50.82595. 5.49265@50.82560. 5.48230@50.82249 }. T3GeoTools is: 5.33732@50.92601 inside: { 5.48230@50.82249. 5.49523@50.81288. 5.50138@50.82008. 5.50228@50.82595. 5.49265@50.82560. 5.48230@50.82249 }.
This is not open source, but it is not rocket science either (just implementations of public algorithms).
Right, I'll probably have a go at this a put it up on github.
It looks like you've chosen to model the coordinates using the Point class rather than creating a Coordinate class. Can you explain why (I don't have a strong preference either way, so am wondering what your thinking is).
It also looks like it is longitude @ latitude. Is that correct? (I guess it lines up with the point y value being vertical, which is latitude. But most written forms put latitude first).
I used the simplest thing that could work, using the mathematically oriented x@y (long@lat) form. From what I am doing, it works just fine. Converting to/from HMS notation is not hard I. Here is an example: distanceBetween: firstPosition and: secondPosition "T3GeoTools distanceBetween: 5.33732@50.926 and: 5.49705@50.82733" | c | c := (firstPosition y degreeSin * secondPosition y degreeSin) + (firstPosition y degreeCos * secondPosition y degreeCos * (secondPosition x degreesToRadians - firstPosition x degreesToRadians) cos). c := c >= 0 ifTrue: [ 1 min: c ] ifFalse: [ -1 max: c ]. ^ c arcCos * 6371000 I would not have anything against a real object, as long as it is mathematically sound and used properly. I think that only WGS84 makes sense as internal representation though - it seems the most common thing anyway.
Thanks! Alistair