create_pgeometry()
creates a pgeometry
object from a data.frame
or tibble
object, a list of components, or a list of spatial plateau objects.
Arguments
- x
A list of
component
objects, a list ofpgeometry
objects or adata.frame
/tibble
object. ForPLATEAUPOINT
,PLATEAULINE
andPLATEAUREGION
, the type of each component must be the same for all components.- type
A character value that indicates the type of the desired
pgeometry
object. It should be either"PLATEAUPOINT"
,"PLATEAULINE"
,"PLATEAUREGION"
,"PLATEAUCOMPOSITION"
, or"PLATEAUCOLLECTION"
. It must be compatible with the components given inx
parameter.- is_valid
A Boolean value to check whether the user wants to validate the created spatial plateau object at the end. If
is_valid = TRUE
, it callsvalidObject()
method.
Details
create_pgeometry()
is a flexible function that creates a pgeometry
object by using the values given in x
.
This object is built by using either a list of component
objects, a list of pgeometry
objects or a data.frame
(or tibble
) object.
If a data.frame
or tibble
object is given as input, its columns must have the following format: (i) first column is an sfc
object, and
(ii) the second columns consists of the membership degree of each respective object of the sfc
column.
By default, this function checks if the resulting spatial plateau object is valid. That is, it checks whether all constraints defined by the Spatial Plateau Algebra are satisfied. For instance, the components of a plateau point, plateau line, or plateau region must be adjacent or disjoint from each other and have to be unique membership degrees.
If you are sure that the component objects provided to this function satisfy all the constraints, then you can use is_valid = FALSE
to improve the performance of this function.
References
Underlying concepts and formal definitions of spatial plateau data types are explained in detail in:
Examples
library(sf)
# Creating some components
pts <- rbind(c(0, 2), c(4, 2))
# Point components
pcp1 <- create_component(st_multipoint(pts), 0.3)
pcp2 <- create_component("MULTIPOINT((2 2), (2 4), (2 0))", 0.5)
pcp3 <- create_component("MULTIPOINT((1 1), (3 1), (1 3), (3 3))", 0.9)
# Line components
lcp1 <- create_component("LINESTRING(0 0, 1 1.5)", 0.2)
lcp2 <- create_component("LINESTRING(1 3, 1 2, 2 0.5)", 0.5)
lcp3 <- create_component("LINESTRING(2 1.2, 3 1.6, 4 4)", 0.7)
lcp4 <- create_component("LINESTRING(1 1.5, 2 1.2)", 1.0)
# Polygon components
rcp1 <- create_component("POLYGON((0 0, 1 4, 2 2, 0 0))", 0.4)
rcp2 <- create_component("POLYGON((2 0.5, 4 1, 4 0, 2 0.5))", 0.8)
# Creating spatial plateau objects from lists of components
pp <- create_pgeometry(list(pcp1, pcp2, pcp3), "PLATEAUPOINT")
pl <- create_pgeometry(list(lcp1, lcp3, lcp4), "PLATEAULINE")
pr <- create_pgeometry(list(rcp1, rcp2), "PLATEAUREGION")
pcm <- create_pgeometry(list(pcp1, pcp2, lcp1, lcp2, lcp3, rcp2), "PLATEAUCOMPOSITION")
# Creating a spatial plateau objects from a list of spatial plateau objects
pcl <- create_pgeometry(list(pp, pr, pcm), "PLATEAUCOLLECTION")
# Converting pp into a tibble
pp
#> [1] "PLATEAUPOINT ((MULTIPOINT ((0 2), (4 2)), 0.3), (MULTIPOINT ((2 2), (2 4), (2 0)), 0.5), (MULTIPOINT ((1 1), (3 1), (1 3), (3 3)), 0.9))"
tibble_pp <- as_tibble(pp)
tibble_pp
#> # A tibble: 3 × 2
#> geometry md
#> <MULTIPOINT> <dbl>
#> 1 ((0 2), (4 2)) 0.3
#> 2 ((2 2), (2 4), (2 0)) 0.5
#> 3 ((1 1), (3 1), (1 3), (3 3)) 0.9
# Creating a spatial plateau point from the previous tibble
equivalent_pp <- create_pgeometry(tibble_pp, "PLATEAUPOINT")
equivalent_pp
#> [1] "PLATEAUPOINT ((MULTIPOINT ((0 2), (4 2)), 0.3), (MULTIPOINT ((2 2), (2 4), (2 0)), 0.5), (MULTIPOINT ((1 1), (3 1), (1 3), (3 3)), 0.9))"