Changeset: 12d4dadfc0a8 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=12d4dadfc0a8
Modified Files:
        sql/backends/monet5/vaults/lidar/lidar.c
Branch: data-vaults
Log Message:

[LiDAR] Attach now creates columns of type decimal for the coordinates

Still need to update the LIDARload function to actually fill the table
with decimals.


diffs (92 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
@@ -689,6 +689,7 @@ str LIDARattach(Client cntxt, MalBlkPtr 
        sql_schema *sch;
        sql_table *lidar_fl, *lidar_tbl, *lidar_col, *tbl = NULL;
        sql_column *col;
+       sql_subtype t;
        str msg = MAL_SUCCEED;
        str fname = *getArgReference_str(stk, pci, 1);
        str tname = NULL;
@@ -697,16 +698,9 @@ str LIDARattach(Client cntxt, MalBlkPtr 
        char *p;
        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; */
-       /* columns */
-       /* double ScaleX, ScaleY, ScaleZ, OffsetX, OffsetY, OffsetZ; */
-       /* double MinX, MinY, MinZ, MaxX, MaxY, MaxZ; */
+       struct stat buf;
+       int decimal_digitsX, decimal_digitsY, decimal_digitsZ;
+       int total_digitsX, total_digitsY, total_digitsZ;
 
        if (pci->argc == 3) {
                tname = *getArgReference_str(stk, pci, 2);
@@ -886,18 +880,54 @@ str LIDARattach(Client cntxt, MalBlkPtr 
        store_funcs.append_col(m->session->tr,
                                                   mvc_bind_column(m, 
lidar_col, "MaxZ"), &header->hi->maxZ, TYPE_dbl);
 
-       free(header->hi);
-       free(header);
-
        /* add a lidar_column tuple */
        col = mvc_bind_column(m, lidar_col, "id");
        cid = store_funcs.count_col(tr, col, 1) + 1;
        /* create an SQL table to hold the LIDAR table */
        cnum = 3;//x, y, z. TODO: Add all available columnt
        tbl = mvc_create_table(m, sch, tname_low, tt_table, 0, SQL_PERSIST, 0, 
cnum);
-       mvc_create_column_(m, tbl, "x", "double", 64);
-       mvc_create_column_(m, tbl, "y", "double", 64);
-       mvc_create_column_(m, tbl, "z", "double", 64);
+       /* mvc_create_column_(m, tbl, "x", "double", 64); */
+       /* mvc_create_column_(m, tbl, "y", "double", 64); */
+       /* mvc_create_column_(m, tbl, "z", "double", 64); */
+
+       decimal_digitsX = (int)ceil(-log(header->hi->scaleX)/log(10));
+       decimal_digitsY = (int)ceil(-log(header->hi->scaleY)/log(10));
+       decimal_digitsZ = (int)ceil(-log(header->hi->scaleZ)/log(10));
+
+       total_digitsX = decimal_digitsX + 
(int)ceil(log(header->hi->maxX)/log(10));
+       total_digitsY = decimal_digitsY + 
(int)ceil(log(header->hi->maxY)/log(10));
+       total_digitsZ = decimal_digitsZ + 
(int)ceil(log(header->hi->maxZ)/log(10));
+
+#ifndef NDEBUG
+       fprintf(stderr, "Scale: %f %f %f\n",
+                       header->hi->scaleX,
+                       header->hi->scaleY,
+                       header->hi->scaleZ);
+       fprintf(stderr, "Number of decimal digits %d %d %d\n",
+                       (int)ceil(-log(header->hi->scaleX)/log(10)),
+                       (int)ceil(-log(header->hi->scaleY)/log(10)),
+                       (int)ceil(-log(header->hi->scaleZ)/log(10)));
+
+       fprintf(stderr, "Number of digits %d %d %d\n",
+                       (int)ceil(log(header->hi->maxX)/log(10)),
+                       (int)ceil(log(header->hi->maxY)/log(10)),
+                       (int)ceil(log(header->hi->maxZ)/log(10)));
+
+       fprintf(stderr, "decimal digits: %d %d %d\n", decimal_digitsX, 
decimal_digitsY, decimal_digitsZ);
+       fprintf(stderr, "total digits: %d %d %d\n", total_digitsX, 
total_digitsY, total_digitsZ);
+#endif
+
+       sql_find_subtype(&t, "decimal", total_digitsX, decimal_digitsX);
+       mvc_create_column(m, tbl, "x", &t);
+
+       sql_find_subtype(&t, "decimal", total_digitsY, decimal_digitsY);
+       mvc_create_column(m, tbl, "y", &t);
+
+       sql_find_subtype(&t, "decimal", total_digitsZ, decimal_digitsZ);
+       mvc_create_column(m, tbl, "z", &t);
+
+       free(header->hi);
+       free(header);
 
        return MAL_SUCCEED;
 }
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to