spatstat (version 1.42-2)

nncross.lpp: Nearest Neighbours on a Linear Network

Description

Given two point patterns X and Y on a linear network, finds the nearest neighbour in Y of each point of X using the shortest path in the network.

Usage

## S3 method for class 'lpp':
nncross(X, Y,
          iX=NULL, iY=NULL,
          what = c("dist", "which"),
          ...,
          method="C")

Arguments

X,Y
Point patterns on a linear network (objects of class "lpp"). They must lie on the same linear network.
iX, iY
Optional identifiers, used to determine whether a point in X is identical to a point in Y. See Details.
what
Character string specifying what information should be returned. Either the nearest neighbour distance ("dist"), the identifier of the nearest neighbour ("which"), or both.
...
Ignored.
method
Internal use only.

Value

  • By default (if what=c("dist", "which")) a data frame with two columns:
  • distNearest neighbour distance
  • whichNearest neighbour index in Y
  • If what="dist", a vector of nearest neighbour distances.

    If what="which", a vector of nearest neighbour indices.

Details

Given two point patterns X and Y on the same linear network, this function finds, for each point of X, the nearest point of Y, measuring distance by the shortest path in the network. The distance between these points is also computed.

The return value is a data frame, with rows corresponding to the points of X. The first column gives the nearest neighbour distances (i.e. the ith entry is the distance from the ith point of X to the nearest element of Y). The second column gives the indices of the nearest neighbours (i.e. the ith entry is the index of the nearest element in Y.) If what="dist" then only the vector of distances is returned. If what="which" then only the vector of indices is returned.

Note that this function is not symmetric in X and Y. To find the nearest neighbour in X of each point in Y, use nncross(Y,X).

The arguments iX and iY are used when the two point patterns X and Y have some points in common. In this situation nncross(X, Y) would return some zero distances. To avoid this, attach a unique integer identifier to each point, such that two points are identical if their identifying numbers are equal. Let iX be the vector of identifier values for the points in X, and iY the vector of identifiers for points in Y. Then the code will only compare two points if they have different values of the identifier. See the Examples.

See Also

nndist.lpp for nearest neighbour distances in a single point pattern.

Examples

Run this code
# two different point patterns
  X <- runiflpp(3, simplenet)
  Y <- runiflpp(5, simplenet)
  nn <- nncross(X,Y)
  nn
  plot(simplenet, main="nncross")
  plot(X, add=TRUE, col="red")
  plot(Y, add=TRUE, col="blue")
  XX <- as.ppp(X)
  YY <- as.ppp(Y)
  i <- nn$which
  arrows(XX$x, XX$y, YY[i]$x, YY[i]$y, length=0.15)

  # two patterns with some points in common
  X <- Y[1:2]
  iX <- 1:2
  iY <- 1:5
  nncross(X,Y, iX, iY)

Run the code above in your browser using DataCamp Workspace