[R] latitude longitude data

Gabor Grothendieck ggrothendieck at myway.com
Sun Aug 22 21:01:22 CEST 2004


Mikkel Grum <mi2kelgrum <at> yahoo.com> writes:

: 
: Dear R-helpers,
: 
: I get GPS readings with bug counts (bugs meaning
: insects in this case) made along rows in crop fields
: and use these to make maps of bug distribution.  The
: GPS readings are not quite accurate enough for my
: purpose, so since I know what row each reading is made
: in, I adjust the latitudinal coordinate using:
: 
:     grd<-lm(lat~lon+Row,data)
:     data$lat<-predict(grd[,c("lon","Row")])
: 
: which adjusts the latitude pretty well when the rows
: run East-West, but not at all when the rows run
: North-South, and it doesn't adjust the longitude at
: all.
: 
: Is there a better approach I could use to adjust both
: longitude and latitude onto the nearest point in the
: row, whatever the direction of the rows? In other
: words, move the point onto the row in a direction that
: is perpendicular to the row?

If you have the lonlats spaced along the row in a matrix called actual
and the gps lonlats in matrix called gps then its just a matter of finding
the nearest actual row to each gps row.  rdist.earth from fields will do the 
lonlat distance calculation:

require(fields)

# test data
gps <- ozone$lon.lat[seq(3),]
actual <- ozone$lon.lat[-seq(3),]

# use rdist.earth from fields to get distance from each gps to each actual
# and find least
f <- function(i) {
	dst <- rdist.earth(gps[i,,drop=F], actual)
	actual[order(dst)[1],]
}
t(sapply(1:nrow(gps), f))




More information about the R-help mailing list