Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision Both sides next revision
image_expression_null_value_handling [2022/08/21 00:06]
admin [Proper Way of Testing for Image Values -- Guarding Against Null Values]
image_expression_null_value_handling [2022/08/21 13:24]
admin [Proper Way of Testing for Image Values -- Guarding Against Null Values]
Line 42: Line 42:
 ===== Proper Way of Testing for Image Values -- Guarding Against Null Values ===== ===== Proper Way of Testing for Image Values -- Guarding Against Null Values =====
  
-Lets assume that we want to replace all occurrences of a given valid value in a image with some other valid valid: ''​if i1 = 2 then 10 else i1''​. Since we are not explicitly guarding the ''​if then else''​ test against null, the expression is internally equivalent to ''​if ​isnull(i1) then null else if i1 = 2 then 10 else i1''​. So, simply using the most compact ''​if then else''​ definition works as expected.+Lets assume that we want to replace all occurrences of a given valid value in a image with some other valid valid: ''​if i1 = 2 then 10 else i1''​. Since we are not explicitly guarding the ''​if then else''​ test against null, the expression is internally equivalent to ''​if ​isNull(i1) then null else if i1 = 2 then 10 else i1''​. So, simply using the most compact ''​if then else''​ definition works as expected.
  
-Now, lets assume the we want do combine two images, a landscape map and road map, as a single map, where roads in the road map are represent by the value 1 and everything else is represented using the null value. Assuming the ''​i1''​ is the landscape map and ''​i2''​ is the road map, we might be tempted to write an expression as ''​if i2 = 1 then 1 else i1''​. Unfortunately that is not going to work, since the expression is internally equivalent to ''​if ​isnull(i2) then null else if i2 = 1 then 1 else i1''​ (we not guarding against null values). As you can see, all occurrences of null values on the road map will be replicated in the output map.+Now, lets assume the we want do combine two images, a landscape map and road map, as a single map, where roads in the road map are represent by the value 1 and everything else is represented using the null value. Assuming the ''​i1''​ is the landscape map and ''​i2''​ is the road map, we might be tempted to write an expression as ''​if i2 = 1 then 1 else i1''​. Unfortunately that is not going to work, since the expression is internally equivalent to ''​if ​isNull(i2) then null else if i2 = 1 then 1 else i1''​ (we not guarding against null values). As you can see, all occurrences of null values on the road map will be replicated in the output map.
  
-So, the proper way of doing the calculation is using a ''​isnullix)''​ to protect the ''​if then else''​ test against the null: ''​if not isnull(i2) and i2 = 1 then 1 else i2''​. Now we only test for the value in the road map if we are sure that value is not going to contaminate the whole ''​if then else'',​ turning the result into null.+So, the proper way of doing the calculation is using a ''​isNulliX )''​ to protect the ''​if then else''​ test against the null: ''​if not isNull(i2) and i2 = 1 then 1 else i2''​. Now we only test for the value in the road map if we are sure that value is not going to contaminate the whole ''​if then else'',​ turning the result into null.