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
Verify units of distance between coordinates
7 messages · Justin Michell, Sarah Goslee, Michael Sumner +2 more
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. 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
Sarah Goslee http://www.functionaldiversity.org
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. 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
-- Sarah Goslee http://www.functionaldiversity.org
_______________________________________________ R-sig-Geo mailing list R-sig-Geo at r-project.org https://stat.ethz.ch/mailman/listinfo/r-sig-geo
Michael Sumner Software and Database Engineer Australian Antarctic Division Hobart, Australia e-mail: mdsumner at gmail.com
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!).
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
Sarah Goslee http://www.functionaldiversity.org
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))
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
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
2 days later
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