> On 5 Dec 2018, at 08:23, Alistair Grant <akgrant0...@gmail.com> wrote:
>
> Hi Sven,
>
> On Tue, 4 Dec 2018 at 11:04, Sven Van Caekenberghe <s...@stfx.eu> wrote:
>>
>> Hi Alistair,
>>
>>> On 4 Dec 2018, at 10:21, Alistair Grant <akgrant0...@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