MCPcopy Create free account
hub / github.com/OSGeo/gdal / GetVRT

Function GetVRT

alg/zonal.cpp:972–1037  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

970
971 private:
972 static std::unique_ptr<GDALDataset>
973 GetVRT(GDALDataset &src, const GDALDataset &dst, bool &resampled)
974 {
975 resampled = false;
976
977 GDALGeoTransform srcGT, dstGT;
978 if (src.GetGeoTransform(srcGT) != CE_None)
979 {
980 return nullptr;
981 }
982 if (dst.GetGeoTransform(dstGT) != CE_None)
983 {
984 return nullptr;
985 }
986
987 CPLStringList aosOptions;
988 aosOptions.AddString("-of");
989 aosOptions.AddString("VRT");
990
991 aosOptions.AddString("-ot");
992 aosOptions.AddString("Float64");
993
994 // Prevent warning message about Computed -srcwin outside source raster extent.
995 // We've already tested for this an issued a more understandable message.
996 aosOptions.AddString("--no-warn-about-outside-window");
997
998 if (srcGT != dstGT || src.GetRasterXSize() != dst.GetRasterXSize() ||
999 src.GetRasterYSize() != dst.GetRasterYSize())
1000 {
1001 const double dfColOffset =
1002 std::fmod(std::abs(srcGT.xorig - dstGT.xorig), dstGT.xscale);
1003 const double dfRowOffset =
1004 std::fmod(std::abs(srcGT.yorig - dstGT.yorig), dstGT.yscale);
1005
1006 OGREnvelope oDstEnv;
1007 dst.GetExtent(&oDstEnv);
1008
1009 aosOptions.AddString("-projwin");
1010 aosOptions.AddString(CPLSPrintf("%.17g", oDstEnv.MinX));
1011 aosOptions.AddString(CPLSPrintf("%.17g", oDstEnv.MaxY));
1012 aosOptions.AddString(CPLSPrintf("%.17g", oDstEnv.MaxX));
1013 aosOptions.AddString(CPLSPrintf("%.17g", oDstEnv.MinY));
1014
1015 if (srcGT.xscale != dstGT.xscale || srcGT.yscale != dstGT.yscale ||
1016 std::abs(dfColOffset) > 1e-4 || std::abs(dfRowOffset) > 1e-4)
1017 {
1018 resampled = true;
1019 aosOptions.AddString("-r");
1020 aosOptions.AddString("average");
1021 }
1022
1023 aosOptions.AddString("-tr");
1024 aosOptions.AddString(CPLSPrintf("%.17g", dstGT.xscale));
1025 aosOptions.AddString(CPLSPrintf("%.17g", std::abs(dstGT.yscale)));
1026 }
1027
1028 std::unique_ptr<GDALDataset> ret;
1029

Callers 3

ProcessRasterZonesFunction · 0.85

Calls 14

fmodFunction · 0.85
absFunction · 0.85
CPLSPrintfFunction · 0.85
GDALTranslateOptionsNewFunction · 0.85
GDALTranslateFunction · 0.85
GDALTranslateOptionsFreeFunction · 0.85
ListMethod · 0.80
FromHandleFunction · 0.50
ToHandleFunction · 0.50
GetGeoTransformMethod · 0.45
GetRasterXSizeMethod · 0.45
GetRasterYSizeMethod · 0.45

Tested by

no test coverage detected