joinPolys {PBSmapping} | R Documentation |
Joins one or two PolySets using a logic operation.
joinPolys (polysA, polysB = NULL, operation = "INT", maxVert = 1e+05)
polysA |
PolySet to join. |
polysB |
optional second PolySet with which to join. |
operation |
one of "DIFF" , "INT" , "UNION" ,
or "XOR" , representing difference, intersection, union, and
exclusive-or, respectively. |
maxVert |
estimated maximum number of vertices in the output PolySet. |
This function interfaces with the General Polygon Clipper library (http://www.cs.man.ac.uk/aig/staff/alan/software/) produced by Alan Murta at the University of Manchester. Consequently, we adopt some of his terminology in the details below.
Murta (2004) defines a generic polygon (or polygon set)
as zero or more disjoint boundaries of arbitrary configuration. He
relates a boundary to a contour, where each may be convex,
concave or self-intersecting. In a PolySet, the polygons associated
with each unique PID
loosely correspond to a generic polygon,
as they can represent both inner and outer boundaries. Our use of the
term generic polygon includes the restrictions imposed by a
PolySet. For example, the polygons for a given PID
cannot
be arranged arbitrarily.
If polysB
is NULL
, this function sequentially applies
the operation
between the generic polygons in polysA
.
For example, suppose polysA
contains three generic polygons (A,
B, C). The function outputs the PolySet containing ((A op B)
op C).
If polysB
is not NULL
, this function applies
operation
between each generic polygon in polysA
and
each one in polysB
. For example, suppose polysA
contains two generic polygons (A, B) and polysB
contains two
generic polygons (C, D). The function's output is the concatenation
of A op C, B op C, A op D, B op D, with
PID
s 1 to 4, respectively. Generally there are n
times m comparisons, where n = number of polygons in
polysA
and m = number of polygons in polysB
. If
polysB
contains only one generic polygon, the function
maintains the PID
s from polysA
. It also maintains them
when polysA
contains only one generic polygon and the
operation
is difference. Otherwise, if polysA
contains
only one generic polygon, it maintains the PID
s from
polysB
.
If polysB
is NULL
, the resulting PolySet contains
a single generic polygon (one PID
), possibly with several
components (SID
s). The function recalculates the PID
and SID
columns.
If polysB
is not NULL
, the resulting PolySet
contains one or more generic polygons (PID
s), each with
possibly several components (SID
s). The function recalculates
the SID
column, and depending on the input, it may recalculate
the PID
column.
Murta, A. 2004. A general polygon clipping library. Accessed: July
29, 2004.
http://www.cs.man.ac.uk/aig/staff/alan/software/gpc.html
addPolys
,
appendPolys
,
clipPolys
,
closePolys
,
fixBound
,
fixPOS
,
locatePolys
,
plotMap
,
plotPoints
,
thickenPolys
,
thinPolys
.
#--- load the data (if using R) if (!is.null(version$language) && (version$language == "R")) data(nepacLL) #--- create a triangle to use in clipping polysB <- data.frame(PID=rep(1, 3), POS=1:3, X=c(-127.5, -124.5, -125.6), Y = c(49.2, 50.3, 48.6)) #--- intersect nepacLL with the single polygon, and plot the result plotMap(joinPolys(nepacLL, polysB), col=5) #--- add nepacLL in a different line type to emphasize the intersection addPolys(nepacLL, border=2, lty=8, density=0)