64 std::string layerName,
68 std::string tempFolder,
69 std::map<std::string, std::string> driverOptions)
74 GDALDataset *p_vectorDS = p_vector->
getDataset();
75 GDALDataset *p_rasterDS = p_raster->
getDataset();
80 std::string projection = std::string(p_rasterDS->GetProjectionRef());
82 OGRLayer *p_layer = p_vector->
getLayer(layerName);
84 std::string errmsg =
"could not find layer associated with " + layerName;
85 throw std::runtime_error(errmsg);
87 const OGRSpatialReference *p_layerSrs = p_layer->GetSpatialRef();
89 throw std::runtime_error(
"vector layer does not have a projection.");
91 if (projection ==
"") {
92 throw std::runtime_error(
"raster does not have a projection.");
94 if (!OGRSpatialReference(projection.c_str()).IsSame(p_layerSrs)) {
95 throw std::runtime_error(
"raster and vector projections don't match.");
98 bool isMEMDataset = !largeRaster && filename ==
"";
99 bool isVRTDataset = largeRaster && filename ==
"";
104 band.
name =
"strat_" + layerName;
105 std::vector<helper::VRTBandDatasetInfo> VRTBandInfo;
108 GDALDataset *p_dataset =
nullptr;
113 else if (isVRTDataset) {
119 std::filesystem::path filepath = filename;
120 std::string extension = filepath.extension().string();
122 if (extension ==
".tif") {
126 throw std::runtime_error(
"sgs only supports .tif files right now");
129 p_dataset =
helper::createDataset(filename, driver, width, height, geotransform, projection, &band, 1,
false, driverOptions);
135 char ** argv =
nullptr;
138 argv = CSLAddString(argv,
"-a");
139 argv = CSLAddString(argv,
"strata");
142 argv = CSLAddString(argv,
"-sql");
143 argv = CSLAddString(argv, query.c_str());
146 argv = CSLAddString(argv,
"-dialect");
147 argv = CSLAddString(argv,
"SQLITE");
149 GDALRasterizeOptions *options = GDALRasterizeOptionsNew(argv,
nullptr);
153 !isVRTDataset ? p_dataset : VRTBandInfo[0].p_dataset,
160 GDALRasterizeOptionsFree(options);
164 GDALClose(VRTBandInfo[0].p_dataset);
170 return isMEMDataset ?