find_transmissiontowers: Individual transmission tower detection

View source: R/powerlines-find_transmissiontowers.R

find_transmissiontowersR Documentation

Individual transmission tower detection

Description

Individual transmission tower detection function that find the positions of the transmission towers. The method is supervised by a map of the electric network and the tower types.

Usage

find_transmissiontowers(
  las,
  powerline,
  dtm,
  type = c("waist-type", "double-circuit"),
  buffer = 125,
  debug = FALSE
)

Arguments

las

An object of class LAS with absolute elevations or a LAScatalog.

powerline

A SpatialLines* that map the electrical network accurately

dtm

RasterLayer. Because the algorithm relies on absolute elevation a DTM is requirered to compute the relative elevations.

type

character. One of "waist-type", "waist-type-small", "double-circuit" according to Hydro-Quebec. Can also be a list with custom specifications. See get_tower_spec.

buffer

numeric. The SpatialLines* will be buffered internally to catch the powerlines and the transmission towers. The buffer must ensure to catch all the powerlines.

debug

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

Value

A SpatialPointDataFrame with several attributes. Z the elevation of the tower, dtm the elevation of the bottom of the tower aligned with the top, theta the angle of the tower with the x axis in radian, ux, uy the directional vectors, deflection tells if a given tower is on a deflection (deflection towers are found twice by design) and type the type name.

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

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")

plot(header(las))
plot(towers, add = TRUE, col = towers$deflection + 1)
arrows(
   towers@coords[,1],
   towers@coords[,2],
   towers@coords[,1] + 100 * towers$ux,
   towers@coords[,2] + 100 * towers$uy,
   length = 0.05,
   col = towers$deflection + 1)

x = plot(las)
add_treetops3d(x, towers, radius = 5)


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