From 6560a69608bff5745b0d65aeabdee28a66843595 Mon Sep 17 00:00:00 2001 From: swoellauer Date: Fri, 11 Oct 2024 13:51:15 +0200 Subject: [PATCH] bugfix PointDB R-package connection write scanAngleRank as signed integer; R-package as.LAS change parameter proj4string to crs for lidR compatiblity --- r-package/DESCRIPTION | 54 ++++++++++++------------- r-package/R/util.R | 10 ++--- r-package/man/RSDB-package.Rd | 1 + r-package/man/as.LAS.Rd | 4 +- src/util/rdat/RdatDataFrame.java | 26 ++++++++++++ src/util/rdat/RdatDataFrame_points.java | 3 +- 6 files changed, 63 insertions(+), 35 deletions(-) diff --git a/r-package/DESCRIPTION b/r-package/DESCRIPTION index cb26c82b..9693ebaa 100644 --- a/r-package/DESCRIPTION +++ b/r-package/DESCRIPTION @@ -1,27 +1,27 @@ -Package: RSDB -Type: Package -Title: R to RSDB Server Connection Package -Version: 1.3.9 -Author: woellauer -Maintainer: woellauer -Description: RSDB (Remote Sensing Database) manages (hyperspectral) rasters and (LiDAR) point-clouds as well as vector data and auxiliary ROIs (regions of interest as named polygons) and POIs (points of interest as named points). Contained data can be queried, processed and analysed. - This R package connects to an RSDB server running at local or remote computer. -License: GPL-3 -Encoding: UTF-8 -LazyData: true -RoxygenNote: 7.2.3 -Imports: - R6, - httr, - jsonlite, - openssl, - raster, - sf, - stars -Suggests: - rgl, - lidR, - rlas, - data.table, - hsdar, - mapview +Package: RSDB +Type: Package +Title: R to RSDB Server Connection Package +Version: 1.3.10 +Author: woellauer +Maintainer: woellauer +Description: RSDB (Remote Sensing Database) manages (hyperspectral) rasters and (LiDAR) point-clouds as well as vector data and auxiliary ROIs (regions of interest as named polygons) and POIs (points of interest as named points). Contained data can be queried, processed and analysed. + This R package connects to an RSDB server running at local or remote computer. +License: GPL-3 +Encoding: UTF-8 +LazyData: true +RoxygenNote: 7.3.2 +Imports: + R6, + httr, + jsonlite, + openssl, + raster, + sf, + stars +Suggests: + rgl, + lidR, + rlas, + data.table, + hsdar, + mapview diff --git a/r-package/R/util.R b/r-package/R/util.R index 1db014be..939c1977 100644 --- a/r-package/R/util.R +++ b/r-package/R/util.R @@ -2,7 +2,7 @@ #' #' Creates an \link{extent} that covers the square over the circle at point x,y with radius r. #' -#' Extents are used to query data from \link{RasterDB} , from \link{PointCloud} and from \link{PointDB}. +#' Extents are used to query data from \link{RasterDB} , from \link{PointCloud} and from \link{PointDB}. #' #' @param x first coordinate #' @param y second coordinate @@ -19,7 +19,7 @@ extent_radius <- function(x, y, r) { #' #' Creates an \link{extent} that covers the square with center point x,y and with diameter (edge length) d. #' -#' Extents are used to query data from \link{RasterDB} , from \link{PointCloud} and from \link{PointDB}. +#' Extents are used to query data from \link{RasterDB} , from \link{PointCloud} and from \link{PointDB}. #' #' @param x first coordinate #' @param y second coordinate @@ -215,12 +215,12 @@ as.speclib <- function(rasterStack, na=NULL) { #' #' Convert data.frame of points (received from PointDB or PointCloud) to \link[lidR]{LAS} in lidR package. #' -#' optional parameter proj4string: crs of points. e.g. proj4string <- CRS(pointdb$info$proj4) +#' Optional parameter crs: crs of points. e.g. crs <- sf::st_crs(paste0('EPSG:', pointdb$info$epsg)) #' #' @seealso \link[lidR]{LAS} #' @author woellauer #' @export -as.LAS <- function(df, proj4string = sp::CRS()) { +as.LAS <- function(df, crs = sf::NA_crs_) { stopifnot(is.data.frame(df)) cn <- colnames(df) stopifnot("x" %in% cn && "y" %in% cn) @@ -234,7 +234,7 @@ as.LAS <- function(df, proj4string = sp::CRS()) { header <- rlas::header_create(dt) - result <- lidR::LAS(data=dt, header=header, proj4string=proj4string, check=TRUE) + result <- lidR::LAS(data=dt, header=header, crs=crs, check=TRUE) return(result) } diff --git a/r-package/man/RSDB-package.Rd b/r-package/man/RSDB-package.Rd index 7844b534..269ae7dd 100644 --- a/r-package/man/RSDB-package.Rd +++ b/r-package/man/RSDB-package.Rd @@ -2,6 +2,7 @@ % Please edit documentation in R/RSDB-package.R \docType{package} \name{RSDB-package} +\alias{RSDB} \alias{RSDB-package} \title{RSDB} \description{ diff --git a/r-package/man/as.LAS.Rd b/r-package/man/as.LAS.Rd index 8dacf749..04df03ed 100644 --- a/r-package/man/as.LAS.Rd +++ b/r-package/man/as.LAS.Rd @@ -4,13 +4,13 @@ \alias{as.LAS} \title{Convert data.frame of points to LAS object of lidR package.} \usage{ -as.LAS(df, proj4string = sp::CRS()) +as.LAS(df, crs = sf::NA_crs_) } \description{ Convert data.frame of points (received from PointDB or PointCloud) to \link[lidR]{LAS} in lidR package. } \details{ -optional parameter proj4string: crs of points. e.g. proj4string <- CRS(pointdb$info$proj4) +Optional parameter crs: crs of points. e.g. crs <- sf::st_crs(paste0('EPSG:', pointdb$info$epsg)) } \seealso{ \link[lidR]{LAS} diff --git a/src/util/rdat/RdatDataFrame.java b/src/util/rdat/RdatDataFrame.java index 4da0d572..0cd850f8 100644 --- a/src/util/rdat/RdatDataFrame.java +++ b/src/util/rdat/RdatDataFrame.java @@ -103,6 +103,32 @@ public void write(DataOutput out, Iterable coll) throws IOException { } } + + public static class Int8Column extends Column { + @FunctionalInterface + public static interface ToByteFunction { + byte applyAsByte(T value); + } + + private final ToByteFunction mapper; + + public Int8Column(String name, ToByteFunction mapper) { + super(name); + this.mapper = mapper; + } + + @Override + public void write(DataOutput out, Iterable coll) throws IOException { + Rdat.writeSizedString(out, name); + out.writeByte(Rdat.TYPE_INT8); + out.writeByte(Rdat.TYPE_INT8_SIZE); + for (T e:coll) { + byte v = mapper.applyAsByte(e); + out.writeByte(v); + } + } + + } public static class DoubleColumn extends Column { diff --git a/src/util/rdat/RdatDataFrame_points.java b/src/util/rdat/RdatDataFrame_points.java index 54d9ca22..638baf2d 100644 --- a/src/util/rdat/RdatDataFrame_points.java +++ b/src/util/rdat/RdatDataFrame_points.java @@ -16,6 +16,7 @@ import util.rdat.RdatDataFrame.DoubleColumn; import util.rdat.RdatDataFrame.UInt16Column; import util.rdat.RdatDataFrame.UInt8Column; +import util.rdat.RdatDataFrame.Int8Column; public class RdatDataFrame_points { @@ -27,7 +28,7 @@ public class RdatDataFrame_points { add(new UInt16Column("intensity", GeoPoint::getIntensity)); add(new UInt8Column("returnNumber", GeoPoint::getReturnNumber)); add(new UInt8Column("returns", GeoPoint::getReturns)); - add(new UInt8Column("scanAngleRank", GeoPoint::getScanAngleRank)); + add(new Int8Column("scanAngleRank", GeoPoint::getScanAngleRank)); add(new UInt8Column("classification", GeoPoint::getClassification)); add(new UInt8Column("classificationFlags", GeoPoint::getClassificationFlags)); }};