| 300 | |
| 301 | |
| 302 | void GDALWriter::doneFile() |
| 303 | { |
| 304 | if (!m_grid && !m_allowEmpty) |
| 305 | throw pdal_error("Unable to write GDAL data with no points " |
| 306 | "for output."); |
| 307 | else if (!m_grid) |
| 308 | return; |
| 309 | |
| 310 | std::array<double, 6> pixelToPos; |
| 311 | |
| 312 | pixelToPos[0] = m_grid->xOrigin(); |
| 313 | pixelToPos[1] = m_edgeLength; |
| 314 | pixelToPos[2] = 0; |
| 315 | pixelToPos[3] = m_grid->yOrigin() + (m_edgeLength * m_grid->height()); |
| 316 | pixelToPos[4] = 0; |
| 317 | pixelToPos[5] = -m_edgeLength; |
| 318 | gdal::Raster raster(m_outputFilename, m_drivername, m_srs, pixelToPos); |
| 319 | |
| 320 | m_grid->finalize(); |
| 321 | |
| 322 | gdal::GDALError err = raster.open(m_grid->width(), m_grid->height(), |
| 323 | m_grid->numBands(), m_dataType, m_noData, m_options); |
| 324 | |
| 325 | if (err != gdal::GDALError::None) |
| 326 | throwError(raster.errorMsg()); |
| 327 | int bandNum = 1; |
| 328 | |
| 329 | // Perhaps the grid should return an iterator, which would work as well. |
| 330 | double *src; |
| 331 | src = m_grid->data("min"); |
| 332 | double srcNoData = std::numeric_limits<double>::quiet_NaN(); |
| 333 | if (src && err == gdal::GDALError::None) |
| 334 | err = raster.writeBand(src, srcNoData, bandNum++, "min"); |
| 335 | src = m_grid->data("max"); |
| 336 | if (src && err == gdal::GDALError::None) |
| 337 | err = raster.writeBand(src, srcNoData, bandNum++, "max"); |
| 338 | src = m_grid->data("mean"); |
| 339 | if (src && err == gdal::GDALError::None) |
| 340 | err = raster.writeBand(src, srcNoData, bandNum++, "mean"); |
| 341 | src = m_grid->data("idw"); |
| 342 | if (src && err == gdal::GDALError::None) |
| 343 | err = raster.writeBand(src, srcNoData, bandNum++, "idw"); |
| 344 | src = m_grid->data("count"); |
| 345 | if (src && err == gdal::GDALError::None) |
| 346 | err = raster.writeBand(src, srcNoData, bandNum++, "count"); |
| 347 | src = m_grid->data("stdev"); |
| 348 | if (src && err == gdal::GDALError::None) |
| 349 | err = raster.writeBand(src, srcNoData, bandNum++, "stdev"); |
| 350 | for (auto& pct : m_percentiles) |
| 351 | { |
| 352 | src = m_grid->pctlData(pct); |
| 353 | if (src && err == gdal::GDALError::None) |
| 354 | err = raster.writeBand(src, srcNoData, bandNum++, "p" + std::to_string(pct)); |
| 355 | } |
| 356 | if (err != gdal::GDALError::None) |
| 357 | throwError(raster.errorMsg()); |
| 358 | |
| 359 | getMetadata().addList("filename", filename()); |
nothing calls this directly
no test coverage detected