Skip to content

Commit

Permalink
improve logic to determine region of interest and feature count
Browse files Browse the repository at this point in the history
  • Loading branch information
Ylannl committed Dec 12, 2024
1 parent 00a79b0 commit 0a2d4d5
Show file tree
Hide file tree
Showing 5 changed files with 55 additions and 41 deletions.
8 changes: 5 additions & 3 deletions apps/roofer-app/roofer-app.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -623,8 +623,10 @@ int main(int argc, const char* argv[]) {
roi = VectorReader->layer_extent;
}

logger.info("Region of interest: {} {}, {} {}", roi.pmin[0], roi.pmin[1],
roi.pmax[0], roi.pmax[1]);
logger.info("Region of interest: {:.3f} {:.3f}, {:.3f} {:.3f}", roi.pmin[0],
roi.pmin[1], roi.pmax[0], roi.pmax[1]);
logger.info("Number of source footprints: {}",
VectorReader->get_feature_count());

// actual tiling
if (roofer_cfg_handler._no_tiling) {
Expand Down Expand Up @@ -1169,5 +1171,5 @@ int main(int argc, const char* argv[]) {
reconstructed_buildings.size());
}

logger.info("Finished roofer");
// logger.info("Finished roofer");
}
2 changes: 2 additions & 0 deletions include/roofer/io/VectorReader.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@ namespace roofer::io {

virtual void open(const std::string& source) = 0;

virtual size_t get_feature_count() = 0;

virtual void get_crs(roofer::io::SpatialReferenceSystemInterface* srs) = 0;

virtual void readPolygons(std::vector<LinearRing>&,
Expand Down
6 changes: 3 additions & 3 deletions src/core/logger/logger_spdlog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ namespace roofer::logger {
file_sink->set_level(spdlog_level);
// Set up json logging in the logfile.
file_sink->set_pattern("{\n \"log\": [");
logger_stdout.log(spdlog_level, "");
// logger_stdout.log(spdlog_level, "");
std::string jsonpattern = {
R"({"time": "%Y-%m-%dT%H:%M:%S.%f%z", "name": "%n", "level": "%^%l%$", "process": %P, "thread": %t, "message": "%v"},)"};
file_sink->set_pattern(jsonpattern);
Expand All @@ -89,9 +89,9 @@ namespace roofer::logger {
std::string jsonlastlogpattern = {
R"({"time": "%Y-%m-%dT%H:%M:%S.%f%z", "name": "%n", "level": "%^%l%$", "process": %P, "thread": %t, "message": "%v"})"};
file_sink->set_pattern(jsonlastlogpattern);
logger_stdout.log(cast_level(level), "Finished.");
// logger_stdout.log(cast_level(level), "Finished.");
file_sink->set_pattern("]\n}");
logger_stdout.log(cast_level(level), "");
// logger_stdout.log(cast_level(level), "");
spdlog::drop_all();
}

Expand Down
22 changes: 11 additions & 11 deletions src/extra/io/StreamCropper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -341,8 +341,8 @@ namespace roofer::io {
diff_sum += std::pow(mean_density - (info.pt_count_bld / info.area), 2);
}
float std_dev_density = std::sqrt(diff_sum / poly_info.size());
logger.info("Mean point density = {}", mean_density);
logger.info("Standard deviation = {}", std_dev_density);
logger.debug("Mean point density = {}", mean_density);
logger.debug("Standard deviation = {}", std_dev_density);

float cov_thres = mean_density - coverage_threshold * std_dev_density;
for (size_t poly_i = 0; poly_i < polygons.size(); ++poly_i) {
Expand Down Expand Up @@ -384,8 +384,8 @@ namespace roofer::io {
if (gps_standard_time) {
return false;
} else {
logger.info(
"No good GPS time available, defaulting to file creation year");
// logger.info(
// "No good GPS time available, defaulting to file creation year");
// If it is GPS Week Time, probably could handle this better here, but I'm
// simplifying. Also, AHN3 for instance uses week time, but there is no
// way of knowing which week is date...
Expand All @@ -401,15 +401,15 @@ namespace roofer::io {
i++) {
if (lasheader->vlrs[i].record_id == 2111) // OGC MATH TRANSFORM WKT
{
logger.info("Found and ignored: OGC MATH TRANSFORM WKT");
logger.debug("Found and ignored: OGC MATH TRANSFORM WKT");
} else if (lasheader->vlrs[i].record_id ==
2112) // OGC COORDINATE SYSTEM WKT
{
logger.info("Found: OGC COORDINATE SYSTEM WKT");
logger.debug("Found: OGC COORDINATE SYSTEM WKT");
wkt = (char*)(lasheader->vlrs[i].data);
} else if (lasheader->vlrs[i].record_id == 34735) // GeoKeyDirectoryTag
{
logger.info("Found and ignored: GeoKeyDirectoryTag");
logger.debug("Found and ignored: GeoKeyDirectoryTag");
}
}

Expand All @@ -418,12 +418,12 @@ namespace roofer::io {
if (strcmp(lasheader->evlrs[i].user_id, "LASF_Projection") == 0) {
if (lasheader->evlrs[i].record_id == 2111) // OGC MATH TRANSFORM WKT
{
logger.info("Found and ignored: OGC MATH TRANSFORM WKT");
logger.debug("Found and ignored: OGC MATH TRANSFORM WKT");

} else if (lasheader->evlrs[i].record_id ==
2112) // OGC COORDINATE SYSTEM WKT
{
logger.info("Found: OGC COORDINATE SYSTEM WKT");
logger.debug("Found: OGC COORDINATE SYSTEM WKT");
wkt = (char*)(lasheader->evlrs[i].data);
}
}
Expand Down Expand Up @@ -514,8 +514,8 @@ namespace roofer::io {
lasreader->point.get_z()),
lasreader->point.get_classification(), acqusition_year);
}
logger.info("Point cloud acquisition year: {}",
acqusition_year); // just for debug
// logger.info("Point cloud acquisition year: {}",
// acqusition_year); // just for debug

lasreader->close();
delete lasreader;
Expand Down
58 changes: 34 additions & 24 deletions src/extra/io/VectorReaderOGR.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -151,19 +151,42 @@ namespace roofer::io {
throw(rooferException(
"[VectorReaderOGR] Could not get the selected layer "));

logger.debug("[VectorReaderOGR] Layer '{}' total feature count: {}",
poLayer->GetName(), poLayer->GetFeatureCount());
if (attribute_filter.size()) {
auto error_code = poLayer->SetAttributeFilter(attribute_filter.c_str());
if (OGRERR_NONE != error_code) {
throw(rooferException(
"[VectorReaderOGR] Invalid attribute filter: OGRErr=" +
std::to_string(error_code) + ", filter=" + attribute_filter));
}
// compute extent of filtered layer
OGREnvelope extent;
for (auto& feature : poLayer) {
OGRGeometry* geom = feature->GetGeometryRef();
if (geom) {
OGREnvelope gextent;
geom->getEnvelope(&gextent);
extent.Merge(gextent);
}
}
layer_extent = {extent.MinX, extent.MinY, 0,
extent.MaxX, extent.MaxY, 0};
} else {
OGREnvelope extent;
auto error = poLayer->GetExtent(&extent);
if (error) {
throw(rooferException(
"[VectorReaderOGR] Could not get the extent of the layer"));
}
layer_extent = {extent.MinX, extent.MinY, 0,
extent.MaxX, extent.MaxY, 0};
}
}

// logger.info("Getting layer extent...");
OGREnvelope extent;
auto error = poLayer->GetExtent(&extent);
if (error) {
throw(rooferException(
"[VectorReaderOGR] Could not get the extent of the layer"));
size_t get_feature_count() override {
if (poLayer == nullptr) {
throw(rooferException("[VectorReaderOGR] Layer is not open"));
}
logger.debug("[VectorReaderOGR] Layer extent: {} {} {} {}", extent.MinX,
extent.MinY, extent.MaxX, extent.MaxY);
layer_extent = {extent.MinX, extent.MinY, 0, extent.MaxX, extent.MaxY, 0};
return poLayer->GetFeatureCount();
}

void get_crs(SpatialReferenceSystemInterface* srs) override {
Expand Down Expand Up @@ -278,19 +301,6 @@ namespace roofer::io {
roi.pmax[1]);
}

// if ((poLayer->GetFeatureCount()) < feature_select || feature_select <
// 0)
// throw rooferException("Illegal feature_select value");

if (attribute_filter.size()) {
auto error_code = poLayer->SetAttributeFilter(attribute_filter.c_str());
if (OGRERR_NONE != error_code) {
throw(rooferException(
"[VectorReaderOGR] Invalid attribute filter: OGRErr=" +
std::to_string(error_code) + ", filter=" + attribute_filter));
}
}

OGRFeature* poFeature;
while ((poFeature = poLayer->GetNextFeature()) != NULL)
// for (auto &poFeature : poLayer)
Expand Down

0 comments on commit 0a2d4d5

Please sign in to comment.