track_wires: Track the wires of the powerlines using the tower positions

View source: R/powerlines-track_wires.R

track_wiresR Documentation

Track the wires of the powerlines using the tower positions

Description

Assuming the coordinates, the elevation and the type of transmission tower are known the functions tracks the wires of the powerlines. To achieve this task it computes the catenary equation of the wires between two consecutive towers. Strictly speaking the function is not able to find the wires instead it guesses their equation that can be computed deterministically from the tower coordinates, their height and their type.

Usage

track_wires(
  towers,
  powerline,
  dtm,
  type = c("waist-type", "double-circuit"),
  debug = FALSE
)

Arguments

towers

SpatialPointsDataFrame containing the positions of the towers as returned by find_transmissiontowers

powerline

A SpatialLines* that map the electrical network accurately. The method may be improved later to get rid of this information.

dtm

A RasterLayer. Digital Terrain Model is useful to find a relevant elevation for virtual towers

type

One of "waist-type" or "double-circuit" according to Hydro-Quebec. Can also be a list with custom specifications. See examples.

debug

logical. Plot the different steps of the algorithm so one can try to figure out what is going wrong.

Value

A SpatialPointsDataFrame that actually represents 3D lines with several attributes per points. Z the elevation, virtual tells if the wire has been found with two consecutive tower and is thus accurate or if only one tower was used and in this case the wire is a pure guess, section attributes an ID to each wire section i.e. between two towers, ID attributes and ID to each powerline type store the transmission tower type.

References

Roussel J, Achim A, Auty D. 2021. Classification of high-voltage power line structures in low density ALS data acquired over broad non-urban areas. PeerJ Computer Science 7:e672 https://doi.org/10.7717/peerj-cs.672

See Also

Other electrical network: classify_transmissiontowers(), classify_wires(), get_tower_spec()

Examples


# A simple file with wires already clipped from 4 files + shapefile
# of the network
LASfile <- system.file("extdata", "wires.laz", package="lidRplugins")
wireshp <- system.file("extdata", "wires.shp", package="lidRplugins")
dtmtif  <- system.file("extdata", "wire-dtm.tif", package="lidRplugins")
las <- readLAS(LASfile, select = "xyzc")
network <- sf::st_read(wireshp)
dtm <- raster::raster(dtmtif)

towers <- find_transmissiontowers(las, network, dtm, "waist-type")
wires <- track_wires(towers, network, dtm, "waist-type")

col <- c("red", "blue", "forestgreen", "darkorchid", "darkorange")[wires$ID]
col[wires$virtual & col == "red"] <- "pink"
col[wires$virtual & col == "blue"] <- "lightblue"
col[wires$virtual & col == "forestgreen"] <- "lightgreen"
col[wires$virtual & col == "darkorchid"] <- "plum"
col[wires$virtual & col == "darkorange"] <- "goldenrod1"

plot(header(las))
plot(towers, add = TRUE, col = towers$deflection + 1)
plot(wires, col = col, add = TRUE, cex = 0.1)

plot(las, clear_artifacts = FALSE)
rgl::points3d(wires@coords[,1], wires@coords[,2], wires$z, col = col, size = 5)


Jean-Romain/lidRplugins documentation built on Feb. 8, 2023, 5:39 a.m.