Revision: 70125
          http://sourceforge.net/p/brlcad/code/70125
Author:   starseeker
Date:     2017-08-24 19:36:23 +0000 (Thu, 24 Aug 2017)
Log Message:
-----------
Not working correctly yet - checkpoint work on enabling UTM transformation.

Modified Paths:
--------------
    brlcad/trunk/src/libgcv/plugins/gdal/gdal.cpp

Modified: brlcad/trunk/src/libgcv/plugins/gdal/gdal.cpp
===================================================================
--- brlcad/trunk/src/libgcv/plugins/gdal/gdal.cpp       2017-08-24 16:56:17 UTC 
(rev 70124)
+++ brlcad/trunk/src/libgcv/plugins/gdal/gdal.cpp       2017-08-24 19:36:23 UTC 
(rev 70125)
@@ -105,9 +105,9 @@
 }
 
 HIDDEN int
-get_dataset_info(struct conversion_state *gs)
+get_dataset_info(GDALDatasetH hDataset)
 {
-    char *gdal_info = GDALInfo(gs->hDataset, NULL);
+    char *gdal_info = GDALInfo(hDataset, NULL);
     if (gdal_info) bu_log("%s", gdal_info);
     CPLFree(gdal_info);
     return 0;
@@ -240,6 +240,7 @@
 gdal_read(struct gcv_context *context, const struct gcv_opts *gcv_options,
        const void *options_data, const char *source_path)
 {
+    struct bu_vls epsg_str = BU_VLS_INIT_ZERO;
     struct conversion_state *state;
     BU_GET(state, struct conversion_state);
     gdal_state_init(state);
@@ -257,30 +258,29 @@
        return 0;
     }
 
-    (void)get_dataset_info(state);
+    (void)get_dataset_info(state->hDataset);
 
     int zone = gdal_utm_zone(state);
-    (void)gdal_utm_epsg(state, zone);
+    int epsg = gdal_utm_epsg(state, zone);
+    bu_vls_sprintf(&epsg_str, "EPSG:%d", epsg);
 
-#if 0
-    GDALDataType eDT = 
GDALGetRasterDataType(GDALGetRasterBand(state->hDataset,1));
-    GDALDriverH hD = GDALGetDriverByName("MEM");
-    const char *src_Wkt = GDALGetProjectionRef(state->HDataset);
     OGRSpatialReference oSRS;
-    oSRS.SetUTM(gdal_utm_zone(state));
-    oSRS.SetWellKnownGeogCS();
-    const char *dst_Wkt;
+    oSRS.SetWellKnownGeogCS(bu_vls_addr(&epsg_str));
+    oSRS.SetUTM(zone, TRUE);
+
+    char *dst_Wkt = NULL;
     oSRS.exportToWkt(&dst_Wkt);
-    void *hTsfA = GDALCreateGenImgProjTransformer(state->hDataset, src_Wkt, 
NULL dst_Wkt, FALSE, 0, 1);
+    void *hTsfA = GDALCreateGenImgProjTransformer(state->hDataset, 
GDALGetProjectionRef(state->hDataset), NULL, dst_Wkt, FALSE, 0, 1);
+
+    int nPixels=0, nLines=0;
     double adfDstGeoTransform[6];
-    int nPixels=0, nLines=0;
     CPLErr eErr = GDALSuggestedWarpOutput(state->hDataset, 
GDALGenImgProjTransform, hTsfA, adfDstGeoTransform, &nPixels, &nLines);
     GDALDestroyGenImgProjTransformer(hTsfA);
     if (eErr != CE_None) return 0;
 
-    GDALDatasetH pjdata = GDALCreate(hD, NULL, nPixels, nLines, 
GDALGetRasterCount(state->hDataset), eDT, NULL);
+    GDALDatasetH pjdata = GDALCreate(GDALGetDriverByName("MEM"), "", nPixels, 
nLines, GDALGetRasterCount(state->hDataset),
+           GDALGetRasterDataType(GDALGetRasterBand(state->hDataset,1)), NULL);
     if (pjdata == NULL) return 0;
-
     GDALSetProjection(pjdata, dst_Wkt);
     GDALSetGeoTransform(pjdata, adfDstGeoTransform);
     GDALWarpOptions *w_opts = GDALCreateWarpOptions();
@@ -301,14 +301,16 @@
     oOperation.ChunkAndWarpImage(0, 0, GDALGetRasterXSize(pjdata), 
GDALGetRasterYSize(pjdata));
     GDALDestroyGenImgProjTransformer(w_opts->pTransformerArg);
     GDALDestroyWarpOptions(w_opts);
-#endif
 
+    bu_log("\nTransformed dataset info:\n");
+    (void)get_dataset_info(pjdata);
+
     /* Read the data into something a DSP can process */
-    unsigned int xsize = GDALGetRasterXSize(state->hDataset);
-    unsigned int ysize = GDALGetRasterYSize(state->hDataset);
+    unsigned int xsize = GDALGetRasterXSize(pjdata);
+    unsigned int ysize = GDALGetRasterYSize(pjdata);
     unsigned short *uint16_array = (unsigned short *)bu_calloc(xsize*ysize, 
sizeof(unsigned short), "unsigned short array");
 
-    GDALRasterBandH band = GDALGetRasterBand(state->hDataset, 1);
+    GDALRasterBandH band = GDALGetRasterBand(pjdata, 1);
 
     /*
        int bmin, bmax;
@@ -326,7 +328,8 @@
            for (int j = 0; j < GDALGetRasterBandXSize(band); ++j) {
                /* This is the critical assignment point - if we get this
                 * indexing wrong, data will not look right in dsp */
-               uint16_array[(ysize-i-1)*ysize+j] = scanline[j];
+               uint16_array[i*ysize+j] = scanline[j];
+               //bu_log("%d, %d: %d\n", i, j, scanline[j]);
            }
        }
     }
@@ -334,9 +337,10 @@
     /* Got it - write the binary object to the .g file */
     mk_binunif(state->wdbp, "test.data", (void *)uint16_array, 
WDB_BINUNIF_UINT16, xsize * ysize);
 
-    /* Done reading - close input file */
+    /* Done reading - close out inputs */
     CPLFree(scanline);
     GDALClose(state->hDataset);
+    GDALClose(pjdata);
 
 
     /* TODO: if we're going to BoT (3-space mesh, will depend on the transform 
requested) we will need different logic... */

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
BRL-CAD Source Commits mailing list
brlcad-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/brlcad-commits

Reply via email to