Opened 9 months ago

Last modified 8 months ago

#2766 assigned defect

FIX - rasql - overlay returns incorrect result when combining multiple time slices

Reported by: Bang Pham Huu Owned by: Dimitar Misev
Priority: major Milestone: 10.2
Component: server Version: 10.2
Keywords: Cc: javierurien@…
Complexity: Medium

Description

Use the ingredients below with the tiff files provided by Javier at https://drive.google.com/drive/folders/1PS0qyIm8d1Uug7RbAQ3sOiiADFysYS4c to import testing coverage TOPSAR_irregular

{
    "config": {
        "service_url": "http://localhost:8080/rasdaman/ows",
        "automated": true,
        "track_files": true,
        "subset_correction": false,
        "blocking": false,
        "mock": false,
        "default_null_values": [
            -0.999,
            "*:0"
        ]
    },
    "input": {
        "coverage_id": "TOPSAR_irregular",
        "paths": [
                "*.tif"
        ]
    },
    "recipe": {
        "name": "general_coverage",
        "options": {
            "wms_import": true,
            "scale_levels": [
                2,
                4,
                8
            ],
            "import_order": "ascending",
            "coverage": {
                "crs": "OGC/0/AnsiDate?axis-label='time'@EPSG/0/4326",
                "metadata": {
                    "type": "xml",
                    "global": {
                        "Title": "'This is the SAOCOM SSM TOPSAR coverage'"
                    }
                },
                "slicer": {
                    "type": "gdal",
                    "bands": [
                        {
                            "name": "soil_moisture",
                            "identifier": "soil_moisture",
                            "uomCode": "m3/m3"
                        }
                    ],
                    "axes": {
                        "time": {
                            "min": "datetime(regex_extract('${file:name}', '(.*)_([0-9]{8})([0-9]{6})_(.*)',2), 'YYYYMMDD')",
                            "type": "ansidate",
                            "irregular": true,
                            "dataBound": false
                        },
                        "Long": {
                            "min": "${gdal:minX}",
                            "max": "${gdal:maxX}",
                            "resolution": "${gdal:resolutionX}"
                        },
                        "Lat": {
                            "min": "${gdal:minY}",
                            "max": "${gdal:maxY}",
                            "resolution": "${gdal:resolutionY}"
                        }
                    }
                }
            },
            "tiling": "ALIGNED [0:0, 0:1023, 0:1023]"
        }
    }
}

The output of dbinfo() of the pyramid which will be used by the WMS GetMap requests below:

