[Liblas-commits] hg: 3 new changesets
liblas-commits at liblas.org
liblas-commits at liblas.org
Mon Oct 5 12:00:44 EDT 2009
changeset cc8cc33189a9 in /home/www/liblas.org/hg
details: http://hg.liblas.org/main/hg?cmd=changeset;node=cc8cc33189a9
summary: god that's embarrasing
changeset 3dd9917d34b7 in /home/www/liblas.org/hg
details: http://hg.liblas.org/main/hg?cmd=changeset;node=3dd9917d34b7
summary: fix up reprojection support, make sure FillPoint takes in the header
changeset 218c025bd810 in /home/www/liblas.org/hg
details: http://hg.liblas.org/main/hg?cmd=changeset;node=218c025bd810
summary: support reprojecting, adding pad to the header, setting the offset, and setting the scale
diffstat:
apps/las2las.c | 130 +++++++++++++++++++++++++++++++++++-------
include/liblas/detail/reader.hpp | 2 +-
python/liblas/point.py | 6 +-
src/detail/reader.cpp | 25 +++++--
src/detail/reader10.cpp | 4 +-
src/detail/reader11.cpp | 4 +-
src/detail/reader12.cpp | 4 +-
7 files changed, 134 insertions(+), 41 deletions(-)
diffs (truncated from 378 to 300 lines):
diff -r 04cee30948ab -r 218c025bd810 apps/las2las.c
--- a/apps/las2las.c Fri Oct 02 22:13:50 2009 -0500
+++ b/apps/las2las.c Mon Oct 05 10:58:14 2009 -0500
@@ -104,8 +104,6 @@
int skip_invalid = FALSE;
int format = LAS_FORMAT_12;
- int use_min_offset = FALSE;
-
LASReaderH reader = NULL;
LASHeaderH header = NULL;
LASHeaderH surviving_header = NULL;
@@ -114,6 +112,13 @@
LASSRSH in_srs = NULL;
LASSRSH out_srs = NULL;
+ int use_min_offset = FALSE;
+ int do_reprojection = FALSE;
+ int do_set_offset = FALSE;
+ int do_set_scale = FALSE;
+ int do_pad_header = FALSE;
+
+ int header_pad = 0;
int first_surviving_point = TRUE;
unsigned int surviving_number_of_point_records = 0;
@@ -138,6 +143,8 @@
LASPointSummary* summary = NULL;
+ int ret = 0;
+
for (i = 1; i < argc; i++) {
if ( strcmp(argv[i],"-h") == 0 ||
strcmp(argv[i],"--help") == 0
@@ -299,7 +306,12 @@
++i;
if (LAS_IsGDALEnabled()) {
out_srs = LASSRS_Create();
- LASSRS_SetFromUserInput(out_srs, argv[i]);
+ ret = LASSRS_SetFromUserInput(out_srs, argv[i]);
+ if (ret) {
+ LASError_Print("Unable to import SRS");
+ exit(1);
+ }
+ do_reprojection = TRUE;
}
}
else if ( strcmp(argv[i],"--scale") == 0 ||
@@ -310,6 +322,7 @@
i++;
sscanf(argv[i], "%lf", &(xyz_scale[2]));
xyz_scale[0] = xyz_scale[1] = xyz_scale[2];
+ do_set_scale = TRUE;
}
else if ( strcmp(argv[i],"--xyz_scale") == 0 ||
strcmp(argv[i],"-xyz_scale") == 0
@@ -322,26 +335,35 @@
sscanf(argv[i], "%lf", &(xyz_scale[1]));
i++;
sscanf(argv[i], "%lf", &(xyz_scale[2]));
+ do_set_scale = TRUE;
}
else if ( strcmp(argv[i],"--xyz_offset") == 0 ||
strcmp(argv[i],"-xyz_offset") == 0
)
{
-
- if (strncasecmp(argv[i], "min", 3)) {
- i++;
+ i++;
+ if (!strncasecmp(argv[i], "min", 3)) {
use_min_offset = TRUE;
- printf("Offset was !\n");
+ do_set_offset = TRUE;
} else
{
- i++;
sscanf(argv[i], "%lf", &(xyz_offset[0]));
i++;
sscanf(argv[i], "%lf", &(xyz_offset[1]));
i++;
sscanf(argv[i], "%lf", &(xyz_offset[2]));
+ do_set_offset = TRUE;
}
}
+ else if ( strcmp(argv[i],"--pad-header") == 0 ||
+ strcmp(argv[i],"-pad-header") == 0 ||
+ strcmp(argv[i],"-ph") == 0
+ )
+ {
+ i++;
+ do_pad_header = TRUE;
+ header_pad = atoi(argv[i]);
+ }
else if (file_name_in == NULL && file_name_out == NULL)
{
file_name_in = argv[i];
@@ -379,6 +401,10 @@
}
if (out_srs != NULL) {
+ if (verbose) {
+ fprintf(stderr,
+ "Setting LASReader_SetOutputSRS to %s", LASSRS_GetProj4(out_srs));
+ }
LASReader_SetOutputSRS(reader, out_srs);
}
@@ -537,13 +563,10 @@
else if (LASPoint_GetTime(p) > LASPoint_GetTime(surviving_point_max))
LASPoint_SetTime(surviving_point_max,LASPoint_GetTime(p));
-/*
- if (lasreader->point.point_source_ID < surviving_point_min.point_source_ID) surviving_point_min.point_source_ID = lasreader->point.point_source_ID;
- else if (lasreader->point.point_source_ID > surviving_point_max.point_source_ID) surviving_point_max.point_source_ID = lasreader->point.point_source_ID;
-*/
}
p = LASReader_GetNextPoint(reader);
+
}
if (eliminated_first_only)
@@ -652,19 +675,17 @@
LASPoint_GetTime(surviving_point_max),
LASPoint_GetTime(surviving_point_max) - LASPoint_GetTime(surviving_point_min)
);
-/*
- fprintf(stderr, "point_source_ID %d %d %d\n",surviving_point_min.point_source_ID, surviving_point_max.point_source_ID, surviving_point_max.point_source_ID - surviving_point_min.point_source_ID);
-*/
+
}
-
if (file_name_out == NULL && !use_stdout)
{
LASError_Print("no output specified. exiting...");
exit(1);
}
-
+
+ fprintf(stderr, "Creating another reader...\n");
if (file_name_in)
{
reader = LASReader_Create(file_name_in);
@@ -702,7 +723,10 @@
for (i = 0; i < 5; i++) LASHeader_SetPointRecordsByReturnCount(surviving_header, i, surviving_number_of_points_by_return[i]);
- minx = LASPoint_GetX(surviving_point_min) * LASHeader_GetScaleX(surviving_header) + LASHeader_GetOffsetX(surviving_header);
+ minx = LASPoint_GetX(surviving_point_min) * \
+ LASHeader_GetScaleX(surviving_header) + \
+ LASHeader_GetOffsetX(surviving_header);
+
maxx = LASPoint_GetX(surviving_point_max) * LASHeader_GetScaleX(surviving_header) + LASHeader_GetOffsetX(surviving_header);
miny = LASPoint_GetY(surviving_point_min) * LASHeader_GetScaleY(surviving_header) + LASHeader_GetOffsetY(surviving_header);
@@ -718,11 +742,60 @@
} else if (format == LAS_FORMAT_12) {
LASHeader_SetVersionMinor(surviving_header, 2);
}
+
+ if (do_set_offset) {
+ if (use_min_offset) {
+ if (verbose) {
+ fprintf(stderr,
+ "Setting xyz offset to minimums...\n");
+ }
+ LASHeader_SetOffset(surviving_header,
+ LASPoint_GetX(surviving_point_min),
+ LASPoint_GetY(surviving_point_min),
+ LASPoint_GetZ(surviving_point_min));
+ } else {
+ if (verbose) {
+ fprintf(stderr,
+ "Setting xyz offset to commandline-assigned values...\n");
+ }
+ LASHeader_SetOffset(surviving_header,
+ xyz_offset[0],
+ xyz_offset[1],
+ xyz_offset[2]);
+ }
+ }
+
+ if (do_set_scale) {
+ if (verbose) {
+ fprintf(stderr,
+ "Setting xyz scale...\n");
+ }
+ LASHeader_SetScale( surviving_header,
+ xyz_scale[0],
+ xyz_scale[1],
+ xyz_scale[2]);
+ }
-
-/* if (remove_extra_header) surviving_header.offset_to_point_data = surviving_header.header_size;
-*/
-
+ if (do_pad_header){
+ if (verbose) {
+ fprintf(stderr,
+ "Padding header by %d bytes. New header will be %d bytes long instead of %d bytes ...\n",
+ header_pad,
+ LASHeader_GetDataOffset(surviving_header)+abs(header_pad),
+ LASHeader_GetDataOffset(surviving_header));
+ }
+
+ LASHeader_SetDataOffset(surviving_header, LASHeader_GetDataOffset(surviving_header)+abs(header_pad));
+ }
+
+ if (do_reprojection) {
+ if (verbose) {
+ fprintf(stderr,
+ "Setting new coordinate system to %s", LASSRS_GetProj4(out_srs));
+ }
+ LASHeader_SetSRS(surviving_header, out_srs);
+
+ }
if (verbose) {
fprintf(stderr,
"second pass reading %d and writing %d points ...\n",
@@ -730,9 +803,12 @@
surviving_number_of_point_records);
}
+
if (use_stdout) file_name_out = "stdout";
- writer = LASWriter_Create(file_name_out, surviving_header, LAS_MODE_WRITE);
+ writer = LASWriter_Create( file_name_out,
+ surviving_header,
+ LAS_MODE_WRITE);
if (!writer) {
LASError_Print("Could not open file to write");
exit(1);
@@ -767,6 +843,14 @@
exit(1);
}
+ if (in_srs != NULL) {
+ LASReader_SetInputSRS(reader, in_srs);
+ }
+
+ if (out_srs != NULL) {
+ LASReader_SetOutputSRS(reader, out_srs);
+ }
+
p = LASReader_GetNextPoint(reader);
if (!p) {
if (LASError_GetLastErrorNum())
diff -r 04cee30948ab -r 218c025bd810 include/liblas/detail/reader.hpp
--- a/include/liblas/detail/reader.hpp Fri Oct 02 22:13:50 2009 -0500
+++ b/include/liblas/detail/reader.hpp Mon Oct 05 10:58:14 2009 -0500
@@ -91,7 +91,7 @@
OGRSpatialReferenceH m_in_ref;
OGRSpatialReferenceH m_out_ref;
- void FillPoint(PointRecord& record, LASPoint& point);
+ void FillPoint(PointRecord& record, LASPoint& point, const LASHeader& header);
void Project(LASPoint& point);
private:
diff -r 04cee30948ab -r 218c025bd810 python/liblas/point.py
--- a/python/liblas/point.py Fri Oct 02 22:13:50 2009 -0500
+++ b/python/liblas/point.py Mon Oct 05 10:58:14 2009 -0500
@@ -226,6 +226,6 @@
self.z = (self.z - header.offset[2]) / header.scale[2]
def scale(self, header):
- self.x = self.x + header.scale[0] + header.offset[0]
- self.y = self.y + header.scale[1] + header.offset[1]
- self.z = self.z + header.scale[2] + header.offset[2]
+ self.x = (self.x * header.scale[0]) + header.offset[0]
+ self.y = (self.y * header.scale[1]) + header.offset[1]
+ self.z = (self.z * header.scale[2]) + header.offset[2]
diff -r 04cee30948ab -r 218c025bd810 src/detail/reader.cpp
--- a/src/detail/reader.cpp Fri Oct 02 22:13:50 2009 -0500
+++ b/src/detail/reader.cpp Mon Oct 05 10:58:14 2009 -0500
@@ -99,16 +99,25 @@
return m_ifs;
}
-void Reader::FillPoint(PointRecord& record, LASPoint& point)
+void Reader::FillPoint(PointRecord& record, LASPoint& point, const LASHeader& header)
{
-
- point.SetX(record.x);
- point.SetY(record.y);
- point.SetZ(record.z);
-
- if (m_transform)
- {
+
+ if (m_transform) {
+ point.SetCoordinates(header, record.x, record.y, record.z);
Project(point);
+
More information about the Liblas-commits
mailing list