<div dir="ltr"><div><div>Hi,<br><br></div>My nodata value is 0, so I think following your suggestion I can get the desired effect with just this:<br><br>PROCESSING "LUT=1:1,10:1,20:255" <br><br></div><div>The initial tests look very promising, it seems that it's really possible to replace SCALE with this LUT directive.</div><div><br></div><div>Thanks a lot for your help! So no code change seems to be needed after all.<br><br></div><div>Best regards,<br></div><div>Bernhard<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Nov 28, 2022 at 6:24 PM Rahkonen Jukka <<a href="mailto:jukka.rahkonen@maanmittauslaitos.fi">jukka.rahkonen@maanmittauslaitos.fi</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div class="msg82358918732189171">





<div style="overflow-wrap: break-word;" lang="FI">
<div class="m_-8340027823797539283WordSection1">
<p class="MsoNormal"><span>Hi,<u></u><u></u></span></p>
<p class="MsoNormal"><span><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">What is your nodata value and the datatype of the source raster? If you deal with byte or int16 data and the nodata value is 0, you can keep it unaltered in your LUT, then map values
 1-9 into 1 that is almost black, range 10-19 as you wish, and 20 and above into white.<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">-Jukka Rahkonen-<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
<div style="border-color:rgb(225,225,225) currentcolor currentcolor;border-style:solid none none;border-width:1pt medium medium;padding:3pt 0cm 0cm">
<p class="MsoNormal"><b>Lähettäjä:</b> Mallinger, Bernhard <<a href="mailto:bernhard.mallinger@eox.at" target="_blank">bernhard.mallinger@eox.at</a>>
<br>
<b>Lähetetty:</b> maanantai 28. marraskuuta 2022 16.53<br>
<b>Vastaanottaja:</b> Rahkonen Jukka <<a href="mailto:jukka.rahkonen@maanmittauslaitos.fi" target="_blank">jukka.rahkonen@maanmittauslaitos.fi</a>><br>
<b>Kopio:</b> <a href="mailto:mapserver-users@lists.osgeo.org" target="_blank">mapserver-users@lists.osgeo.org</a><br>
<b>Aihe:</b> Re: [MapServer-users] Distinguish between pixels outside of SCALE range and nodata pixels<u></u><u></u></p>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<div>
<div>
<div>
<div>
<div>
<p class="MsoNormal">Thank you for the suggestion, I have tried it now.<u></u><u></u></p>
</div>
<p class="MsoNormal" style="margin-bottom:12pt">Since the values below the minimum scale is mapped to 0, i tried using the following instruction:<br>
<br>
PROCESSING "LUT=0:1"<u></u><u></u></p>
</div>
<p class="MsoNormal" style="margin-bottom:12pt">This actually maps the values below the minimum to 1, but also the no data values. Do you know if there's a way where I can distinguish between those two using LUT?<u></u><u></u></p>
</div>
<p class="MsoNormal">Best,<u></u><u></u></p>
</div>
<p class="MsoNormal">Bernhard<u></u><u></u></p>
<div>
<div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</div>
</div>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<div>
<p class="MsoNormal">On Mon, Nov 28, 2022 at 3:26 PM Rahkonen Jukka <<a href="mailto:jukka.rahkonen@maanmittauslaitos.fi" target="_blank">jukka.rahkonen@maanmittauslaitos.fi</a>> wrote:<u></u><u></u></p>
</div>
<blockquote style="border-color:currentcolor currentcolor currentcolor rgb(204,204,204);border-style:none none none solid;border-width:medium medium medium 1pt;padding:0cm 0cm 0cm 6pt;margin-left:4.8pt;margin-right:0cm">
<div>
<div>
<div>
<p class="MsoNormal">Hi,<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US">Have you tried the LUT processing option
<a href="https://eur06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fmapserver.org%2Finput%2Fraster.html&data=05%7C01%7Cjukka.rahkonen%40maanmittauslaitos.fi%7C046212920572444ef6f008dad1504c07%7Cc4f8a63255804a1c92371d5a571b71fa%7C0%7C0%7C638052440048006207%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=hvl4h66%2BfJZhlIiyZKx10SqqwPXyFdyfIZgEooRMqjY%3D&reserved=0" target="_blank">
https://mapserver.org/input/raster.html</a>?</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US">-Jukka Rahkonen-</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US"> </span><u></u><u></u></p>
<div style="border-style:solid none none;border-width:1pt medium medium;padding:3pt 0cm 0cm;border-color:currentcolor">
<p class="MsoNormal"><b>Lähettäjä:</b> MapServer-users <<a href="mailto:mapserver-users-bounces@lists.osgeo.org" target="_blank">mapserver-users-bounces@lists.osgeo.org</a>>
<b>Puolesta </b>Mallinger, Bernhard<br>
<b>Lähetetty:</b> maanantai 28. marraskuuta 2022 15.35<br>
<b>Vastaanottaja:</b> <a href="mailto:mapserver-users@lists.osgeo.org" target="_blank">
mapserver-users@lists.osgeo.org</a><br>
<b>Aihe:</b> [MapServer-users] Distinguish between pixels outside of SCALE range and nodata pixels<u></u><u></u></p>
</div>
<p class="MsoNormal"> <u></u><u></u></p>
<div>
<div>
<p class="MsoNormal" style="margin-bottom:12pt">Hello,<u></u><u></u></p>
</div>
<p class="MsoNormal">We have maps where we want the color scale go from e.g. 10 to 20, so we are using this directive:<u></u><u></u></p>
<div>
<p class="MsoNormal" style="margin-bottom:12pt"><br>
<span style="font-family:"Courier New"">PROCESSING "SCALE_1=10.0,20.0" </span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:12pt">This works great by itself, however it also means that pixels with values of e.g. 5 are rendered as transparent, which is the same as the nodata pixels. So in the final image, you can't
 tell if data is present but the values are too low, or if there just isn't any data.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:12pt">So the behaviour we would like is that values below 10 are rendered as black and values over 20 are rendered as white.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Is this somehow possible with mapscript?<br>
<br>
<br>
We tried to have a look in the source code, and there is this line, which effectively assigns 0 to pixels below the minimum:<br>
<a href="https://eur06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2FMapServer%2FMapServer%2Fblob%2Fmain%2Fmapdrawgdal.c%23L1555&data=05%7C01%7Cjukka.rahkonen%40maanmittauslaitos.fi%7C046212920572444ef6f008dad1504c07%7Cc4f8a63255804a1c92371d5a571b71fa%7C0%7C0%7C638052440048006207%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=eGNr6SWL6I0yQbse%2F5SAuV7QjISOBoyi30BxYB13C9Y%3D&reserved=0" target="_blank">https://github.com/MapServer/MapServer/blob/main/mapdrawgdal.c#L1555</a><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">It turns out that this small code change actually produces the desired behavior:<u></u><u></u></p>
</div>
<div>
<pre id="m_-8340027823797539283m_5106503157384725565m_-2264963374138121724gmail-code-7">       fScaledValue = (float) ((pafRawData[i]-dfScaleMin)*dfScaleRatio);<u></u><u></u></pre>
<pre> <u></u><u></u></pre>
<pre>       if( fScaledValue < 0.0 )<u></u><u></u></pre>
<pre>-        pabyBuffer[i] = 0;<u></u><u></u></pre>
<pre>+        if (pafRawData[i] > 0) {<u></u><u></u></pre>
<pre>+            pabyBuffer[i] = 1;<u></u><u></u></pre>
<pre>+        } else {<u></u><u></u></pre>
<pre>+            pabyBuffer[i] = 0;<u></u><u></u></pre>
<pre style="margin-bottom:12pt">+        }<u></u><u></u></pre>
<pre style="margin-bottom:12pt" id="m_-8340027823797539283m_5106503157384725565m_-2264963374138121724gmail-code-7"><span style="font-family:"Arial",sans-serif">(I.e. if the original value was greater than 0, then assign 1 to this pixel such that it will be black and not transparent.)</span><u></u><u></u></pre>
<pre style="margin-bottom:12pt" id="m_-8340027823797539283m_5106503157384725565m_-2264963374138121724gmail-code-7"><span style="font-family:"Arial",sans-serif">If this behavior can't yet be configured via mapscript, we could work on a pull request to implement this behavior, which would then be activated via a new configuration option.<br>Do you have any thoughts on this? Does this make sense to you as a feature?</span><u></u><u></u></pre>
<pre id="m_-8340027823797539283m_5106503157384725565m_-2264963374138121724gmail-code-7"><span style="font-family:"Arial",sans-serif">Best regards,<br>Bernhard</span><u></u><u></u></pre>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</div>
</div>
</div>
</div>

</div></blockquote></div>