ThinkGeo.com    |     Documentation    |     Premium Support

Non-ascii characters in files to GeoTiffRasterLayer doesn't work

Hello.


I have a bunch of tiff-files in C:\Coordinator\GIS\Karta_VÄST\Terrängk.  I try to open them with (for example):


            GeoTiffRasterLayer trnLayer = new GeoTiffRasterLayer(@"C:\Coordinator\GIS\Karta_VÄST\Terrängk\t05bno.tif");


but get back a dialog that says it can't open the file (notice the mangled characters):



 


It works if I move the files to a path without national characters, like this:


            GeoTiffRasterLayer trnLayer = new  GeoTiffRasterLayer(@"C:\Coordinator\GIS\t05bno.tif");


How do I get around this?  It is unfeasable for me to move the files, as they are part of a large dataset we get from a client and that are updated from time to time.


I also use TabFileFeatureLayer, and that class has no problems with national characters.  GdiPlusRasterLayer also works, but the documentation says GeoTiff is better.


Thanks,


   Jan D.


 


 


 




 



Jan, 
 Thanks for your post and questions. 
  
 Just let you know that our GeoTiffRasterLayer is using the third party library which seems more stable and faster, while I think that is the root reason it cannot support national characters. If you want, could you send me the tiff file you are testing against to recreate this problem? 
 geotiff.osgeo.org/ 
  
 I do not think it will make great difference between GeoTiffRasterLayer and GdiPlusRasterlayer unless very large Tiff file was involved or some special kinds of TIFF type are trying to be used. 
  
 Any more questions please feel free to let me know. 
  
 Thanks. 
  
 Yale 


I'd rather use GeoTiff, as it seems to be about 4-5 times faster on my dataset (a lot of small tiff files).  Relocating the tiff files to a directory without national characters may be an option.  I don't think it is any point in sending you the tiff files in question as it is the directory name in the ptah that has the national characters.  Anyway, the files are under a NDA, so I couldn't send it anyway.


Thanks for the answer.


 


   Jan D.


 



When looking at the code of libgeotiff ut just uses the underlying libtiff TIFFOpen.  That accepts UTF-8 path names.  However, your constructor to GeoTiff only accepts a C# String, i.e. UTF-16.  Maybe your conversion from UTF-16 to UTF-8 is incomplete?  Given the text in the dialog, it looks that way. 
  
    Jan D. 


Jan, 
  
 Yes, I confirm that this problem is caused by the data path contains non-english charactors, I used our sample tif file, if put it to the folder like yours, it will throw the sample exception, but it works usually.  
  
 I will contact our engineer to make sure how we can fix it. 
  
 Thanks 
 James

Thanks for the speedy response. 
  
   Jan D. 


Jan, 
  
 I think this problem is like Yale said, it’s a problem for geotiff.dll which is a thrid part project, we have no idea about how to fix it. 
  
 Maybe you just can use GdiPlusRasterLayer to work it. 
  
 Thanks 
 James

Jan, 
  
   Let us look into this a bit more there may be something we can do.  One possible solution in the short term would be to when the layer open we create a temporary copy in the windows temp folder.  After that all the access will go against that file.  For you it would be seamless except for the time it takes to copy the first time.  The third party code is all in C and may a little difficult to fix this issue.  Let me see what we can find in that code as well. 
  
 David

I am falling back to GdiPlusRasterLayer now, but as I said, it is much slower so I’d rather not use it.  The copy to temp strategy doesn’t seem sane, when are files removed from temp?  Will my disk become full? Are you copying to temp once for each user?  Are you sure you are not exposing possible secret files by doing this? 
  
 Thanks, 
  
    Jan D.

Jan, 
  
   I was trying to offer you some work around to the issue while we address it.  We are looking into a solution that fixes the problem but allows you to use the fast library.  We should know more on Monday or Tuesday. 
  
 To answer your question around a temp file solution.  Also I think the temp file solution would be sane but questionable. :-)   
  
 Q: When are the files removed? A: When you call the Layer.Close()  It would clean up its own temp file. 
 Q: Will my disk become full? A:No, if you don’t call the close it would re-use it if it was already there. 
 Q: Are you copying the files to temp for each user? A:Depends on how we do it.  It would be there for the current user.  It gets removed when the layer is closed. 
 Q: Are you sure you are not exposing possible secret file by doing this? A: I am not sure what you mean here.  It is a copy of a file they already have access to.  I am not sure your scenario. 
  
 David