rasql -q 'select dbinfo(c, "printtiles=1") from TOPSAR_irregular_8 as c' --out string

  Result object 1: {
 "oid": "702465",
 "baseType": "marray <float,[D0(*:*),D1(*:*),D2(*:*)]>",
 "setTypeName": "TOPSAR_irregular_Set",
 "nullValues": "[-0.999000,-179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000:0.000000]",
 "mddTypeName": "TOPSAR_irregular_Array",
 "tileNo": "51",
 "totalSize": "55059056",
 "tiling": {
	"tilingScheme": "aligned",
	"tileSize": "4194304",
	"tileConfiguration": "[0:0,0:1023,0:1023]",
	"tileDomains":
	[
		"[1:1,-1816:-889,-749:274]",
		"[1:1,-1816:-889,275:500]",
		"[1:1,-1816:-889,501:559]",
		"[2:2,1044:1318,2498:3521]",
		"[2:2,1044:1318,3522:3748]",
		"[2:2,1044:2067,3749:3861]",
		"[2:2,1319:2342,1715:2738]",
		"[2:2,1319:2342,2739:2965]",
		"[2:2,1319:2342,2966:3076]",
		"[2:2,1319:2123,3077:3748]",
		"[2:2,2068:2123,3749:3861]",
		"[2:2,2343:2367,1715:2738]",
		"[2:2,2343:2367,2739:2965]",
		"[2:2,2343:2367,2966:3076]",
		"[3:3,-1017:-743,2537:3115]",
		"[3:3,-1017:6,3116:3787]",
		"[3:3,-1017:6,3788:3899]",
		"[3:3,-742:-444,1753:2217]",
		"[3:3,-742:281,2218:3003]",
		"[3:3,-742:281,3004:3115]",
		"[3:3,-443:544,968:1991]",
		"[3:3,-443:544,1992:2217]",
		"[3:3,7:63,3116:3787]",
		"[3:3,7:63,3788:3899]",
		"[3:3,282:308,2218:3003]",
		"[3:3,282:308,3004:3115]",
		"[1:1,-2329:-1351,2091:2151]",
		"[1:1,-2329:-1351,1864:2090]",
		"[1:1,-2329:-1351,840:1863]",
		"[0:0,1:951,1024:1249]",
		"[0:0,1:951,0:1023]",
		"[0:0,0:951,1250:1310]",
		"[0:0,0:0,1025:1249]",
		"[0:0,0:0,1:1024]",
		"[0:0,0:0,0:0]",
		"[0:0,-98:-51,4420:4482]",
		"[0:0,-98:-51,4193:4419]",
		"[0:0,-98:-51,3169:4192]",
		"[0:0,-264:711,2044:2104]",
		"[0:0,-264:711,1311:2043]",
		"[0:0,-264:-1,794:1310]",
		"[0:0,-420:-332,5207:5271]",
		"[0:0,-540:433,2105:2898]",
		"[0:0,-540:-265,1685:2104]",
		"[0:0,-1122:-332,4483:5206]",
		"[0:0,-1122:-99,4420:4482]",
		"[0:0,-1122:-99,4193:4419]",
		"[0:0,-1122:-99,3169:4192]",
		"[0:0,-1444:-421,5207:5271]",
		"[0:0,-1444:-1123,4980:5206]",
		"[0:0,-1444:-1123,3956:4979]"
	]
 },
 "index": {
	"type": "rpt_index",
	"PCTmax": "4096",
	"PCTmin": "2048"
 }
}

  • This WMS GetMap request works fine to combine 3 time slices "2022-10-07", "2022-10-08" and "2022-10-09"
http://localhost:8080/rasdaman/ows?service=WMS&version=1.3.0&request=GetMap&layers=TOPSAR_irregular&bbox=-42.54421429899902,-65.61416625976562,-29.171667098999023,-55.18390145976562&time=2022-10-07/2022-10-09&width=800&height=600&crs=EPSG:4326&format=image/png&transparent=true&styles=

which generated this rasql query:

SELECT ENCODE((  ( scale( scale( ( ( c0[0,-2329:2367,-749:5271] OVERLAY c0[1,-2329:2367,-749:5271] OVERLAY c0[2,-2329:2367,-749:5271] ) ), [0:799, 0:599] )  [0:799, 0:599], [0:799, 0:599] ) )  ), "png", "{\"nodata\":[0.0]}") FROM TOPSAR_irregular_8 AS c0

The result looks like below:

https://i.imgur.com/KzpguGv.png

  • But this WMS GetMap request doesn't return correct result when it combines 4 time slices: "2022-10-07", "2022-10-08", "2022-10-09" and "2022-10-10".


The generated rasql query is:

 SELECT ENCODE((  ( scale( scale( ( ( c0[0,-2329:2367,-749:5271] OVERLAY c0[1,-2329:2367,-749:5271] OVERLAY c0[2,-2329:2367,-749:5271] OVERLAY c0[3,-2329:2367,-749:5271] ) ), [0:799, 0:599] )  [0:799, 0:599], [0:799, 0:599] ) )  ), "png", "{\"nodata\":[0.0]}") FROM TOPSAR_irregular_8 AS c0

and it looks like below, NOTE: all the time slices below "2022-10-10" are not shown.

https://i.imgur.com/BaNlEkK.png

Change History (1)

comment:1 by Javier Urien, 8 months ago

Just a FYI. I would consider it to be quite useful if an interval whose limits do not coincide with a time slice still work with the internal dates to the interval.

Note: See TracTickets for help on using tickets.