[R-sig-Geo] Verify units of distance between coordinates

Robert J. Hijmans r.hijmans at gmail.com
Sun Aug 31 00:36:35 CEST 2014


library(geosphere)

d <- distCosine(df[, 1:2], df[,3:4])



On Thu, Aug 28, 2014 at 8:02 AM, Roger Bivand <Roger.Bivand at nhh.no> wrote:
> On Thu, 28 Aug 2014, Roger Bivand wrote:
>
>> On Thu, 28 Aug 2014, Sarah Goslee wrote:
>>
>>> On Thu, Aug 28, 2014 at 9:32 AM, Michael Sumner <mdsumner at gmail.com>
>>> wrote:
>>>>
>>>> On Thu, Aug 28, 2014 at 10:50 PM, Sarah Goslee <sarah.goslee at gmail.com>
>>>> wrote:
>>>>>
>>>>> They don't make sense.
>>>>>
>>>>> Best: convert them into a projection where the distances are in meters
>>>>> already, like UTM. Then distances calculated on your new coordinates
>>>>> are in meters.
>>>>
>>>>
>>>> However great circle from lat/lon is arguably the best since you can
>>>> really do get distance along a great circle (on the ellipsoid or the
>>>> sphere). (There are several algorithms, and also other methods for
>>>> e.g. loxodromes, and even other definitions of "straight".)
>>>>
>>>> No projection has the property that any straight line is a great
>>>> circle, and most certainly *not* any of UTM family.
>>>
>>>
>>> True, but as long as your points are reasonably close together,
>>> something like UTM is a very useful approximation. And even great
>>> circle is an approximation. The best answer depends on the data and
>>> the objectives (as always!).
>>
>>
>> The OP didn't say how the distances were computed:
>>
>> library(sp)
>> locs <- SpatialPoints(cbind(Lon = c(29.6000, 29.7333, 30.3887, 30.6667,
>> 30.6833, 30.8667), Lat = c(-4.9000, -4.6000, -5.1280, -1.0667, -2.7500,
>> -3.3833)), proj4string=CRS("+proj=longlat +datum=WGS84") )
>> src <- SpatialPoints(cbind(LonWater = c(29.63333, 29.63333, 30.25000,
>> 30.65000, 30.35444, 30.83278), LatWater = c(-4.31667, -4.31667, -4.76667,
>> -1.35000, -2.46667, -3.57000)),
>> proj4string=CRS("+proj=longlat +datum=WGS84"))
>>
>> plot(locs)
>> plot(src, add=TRUE, col="red")
>>
>> Naively using spDistsN1 appears to replicate the distances the OP got:
>>
>> D0 <- lapply(1:length(locs), function(i) spDistsN1(src, locs[i],
>> longlat=FALSE))
>>
>> which is wrong.
>>
>> D0 <- lapply(1:length(locs), function(i) spDistsN1(src, locs[i],
>> longlat=TRUE))
>
>
> Sorry:
>
>
> D <- lapply(1:length(locs), function(i) spDistsN1(src, locs[i],
>  longlat=TRUE))
>
> of course.
>
>
>>
>> is in km, but the minimum criterion is met by multiple pairs of points:
>>
>> D1 <- lapply(D, function(x) x-min(x))
>> D1
>>
>> so finding out which source is closest still isn't well-defined. To get
>> minimum distances by location:
>>
>> D2 <- sapply(D, min)
>>
>> The spDists* functions use GC distances on a WGS84 ellipsoid, so are
>> closer than a spheroid (many online shortcuts use spheroids), and will be OK
>> if the input coordinates are also WGS84.
>>
>> Hope this helps,
>>
>> Roger
>>
>>>
>>>> Cheers, Mike.
>>>>
>>>>
>>>>>
>>>>> Latitude and longitude don't translate neatly into distances on their
>>>>> own.
>>>>>
>>>>> Second best: find and use a great circle distance function that can
>>>>> determine the correct distances for where those lat/lon coordinates
>>>>> are on the earth's surface. There's been discussion on this list
>>>>> before about calculating distances from geographic coordinates; google
>>>>> should find them.
>>>>>
>>>>> Sarah
>>>>>
>>>>> On Thu, Aug 28, 2014 at 8:44 AM, Justin Michell <jwm302 at gmail.com>
>>>>> wrote:
>>>>>>
>>>>>> Dear geo R group
>>>>>>
>>>>>> I have a data frame like this:
>>>>>>
>>>>>> df <- data.frame(Lon =
>>>>>> c(29.6000,29.7333,30.3887,30.6667,30.6833,30.8667), Lat =
>>>>>> c(-4.9000,-4.6000,-5.1280,-1.0667,-2.7500,-3.3833),
>>>>>>                   LonWater =
>>>>>> c(29.63333,29.63333,30.25000,30.65000,30.35444,30.83278), LatWater =
>>>>>> c(-4.31667,-4.31667,-4.76667,-1.35000,-2.46667,-3.57000), DstClW =
>>>>>> c(0.5842815,0.3004491,0.3870362,0.2837918,0.4340793,0.1897561) )
>>>>>>
>>>>>> At these locations (Lon, Lat pairs) I calculated the shortest distance
>>>>>> to a water source (DstClW) and where that source is (LonWater, LatWater).
>>>>>>
>>>>>> I want to now determine what units DstClW is in, and also verify that
>>>>>> these distances make sense and were calculated correctly.
>>>>>>
>>>>>> Any suggestions as to how this might be done?
>>>>>>
>>>>>> Regards
>>>>>> Justin Michell
>>>>>>
>>>>>>
>>>
>>>
>>>
>>
>>
>
> --
> Roger Bivand
> Department of Economics, Norwegian School of Economics,
> Helleveien 30, N-5045 Bergen, Norway.
> voice: +47 55 95 93 55; fax +47 55 95 91 00
> e-mail: Roger.Bivand at nhh.no
>
> _______________________________________________
> R-sig-Geo mailing list
> R-sig-Geo at r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-sig-geo



More information about the R-sig-Geo mailing list