Power user has GIS files under NDA, they are on a DVD. 
 Program runs and reads/copies files from DVD to temp. 
 Program crashes, or there is a power failure or a blue screen in the OS or something else that prevenst Close from being called. 
 Power user removes DVD and leaves. 
 Plain user logs in. 
 Plain user can now read secret files in Temp (?).

Jan, 
  
   I see, just to be clear though, is that your scenario or just a made up one?   The reason I ask is that it can impact the type of solution we suggest.  I find it strange that the GeoTiff library is faster when reading from a DVD than the GDI+ Raster layer.  The GeoTiff library reads the data quite often, which would make it hit the dvd often which is slow,  where the GDI+ one load it into memory and then manipulates it.  What are the sizes of the tiff files?  Maybe the issue is that the sizes are large so that causes the image interpolation to be really slow in the GDI+ case. 
  
 David

Jan, 
  
   Thinking about this has given me some ideas on speeding up the Tiff support for the GDI+ raster layer.  We will work on both angles, the GeoTiff character issue and the speed up issue, and I am sure one of them will get you to where you need to be.  You are the first person to have this issue which is strange as we have lots of international users all around the globe, maybe most of them use formats other than Tiff. 
  
 David

I really don’t know how the GIS-files are used, but as they are considered trade secret, I must make sure they don’t leak. 
 Thinking about different scenarios helps one to close leaks. 
  
 Another data point w.r.t. the character issue is that Quantum GIS uses the same libraries as you and they don’t have this issue.

Jan, 
  
 Thanks for your additional information, I think we maybe consider create anther GeoTiffRasterLayer using different library instead of current GeoTiff library. 
  
 Thanks 
 James

Jan, 
  
   We are still working the two angles and will have an update as soon as we can. 
  
 David

Jan, 
  
 We are working on the GdiPlusRasterLayer performance issue. Just give you an update how we did it and where we are.  
  
 We found now GdiPlusRasterLayer is slow because no matter how far we zoom in or out, we need to stretch or condense the original whole image and if the image is big, it takes time. So what we are doing is 2 parts. First while we zooming out the image get smaller and smaller, if it is smaller than its original size, we start to look if we can create some smaller images as cache so the target image can be condensed from that one instead of the original big one. For example, I have a 4000*4000 image, I keep zooming out and now the image on map is 2000*2000. I then condense the original image to 2048*2048, save it to memory as cache and condense this one to 2000*2000. If I keep zooming out and the image now is 800*800, I then create another copy with the size of 1024*1024 and condense this one to the size I want. In this way we take some more memory but the speed is much faster. Second, how about when zooming in? The original big image is tiled in memory and if we zoom in, we only need to get the tiles we need to draw, stretch them and draw it on the map. This also improves the performance a lot. 
  
 It is almost ready and we will keep you updated on this. 
  
 Thanks, 
  
 Ben

Thanks, I’m using GdiPlus now, it is not too slow.  Also, it seems that TIFF-files rendered with GdiPlus looks better.  Is that something you know about? 
 I can make some screen shots if you are interested. 
  
    Jan D. 


Jan, 
  
 Please provide screen-shots and I think it would be useful to make the thing better. 
  
 Thanks 
 James

Ok, here are screenshots.  Notice that GdiPlus seems to be doing some kind of anti-aliasing (at least that is what it looks like).  Notice the texts and brown lines at lower zoom level.  As for now, I can't send the tiff.  We are hoping to get permission to do so later.

The final screen shot is in the next message (500kb limit).


     Jan D.


 



withGdiPlus2.JPG (92.2 KB)
withGdiPlus.JPG (136 KB)
withGeoTiff2.JPG (104 KB)