Changeset: 3f8c786c1cc3 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=3f8c786c1cc3
Modified Files:
sql/backends/monet5/vaults/lidar/lidar.c
sql/backends/monet5/vaults/lidar/lidar.h
Branch: data-vaults
Log Message:
[LiDAR]: Factor file reading out of attach
diffs (truncated from 416 to 300 lines):
diff --git a/sql/backends/monet5/vaults/lidar/lidar.c
b/sql/backends/monet5/vaults/lidar/lidar.c
--- a/sql/backends/monet5/vaults/lidar/lidar.c
+++ b/sql/backends/monet5/vaults/lidar/lidar.c
@@ -435,6 +435,7 @@ str LIDARexportTable(Client cntxt, MalBl
/* Create the writer*/
MT_lock_set(&mt_lidar_lock);
writer = LASWriter_Create(filename, header, LAS_MODE_WRITE);
+
// TODO: Failure is always an option
MT_lock_unset(&mt_lidar_lock);
@@ -601,6 +602,86 @@ LIDARtest(int *res, str *fname)
return msg;
}
+lidar_header *
+LIDARopenFile(str fname)
+{
+ lidar_header *res = (lidar_header *)malloc(sizeof(lidar_header));
+ LASReaderH reader = NULL;
+ LASHeaderH header = NULL;
+ res->msg = NULL;
+ res->hi = NULL;
+ /* check if file exists */
+ if (access(fname, F_OK) == -1) {
+ res->msg = createException(MAL, "lidar.test", "File %s not
found.", fname);
+ return res;
+ }
+
+ /* open the LAS/LAZ file */
+ MT_lock_set(&mt_lidar_lock);
+ LASError_Reset();
+ reader = LASReader_Create(fname);
+ MT_lock_unset(&mt_lidar_lock);
+ if (LASError_GetErrorCount() != 0) {
+ res->msg = createException(MAL, "lidar.test", "Error accessing
LIDAR file %s (%s)",
+ fname,
LASError_GetLastErrorMsg());
+ return res;
+ }
+
+ /* get the header */
+ header = LASReader_GetHeader(reader);
+ if (!header) {
+ res->msg = createException(MAL, "lidar.test", "Error accessing
LIDAR file %s (%s)",
+ fname,
LASError_GetLastErrorMsg());
+ return res;
+ }
+#ifndef NDEBUG
+ print_lidar_header(stderr, header, fname, 0, 0);
+#endif
+
+ res->hi = (lidar_info *)malloc(sizeof(lidar_info));
+ /* read values from the header */
+ res->hi->fileSourceId = LASHeader_GetFileSourceId(header);
+ res->hi->versionMajor = LASHeader_GetVersionMajor(header);
+ res->hi->versionMinor = LASHeader_GetVersionMinor(header);
+ res->hi->dataFormatId = LASHeader_GetDataFormatId(header);
+ res->hi->creationDOY = LASHeader_GetCreationDOY(header);
+ res->hi->creationYear = LASHeader_GetCreationYear(header);
+ res->hi->recordsCount = LASHeader_GetRecordsCount(header);
+ res->hi->pointRecordsCount = LASHeader_GetPointRecordsCount(header);
+ res->hi->dataOffset = LASHeader_GetDataOffset(header);
+ res->hi->headerPadding = LASHeader_GetHeaderPadding(header);
+ res->hi->reserved = LASHeader_GetReserved(header);
+ res->hi->dataRecordLength = LASHeader_GetDataRecordLength(header);
+ res->hi->headerSize = LASHeader_GetHeaderSize(header);
+ res->hi->byteSize =
LASSchema_GetByteSize(LASHeader_GetSchema(header));
+ res->hi->baseByteSize =
LASSchema_GetBaseByteSize(LASHeader_GetSchema(header));
+ res->hi->WKT = LASSRS_GetWKT(LASHeader_GetSRS(header));
+ res->hi->WKT_CompoundOK =
LASSRS_GetWKT_CompoundOK(LASHeader_GetSRS(header));
+ res->hi->proj4 = LASSRS_GetProj4(LASHeader_GetSRS(header));
+
+
+ /* read data from the header */
+ res->hi->scaleX = LASHeader_GetScaleX(header);
+ res->hi->scaleY = LASHeader_GetScaleY(header);
+ res->hi->scaleZ = LASHeader_GetScaleZ(header);
+ res->hi->offsetX = LASHeader_GetOffsetX(header);
+ res->hi->offsetY = LASHeader_GetOffsetY(header);
+ res->hi->offsetZ = LASHeader_GetOffsetZ(header);
+ res->hi->minX = LASHeader_GetMinX(header);
+ res->hi->minY = LASHeader_GetMinY(header);
+ res->hi->minZ = LASHeader_GetMinZ(header);
+ res->hi->maxX = LASHeader_GetMaxX(header);
+ res->hi->maxY = LASHeader_GetMaxY(header);
+ res->hi->maxZ = LASHeader_GetMaxZ(header);
+
+ MT_lock_set(&mt_lidar_lock);
+ if (header != NULL) LASHeader_Destroy(header);
+ if (reader != NULL) LASReader_Destroy(reader);
+ MT_lock_unset(&mt_lidar_lock);
+
+ return res;
+}
+
str LIDARattach(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
{
mvc *m = NULL;
@@ -609,8 +690,6 @@ str LIDARattach(Client cntxt, MalBlkPtr
sql_table *lidar_fl, *lidar_tbl, *lidar_col, *tbl = NULL;
sql_column *col;
str msg = MAL_SUCCEED;
- LASReaderH reader = NULL;
- LASHeaderH header = NULL;
str fname = *getArgReference_str(stk, pci, 1);
str tname = NULL;
oid fid, tid, cid, rid = oid_nil;
@@ -618,16 +697,17 @@ str LIDARattach(Client cntxt, MalBlkPtr
char *p;
//long rows;
int cnum;
+ lidar_header *header;
/* table */
- int RecordsCount, PointRecordsCount, DataOffset;
- int HeaderPadding, ByteSize, BaseByteSize, CreationDOY;
- int CreationYear, Reserved, DataRecordLength, HeaderSize, FileSourceId;
- int VersionMajor, VersionMinor;
- char DataFormatId;
- str WKT, WKT_CompoundOK, Proj4;
+ /* int RecordsCount, PointRecordsCount, DataOffset; */
+ /* int HeaderPadding, ByteSize, BaseByteSize, CreationDOY; */
+ /* int CreationYear, Reserved, DataRecordLength, HeaderSize,
FileSourceId; */
+ /* int VersionMajor, VersionMinor; */
+ /* char DataFormatId; */
+ /* str WKT, WKT_CompoundOK, Proj4; */
/* columns */
- double ScaleX, ScaleY, ScaleZ, OffsetX, OffsetY, OffsetZ;
- double MinX, MinY, MinZ, MaxX, MaxY, MaxZ;
+ /* double ScaleX, ScaleY, ScaleZ, OffsetX, OffsetY, OffsetZ; */
+ /* double MinX, MinY, MinZ, MaxX, MaxY, MaxZ; */
if (pci->argc == 3) {
tname = *getArgReference_str(stk, pci, 2);
@@ -647,33 +727,14 @@ str LIDARattach(Client cntxt, MalBlkPtr
if ((msg = checkSQLContext(cntxt)) != MAL_SUCCEED)
return msg;
- /* check if file exists */
- if (access(fname, F_OK) == -1) {
- msg = createException(MAL, "lidar.test", "File %s not found.",
fname);
+ header = LIDARopenFile(fname);
+ /* See if anything were wrong */
+ if (header->msg != NULL) {
+ msg = header->msg;
+ free(header);
return msg;
}
- /* open the LAS/LAZ file */
- MT_lock_set(&mt_lidar_lock);
- LASError_Reset();
- reader = LASReader_Create(fname);
- MT_lock_unset(&mt_lidar_lock);
- if (LASError_GetErrorCount() != 0) {
- msg = createException(MAL, "lidar.test", "Error accessing LIDAR
file %s (%s)",
- fname,
LASError_GetLastErrorMsg());
- return msg;
- }
-
- /* get the header */
- header = LASReader_GetHeader(reader);
- if (!header) {
- msg = createException(MAL, "lidar.test", "Error accessing LIDAR
file %s (%s)",
- fname,
LASError_GetLastErrorMsg());
- return msg;
- }
-#ifndef NDEBUG
- print_lidar_header(stderr, header, fname, 0, 0);
-#endif
/* if needed, instantiate the schema and gather all appropriate tables
*/
tr = m->session->tr;
sch = mvc_bind_schema(m, "sys");
@@ -690,10 +751,10 @@ str LIDARattach(Client cntxt, MalBlkPtr
col = mvc_bind_column(m, lidar_fl, "name");
rid = table_funcs.column_find_row(m->session->tr, col, fname, NULL);
if (rid != oid_nil) {
- MT_lock_set(&mt_lidar_lock);
- if (header != NULL) LASHeader_Destroy(header);
- if (reader != NULL) LASReader_Destroy(reader);
- MT_lock_unset(&mt_lidar_lock);
+ /* MT_lock_set(&mt_lidar_lock); */
+ /* if (header != NULL) LASHeader_Destroy(header); */
+ /* if (reader != NULL) LASReader_Destroy(reader); */
+ /* MT_lock_unset(&mt_lidar_lock); */
msg = createException(SQL, "lidar.attach", "File %s already
attached\n", fname);
return msg;
}
@@ -741,34 +802,14 @@ str LIDARattach(Client cntxt, MalBlkPtr
/* or as regular SQL table */
tbl = mvc_bind_table(m, sch, tname_low);
if (rid != oid_nil || tbl) {
- MT_lock_set(&mt_lidar_lock);
- if (header != NULL) LASHeader_Destroy(header);
- if (reader != NULL) LASReader_Destroy(reader);
- MT_lock_unset(&mt_lidar_lock);
+ /* MT_lock_set(&mt_lidar_lock); */
+ /* if (header != NULL) LASHeader_Destroy(header); */
+ /* if (reader != NULL) LASReader_Destroy(reader); */
+ /* MT_lock_unset(&mt_lidar_lock); */
msg = createException(SQL, "lidar.attach", "Table %s already
exists\n", tname_low);
return msg;
}
- /* read values from the header */
- FileSourceId = LASHeader_GetFileSourceId(header);
- VersionMajor = LASHeader_GetVersionMajor(header);
- VersionMinor = LASHeader_GetVersionMinor(header);
- DataFormatId = LASHeader_GetDataFormatId(header);
- CreationDOY = LASHeader_GetCreationDOY(header);
- CreationYear = LASHeader_GetCreationYear(header);
- RecordsCount = LASHeader_GetRecordsCount(header);
- PointRecordsCount = LASHeader_GetPointRecordsCount(header);
- DataOffset = LASHeader_GetDataOffset(header);
- HeaderPadding = LASHeader_GetHeaderPadding(header);
- Reserved = LASHeader_GetReserved(header);
- DataRecordLength = LASHeader_GetDataRecordLength(header);
- HeaderSize = LASHeader_GetHeaderSize(header);
- ByteSize = LASSchema_GetByteSize(LASHeader_GetSchema(header));
- BaseByteSize = LASSchema_GetBaseByteSize(LASHeader_GetSchema(header));
- WKT = LASSRS_GetWKT(LASHeader_GetSRS(header));
- WKT_CompoundOK = LASSRS_GetWKT_CompoundOK(LASHeader_GetSRS(header));
- Proj4 = LASSRS_GetProj4(LASHeader_GetSRS(header));
-
/* store data */
store_funcs.append_col(m->session->tr,
mvc_bind_column(m,
lidar_tbl, "id"), &tid, TYPE_int);
@@ -777,58 +818,42 @@ str LIDARattach(Client cntxt, MalBlkPtr
store_funcs.append_col(m->session->tr,
mvc_bind_column(m,
lidar_tbl, "name"), tname_low, TYPE_str);
store_funcs.append_col(m->session->tr,
- mvc_bind_column(m,
lidar_tbl, "FileSourceId"), &FileSourceId, TYPE_int);
+ mvc_bind_column(m,
lidar_tbl, "FileSourceId"), &header->hi->fileSourceId, TYPE_int);
store_funcs.append_col(m->session->tr,
- mvc_bind_column(m,
lidar_tbl, "VersionMajor"), &VersionMajor, TYPE_int);
+ mvc_bind_column(m,
lidar_tbl, "VersionMajor"), &header->hi->versionMajor, TYPE_int);
store_funcs.append_col(m->session->tr,
- mvc_bind_column(m,
lidar_tbl, "VersionMinor"), &VersionMinor, TYPE_int);
+ mvc_bind_column(m,
lidar_tbl, "VersionMinor"), &header->hi->versionMinor, TYPE_int);
store_funcs.append_col(m->session->tr,
- mvc_bind_column(m,
lidar_tbl, "DataFormatId"), &DataFormatId, TYPE_str);
+ mvc_bind_column(m,
lidar_tbl, "DataFormatId"), &header->hi->dataFormatId, TYPE_str);
store_funcs.append_col(m->session->tr,
- mvc_bind_column(m,
lidar_tbl, "CreationDOY"), &CreationDOY, TYPE_int);
+ mvc_bind_column(m,
lidar_tbl, "CreationDOY"), &header->hi->creationDOY, TYPE_int);
store_funcs.append_col(m->session->tr,
- mvc_bind_column(m,
lidar_tbl, "CreationYear"), &CreationYear, TYPE_int);
+ mvc_bind_column(m,
lidar_tbl, "CreationYear"), &header->hi->creationYear, TYPE_int);
store_funcs.append_col(m->session->tr,
- mvc_bind_column(m,
lidar_tbl, "RecordsCount"), &RecordsCount, TYPE_int);
+ mvc_bind_column(m,
lidar_tbl, "RecordsCount"), &header->hi->recordsCount, TYPE_int);
store_funcs.append_col(m->session->tr,
- mvc_bind_column(m,
lidar_tbl, "PointRecordsCount"), &PointRecordsCount, TYPE_int);
+ mvc_bind_column(m,
lidar_tbl, "PointRecordsCount"), &header->hi->pointRecordsCount, TYPE_int);
store_funcs.append_col(m->session->tr,
- mvc_bind_column(m,
lidar_tbl, "DataOffset"), &DataOffset, TYPE_int);
+ mvc_bind_column(m,
lidar_tbl, "DataOffset"), &header->hi->dataOffset, TYPE_int);
store_funcs.append_col(m->session->tr,
- mvc_bind_column(m,
lidar_tbl, "HeaderPadding"), &HeaderPadding, TYPE_int);
+ mvc_bind_column(m,
lidar_tbl, "HeaderPadding"), &header->hi->headerPadding, TYPE_int);
store_funcs.append_col(m->session->tr,
- mvc_bind_column(m,
lidar_tbl, "Reserved"), &Reserved, TYPE_int);
+ mvc_bind_column(m,
lidar_tbl, "Reserved"), &header->hi->reserved, TYPE_int);
store_funcs.append_col(m->session->tr,
- mvc_bind_column(m,
lidar_tbl, "DataRecordLength"), &DataRecordLength, TYPE_int);
+ mvc_bind_column(m,
lidar_tbl, "DataRecordLength"), &header->hi->dataRecordLength, TYPE_int);
store_funcs.append_col(m->session->tr,
- mvc_bind_column(m,
lidar_tbl, "HeaderSize"), &HeaderSize, TYPE_int);
+ mvc_bind_column(m,
lidar_tbl, "HeaderSize"), &header->hi->headerSize, TYPE_int);
store_funcs.append_col(m->session->tr,
- mvc_bind_column(m,
lidar_tbl, "ByteSize"), &ByteSize, TYPE_int);
+ mvc_bind_column(m,
lidar_tbl, "ByteSize"), &header->hi->byteSize, TYPE_int);
store_funcs.append_col(m->session->tr,
- mvc_bind_column(m,
lidar_tbl, "BaseByteSize"), &BaseByteSize, TYPE_int);
+ mvc_bind_column(m,
lidar_tbl, "BaseByteSize"), &header->hi->baseByteSize, TYPE_int);
store_funcs.append_col(m->session->tr,
- mvc_bind_column(m,
lidar_tbl, "WKT"), WKT, TYPE_str);
+ mvc_bind_column(m,
lidar_tbl, "WKT"), header->hi->WKT, TYPE_str);
store_funcs.append_col(m->session->tr,
- mvc_bind_column(m,
lidar_tbl, "WKT_CompoundOK"), WKT_CompoundOK, TYPE_str);
+ mvc_bind_column(m,
lidar_tbl, "WKT_CompoundOK"), header->hi->WKT_CompoundOK, TYPE_str);
store_funcs.append_col(m->session->tr,
- mvc_bind_column(m,
lidar_tbl, "Proj4"), Proj4, TYPE_str);
+ mvc_bind_column(m,
lidar_tbl, "Proj4"), header->hi->proj4, TYPE_str);
- /* add a lidar_column tuple */
- col = mvc_bind_column(m, lidar_col, "id");
- cid = store_funcs.count_col(tr, col, 1) + 1;
- /* read data from the header */
- ScaleX = LASHeader_GetScaleX(header);
- ScaleY = LASHeader_GetScaleY(header);
- ScaleZ = LASHeader_GetScaleZ(header);
- OffsetX = LASHeader_GetOffsetX(header);
- OffsetY = LASHeader_GetOffsetY(header);
- OffsetZ = LASHeader_GetOffsetZ(header);
- MinX = LASHeader_GetMinX(header);
- MinY = LASHeader_GetMinY(header);
- MinZ = LASHeader_GetMinZ(header);
- MaxX = LASHeader_GetMaxX(header);
- MaxY = LASHeader_GetMaxY(header);
- MaxZ = LASHeader_GetMaxZ(header);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list