[R] Midpoint between coordinates
David Winsemius
dwinsemius at comcast.net
Fri Jul 23 15:12:11 CEST 2010
On Jul 23, 2010, at 8:58 AM, Mafalda Viana wrote:
> The arithmetic mean was my first approach and to nearby points it
> doesn't make much difference. However, when the distance between the 2
> points gets bigger this is no longer accurate enough. So yes, I was
> thinking on spherical geometry, midpoint considering the great circle
> distance or similar.
Are you "up" for some searching?
require(sos)
> ???"distance spherical"
found 65 matches; retrieving 4 pages
2 3 4
On first page of hits the geosphere package says it handles spherical
geometry. Perhaps the gcIntermediate function:
gcIntermediate {geosphere}
Get intermediate points on a Great Circle inbetween the two points
used to define the Great Circle
Usage
gcIntermediate(p1, p2, n=50)
Arguments
p1 Longitude/latitude of a single point, in degrees; can be a vector
of two numbers, a matrix of 2 columns (first one is longitude, second
is latitude) or a SpatialPoints* object
p2 As above
n The requested number of points on the Great Circle
---
There is also a geospatial Task View and SIG mailing list that is very
active.
--
David
>
> Thank you
> Mafalda
>
> On 23 July 2010 13:30, David Winsemius <dwinsemius at comcast.net> wrote:
>>
>> On Jul 23, 2010, at 7:13 AM, Mafalda Viana wrote:
>>
>>> Dear R users,
>>>
>>> I need to find the coordinates for the point (midpoint) located half
>>> way between two pairs of coordinates (lon1,lat1 and lon2,lat2)
>>> assuming a straight line between them. What would be the best way? I
>>> tried to find an answer in the help archives but without success. I
>>> would greatly appreciate any help.
>>>
>>> df<- data.frame(lon1=c(-4.568,-4.3980), lat1=c(59.235,56.369),
>>> lon2=c(-5.123,-4.698), lat2=c(60.258,59.197) )
>>
>> Wouldn't that just be the arithmetic average of the values? Or to
>> you have
>> some need for a more accurate calculation based on spherical
>> geometry? Or
>> some thing that will handle some other coordinate weirdness?
>>
>>> df$midlong <- apply(df[,c(1,3)], 1, mean)
>>> df$midlat <- apply(df[,c(2,4)], 1, mean)
>>> df
>> lon1 lat1 lon2 lat2 midlong midlat
>> 1 -4.568 59.235 -5.123 60.258 -4.8455 59.7465
>> 2 -4.398 56.369 -4.698 59.197 -4.5480 57.7830
>>>
>> --
>>
>> David Winsemius, MD
>> West Hartford, CT
>>
>>
>>
>
>
>
> --
> Mafalda Viana
> Department of Zoology
> School of Natural Sciences
> Trinity College Dublin
> Dublin 2
> Ireland
>
> (+353) (0) 872829850
>
> vianam at tcd.ie
>
> http://www.tcd.ie/Zoology/research/research/theoretical
David Winsemius, MD
West Hartford, CT
More information about the R-help
mailing list