On Thu, Jan 3, 2013 at 9:54 PM, jfeighery <jfeighery at gmail.com> wrote:
Dear all,I am trying to create a matrix of distances between wells and all
nearby ponds that will be used to calculate a contamination risk variable
(the equivalent of Generate Near Table in ArcGIS). The wells locations and
pond polygons were imported from shapefiles as SpatialPointsDataFrame and
SpatialPolygonsDataFrame, respectively. Through searching this forum, I
found solutions that work for two sets of points (e.g. crossdist in
{spatstat}) or two sets of polygons. The function dist2Line {geosphere}
works but appears to only find the distance to the nearest polygon. I am
hoping that there is a way to do this for each polygon without resorting to
writing a function with a for loop. Thanks in advance for any help or
advice!John
I think you want gDistance in package:rgeos. If 'ponds' is a
SpatialPolygonsDataFrame with two ponds in it, and pts is a
SpatialPointsDataFrame with 10 wells in it, then:
> gDistance(ponds,pts,byid=TRUE)
2 1
1 1.7668458 0.0000000
2 2.2301705 0.0000000
3 2.5487968 0.1181480
4 0.0000000 2.0410047
5 2.6075170 0.0000000
6 1.3145692 0.4563602
7 1.4300834 0.1179114
8 0.0000000 1.0461675
9 0.7633464 0.5052239
10 2.2691795 0.0000000
is all the well-pond nearest distances. Note the zeroes where the well
is inside the pond. I'm not sure what the distance will be if the well
is on an island in a pond...
Once you've got that then its a simple matter to find the nearest. If
you have a massive dataset and really only want to find the nearest
then this procedure might be slow and we'll have to think of something
else...
Barry