static GDALDataset* getGDALDatasetPtr(SEXP sxpDataset) { GDALDataset *pDataset = (GDALDataset *) getGDALObjPtr(sxpDataset); if (pDataset == NULL) error("Invalid GDAL dataset handle\n"); return(pDataset); }
static GDALDriver* getGDALDriverPtr(SEXP sxpDriver) { GDALDriver *pDriver = (GDALDriver *) getGDALObjPtr(sxpDriver); if (pDriver == NULL) error("Invalid GDAL driver\n"); return (pDriver); }
SEXP RGDAL_GetDescription(SEXP sxpObj) { void *pGDALObj = getGDALObjPtr(sxpObj); const char *desc = ((GDALMajorObject *)pGDALObj)->GetDescription(); return(mkString_safe(desc)); }
static GDALRasterBand* getGDALRasterPtr(SEXP sxpRasterBand) { GDALRasterBand *pRasterBand = (GDALRasterBand *) getGDALObjPtr(sxpRasterBand); if (pRasterBand == NULL) error("Invalid raster band\n"); return(pRasterBand); }
SEXP RGDAL_GetDescription(SEXP sxpObj) { void *pGDALObj = getGDALObjPtr(sxpObj); installErrorHandler(); const char *desc = ((GDALMajorObject *)pGDALObj)->GetDescription(); uninstallErrorHandlerAndTriggerError(); return(mkString_safe(desc)); }
SEXP RGDAL_SetMetadata(SEXP sxpObj, SEXP sxpMetadataList) { void *pGDALObj = getGDALObjPtr(sxpObj); SEXP sxpNames = getAttrib(sxpMetadataList, R_NamesSymbol); char **metadata = (char **) CPLCalloc(1, sizeof(char *)); const char *name, *value; if (isNull(sxpNames)) { int i; for (i = 0; i < length(sxpMetadataList); ++i) { value = asString(VECTOR_ELT(sxpMetadataList, i)); CSLAddString(metadata, value); } } else { int i; for (i = 0; i < length(sxpMetadataList); ++i) { name = asString(sxpNames, i); value = asString(VECTOR_ELT(sxpMetadataList, i)); CSLAddNameValue(metadata, name, value); } } CPLErr err = ((GDALMajorObject *)pGDALObj)->SetMetadata(metadata, NULL); if (err == CE_Failure) warning("Failed to set metadata\n"); return(sxpObj); }
SEXP RGDAL_GetMetadata(SEXP sxpObj, SEXP sxpDomain) { void *pGDALObj = getGDALObjPtr(sxpObj); const char *domain = asString(sxpDomain); char **metadata = ((GDALMajorObject *)pGDALObj)->GetMetadata(domain); if (metadata == NULL) return(R_NilValue); metadata = CSLDuplicate(metadata); SEXP sxpMetadata, sxpNames; PROTECT(sxpMetadata = allocVector(VECSXP, CSLCount(metadata))); PROTECT(sxpNames = allocVector(STRSXP, CSLCount(metadata))); int i; for (i = 0; i < CSLCount(metadata); ++i) { const char *field = CSLGetField(metadata, i); char *tag = NULL; const char *value = CPLParseNameValue(field, &tag); SET_VECTOR_ELT(sxpMetadata, i, value ? mkChar(value) : mkChar("")); SET_STRING_ELT(sxpNames, i, tag ? mkChar(tag) : mkChar("")); } setAttrib(sxpMetadata, R_NamesSymbol, sxpNames); UNPROTECT(2); return(sxpMetadata); }