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
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits