ThinkGeo.com    |     Blog    |     Wiki    |     Support

Clip or Mask a raster layer

I’d like to display MrSID images using Map Suite.  The images are county-based NAIP imagery.  I’ve looked at the MrSidRasterLayer, which looks like it would “almost” work quite well and I’d probably want to do something similar to what is done in the Multi Geo Raster Layer sample.  My issue is the black no-data areas within each MrSID image that I need to avoid drawing so they don’t obscure content from an adjacent image.  Is there any decent, reasonably-high-performance method for masking away those no-data areas when I’m drawing the layer?  I’ve attached a sample of what the no-data looks like from MrSID images from two adjacent counties in Kansas.

Hi John, 
  
 It looks you forget upload your sample. 
  
 I am sorry we haven’t got enough information from your description, could you please upload your project with data again? 
  
 Regards, 
  
 Don

Here’s an image of what I mean.  It was grabbed from displaying the two county images in QGIS rather than programmatically generated by a MapSuite program.  I’ll start creating a sample MapSuite program to generate a similar map, but the issue should be evident from this image…  Images are rectangular, counties are not, therefore there is a part of the rectangular image for each county that is black representing areas without data.  If the black is displayed then it obscures some of the adjacent image.









If wanting the actual data I used, it is large (too large to attach here I believe), but is freely
available from the NRCS GeoSpatial Data Gateway
(gdg.sc.egov.usda.gov/)



Click on GET Data

Select “Kentucky” as the state

Select Counties “Clark” and “Madison” and click the “Submit Selected Counties” button

Choose the “2012 National Ag. Imagery Program Mosaic, 2 maps 706.632 MB” option and then click the “CONTINUE” button

Leave “FTP” as the delivery method and click "CONTINUE"

Enter your contact info and click "CONTINUE"

Click "PLACE ORDER"

You’ll then receive an email in a few minutes that contains a link to use to download the data.



Hopefully also attached is a modified version of the MultiGeoRasterLayer sample program that displays those two MrSID files instead of JPEG images.  As stated before, the data files are rather large so could not be included in the sample, rather must be obtained from the Data Gateway.

002_001_MultiGeoRasterLayer.zip (268 KB)

Hi John, 
  
 I am downloading the data but it looks the speed is slow. 
  
 I find a related topic which looks like helpful: thinkgeo.com/forums/MapSuite/tabid/143/aft/12571/Default.aspx 
  
 You can move the code from Johnny in ConvertToExternalProjectionCore function to your CustomeMrSidFeatureSource class, you need want to override GetImageCore function, then modify the image to make black area don’t rendered. 
  
 If I still misunderstand your purpose please let me know. 
  
 Regards, 
  
 Don 
  


OK, I believe I’ve made the changes you suggested (I’ve attached the updated project).  That’s a lot better,
but as MrSid is a lossy compression, there are several pixels of
"near-black" that this method does not eliminated as can be seen in the
attached screen shots.  I think I’ll tackle the problem by including a
clipping polygon for each MrSid image and then attempt to use that polygon (converted to screen coordinates) to copy only the intersecting
pixels from the source image to the destination.  Hopefully I can find some reasonably-efficient means for doing that.  Sure would be nice if the option of including a clipping polygon were baked into the MrSidRasterLayer (or better yet into all RasterLayers), but you’ve given me enough direction that I should be able to tackle it from here.  Thanks!









MultiGeoRasterLayerNew.zip (270 KB)

Sorry, I made a mistake regarding the source data.  It is from Kentucky, not Kansas…  I’ve corrected the download instructions in my earlier post.

Hi John, 
  
 Thanks for sharing the solution here, seems that the searching the edge of the image takes some effects here. Anyway, please let me know if any problems here. 
  
 Regards, 
 Johnny