ThinkGeo.com    |     Documentation    |     Premium Support

Size limit on Geotiff files?

I have a geotiff file which is 246MB, along with an associated tfw file.



I am using the following code:

 Dim RasterLayer1 As New GeoTiffRasterLayer(“C:\Users\User\Desktop\Murphy\RasterFiles\70210.tif”)

 ClientRasterOverlay.Layers.Add(“RasterLayer” & Trim(LayerCounter.ToString), RasterLayer1) ’ add the layer to the overlay

 WinformsMap1.Refresh(ClientRasterOverlay)



I get the following error at the Refresh line. If I try a different geotiff file which is only 50MB in size the code works fine and I can see the layer on the map.



Is there a maximum size for geotiff files in MapSuite Desktop? I am running version 7.0.0.0 of MapSuite and Windows 7, 64 bit Pro with 24GB of RAM.

Or is there another way to load in geotiff files?



A first chance exception of type ‘System.OutOfMemoryException’ occurred in MapSuiteCore.dll

System.Transactions Critical: 0 : <TraceRecord xmlns=“schemas.microsoft.com/2004/10/E2ETraceEvent/TraceRecord” Severity=“Critical”><TraceIdentifier>msdn.microsoft.com/TraceCodes/System/ActivityTracing/2004/07/Reliability/Exception/Unhandled</TraceIdentifier><Description>Unhandled exception</Description><AppDomain>MVMControl3.vshost.exe</AppDomain><Exception><ExceptionType>System.OutOfMemoryException, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</ExceptionType><Message>Exception of type ‘System.OutOfMemoryException’ was thrown.</Message><StackTrace>   at ThinkGeo.MapSuite.Core.ManagedGeoTiffRasterSource.Rig=(Int32 lU0=, Int32 lk0=, Int32 l00=, Int32 mE0=, Int32 mU0=, Int32 mk0=)

   at ThinkGeo.MapSuite.Core.ManagedGeoTiffRasterSource.h00=(Int32 iE0=, Int32 iU0=, Int32 ik0=, Int32 i00=, Int32 jE0=, Int32 jU0=)

   at ThinkGeo.MapSuite.Core.ManagedGeoTiffRasterSource.GetImageCore(RectangleShape worldExtent, Int32 canvasWidth, Int32 canvasHeight)

   at ThinkGeo.MapSuite.Core.RasterSource.GetImage(RectangleShape worldExtent, Int32 canvasWidth, Int32 canvasHeight)

   at ThinkGeo.MapSuite.Core.GeoTiffRasterSource.GetImageCore(RectangleShape worldExtent, Int32 canvasWidth, Int32 canvasHeight)

   at ThinkGeo.MapSuite.Core.RasterSource.GetImage(RectangleShape worldExtent, Int32 canvasWidth, Int32 canvasHeight)

   at ThinkGeo.MapSuite.Core.RasterLayer.DrawCore(GeoCanvas canvas, Collection`1 labelsInAllLayers)

   at ThinkGeo.MapSuite.Core.GeoTiffRasterLayer.DrawCore(GeoCanvas canvas, Collection`1 labelsInAllLayers)

   at ThinkGeo.MapSuite.Core.Layer.Draw(GeoCanvas canvas, Collection`1 labelsInAllLayers)

   at ThinkGeo.MapSuite.DesktopEdition.LayerOverlay.DrawCore(GeoCanvas canvas)

   at ThinkGeo.MapSuite.DesktopEdition.Overlay.qhM=(GeoCanvas qxM=)

   at ThinkGeo.MapSuite.DesktopEdition.Overlay.Draw(GeoCanvas canvas)

   at ThinkGeo.MapSuite.DesktopEdition.WinformsMap.bhU=(IEnumerable`1 bxU=)

   at ThinkGeo.MapSuite.DesktopEdition.WinformsMap.bBU=(RectangleShape bRU=)

   at ThinkGeo.MapSuite.DesktopEdition.WinformsMap.txU=()

   at ThinkGeo.MapSuite.DesktopEdition.WinformsMap.sxU=(Int32 tBU=)

   at ThinkGeo.MapSuite.DesktopEdition.WinformsMap.Refresh(IEnumerable`1 redrawOverlays)

   at ThinkGeo.MapSuite.DesktopEdition.WinformsMap.Refresh(Overlay redrawOverlay)

   at MVMControl3.Form1.RefreshMap() in C:\Users\User\Documents\Visual Studio 2010\Projects\MVMControl3\MVMControl3\Forms\Form1.vb:line 2672

   at MVMControl3.Form1.MakeClientRasterMap() in C:\Users\User\Documents\Visual Studio 2010\Projects\MVMControl3\MVMControl3\Forms\Form1.vb:line 1877

   at MVMControl3.Form1.ClickHandlerLayers(Object sender, EventArgs e) in C:\Users\User\Documents\Visual Studio 2010\Projects\MVMControl3\MVMControl3\Forms\Form1.vb:line 7278

   at System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e)

   at System.Windows.Forms.ToolStripButton.OnClick(EventArgs e)

   at System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e)

   at System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e)

   at System.Windows.Forms.ToolStripItem.FireEventInteractive(EventArgs e, ToolStripItemEventType met)

   at System.Windows.Forms.ToolStripItem.FireEvent(EventArgs e, ToolStripItemEventType met)

   at System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea)

   at System.Windows.Forms.Control.WmMouseUp(Message&amp;amp; m, MouseButtons button, Int32 clicks)

   at System.Windows.Forms.Control.WndProc(Message&amp;amp; m)

   at System.Windows.Forms.ScrollableControl.WndProc(Message&amp;amp; m)

   at System.Windows.Forms.ToolStrip.WndProc(Message&amp;amp; m)

   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message&amp;amp; m)

   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message&amp;amp; m)

   at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

   at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG&amp;amp; msg)

   at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)

   at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)

   at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)

   at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()

   at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()

   at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)

   at MVMControl3.My.MyApplication.Main(String[] Args) in 17d14f5c-a337-4978-8281-53493378c1071.vb:line 81

   at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)

   at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)

   at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()

   at System.Threading.ThreadHelper.ThreadStart_Context(Object state)

   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)

   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)

   at System.Threading.ThreadHelper.ThreadStart()</StackTrace><ExceptionString>System.OutOfMemoryException: Exception of type ‘System.OutOfMemoryException’ was thrown.

   at ThinkGeo.MapSuite.Core.ManagedGeoTiffRasterSource.Rig=(Int32 lU0=, Int32 lk0=, Int32 l00=, Int32 mE0=, Int32 mU0=, Int32 mk0=)

   at ThinkGeo.MapSuite.Core.ManagedGeoTiffRasterSource.h00=(Int32 iE0=, Int32 iU0=, Int32 ik0=, Int32 i00=, Int32 jE0=, Int32 jU0=)

   at ThinkGeo.MapSuite.Core.ManagedGeoTiffRasterSource.GetImageCore(RectangleShape worldExtent, Int32 canvasWidth, Int32 canvasHeight)

   at ThinkGeo.MapSuite.Core.RasterSource.GetImage(RectangleShape worldExtent, Int32 canvasWidth, Int32 canvasHeight)

   at ThinkGeo.MapSuite.Core.GeoTiffRasterSource.GetImageCore(RectangleShape worldExtent, Int32 canvasWidth, Int32 canvasHeight)

   at ThinkGeo.MapSuite.Core.RasterSource.GetImage(RectangleShape worldExtent, Int32 canvasWidth, Int32 canvasHeight)

   at ThinkGeo.MapSuite.Core.RasterLayer.DrawCore(GeoCanvas canvas, Collection`1 labelsInAllLayers)

   at ThinkGeo.MapSuite.Core.GeoTiffRasterLayer.DrawCore(GeoCanvas canvas, Collection`1 labelsInAllLayers)

   at ThinkGeo.MapSuite.Core.Layer.Draw(GeoCanvas canvas, Collection`1 labelsInAllLayers)

   at ThinkGeo.MapSuite.DesktopEdition.LayerOverlay.DrawCore(GeoCanvas canvas)

   at ThinkGeo.MapSuite.DesktopEdition.Overlay.qhM=(GeoCanvas qxM=)

   at ThinkGeo.MapSuite.DesktopEdition.Overlay.Draw(GeoCanvas canvas)

   at ThinkGeo.MapSuite.DesktopEdition.WinformsMap.bhU=(IEnumerable`1 bxU=)

   at ThinkGeo.MapSuite.DesktopEdition.WinformsMap.bBU=(RectangleShape bRU=)

   at ThinkGeo.MapSuite.DesktopEdition.WinformsMap.txU=()

   at ThinkGeo.MapSuite.DesktopEdition.WinformsMap.sxU=(Int32 tBU=)

   at ThinkGeo.MapSuite.DesktopEdition.WinformsMap.Refresh(IEnumerable`1 redrawOverlays)

   at ThinkGeo.MapSuite.DesktopEdition.WinformsMap.Refresh(Overlay redrawOverlay)

   at MVMControl3.Form1.RefreshMap() in C:\Users\User\Documents\Visual Studio 2010\Projects\MVMControl3\MVMControl3\Forms\Form1.vb:line 2672

   at MVMControl3.Form1.MakeClientRasterMap() in C:\Users\User\Documents\Visual Studio 2010\Projects\MVMControl3\MVMControl3\Forms\Form1.vb:line 1877

   at MVMControl3.Form1.ClickHandlerLayers(Object sender, EventArgs e) in C:\Users\User\Documents\Visual Studio 2010\Projects\MVMControl3\MVMControl3\Forms\Form1.vb:line 7278

   at System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e)

   at System.Windows.Forms.ToolStripButton.OnClick(EventArgs e)

   at System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e)

   at System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e)

   at System.Windows.Forms.ToolStripItem.FireEventInteractive(EventArgs e, ToolStripItemEventType met)

   at System.Windows.Forms.ToolStripItem.FireEvent(EventArgs e, ToolStripItemEventType met)

   at System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea)

   at System.Windows.Forms.Control.WmMouseUp(Message&amp;amp; m, MouseButtons button, Int32 clicks)

   at System.Windows.Forms.Control.WndProc(Message&amp;amp; m)

   at System.Windows.Forms.ScrollableControl.WndProc(Message&amp;amp; m)

   at System.Windows.Forms.ToolStrip.WndProc(Message&amp;amp; m)

   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message&amp;amp; m)

   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message&amp;amp; m)

   at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

   at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG&amp;amp; msg)

   at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)

   at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)

   at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)

   at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()

   at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()

   at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)

   at MVMControl3.My.MyApplication.Main(String[] Args) in 17d14f5c-a337-4978-8281-53493378c1071.vb:line 81

   at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)

   at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)

   at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()

   at System.Threading.ThreadHelper.ThreadStart_Context(Object state)

   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)

   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)

   at System.Threading.ThreadHelper.ThreadStart()</ExceptionString></Exception></TraceRecord>

Oh, one more piece of the puzzle - using MapSuiteExplorer I can open that TIF with no problems and it displays properly. But as there is no code that I can see for how MapSuiteExplorer does it so I am still in the dark, though I now assume the 246MB size is not the cause of the crash.

Hi David. 
  
 Thanks for your post, we tried to recreate your problem with the latest dlls 7.0.110.0 with our own data, but it didn’t show up, would you please get the latest dlls and try it again, if the problem is still there, would please send us your data for a further test? If the file size has exceeded the upload file size, then would you please send it to forumsupport@thinkgeo.com
  
 Waiting for your further information. 
  
 Summer

Actually I managed to fix, or at least workaround my problem. Previously I was using: 



Dim RasterLayer1 As New GeoTiffRasterLayer(IO.Path.GetDirectoryName(cfgFile) & "&#34; & Split(SourceLine, ",")(0)) 



and having the problem reported. But when I changed to this: 



Dim RasterLayer1 As GdiPlusRasterLayer 

RasterLayer1 = New GdiPlusRasterLayer(IO.Path.GetDirectoryName(cfgFile) & "&#34; & Split(SourceLine, ",")(0)) 



it seems to work fine. I have no idea what the differences are between these 2 layers and why the less obvious one would work fine. Any idea what the difference is between the 2?

Hi David, 
  
 Great to hear the problem is sorted out, and if there are any other problem please feel free to let us know. 
  
 Best Regards, 
  
 Summer

Problem is worked around rather than sorted out, but confusion is still there - why would GDIPlusRasterLayer work on a TIFF file but GeoTiffRaster won’t work on the same file?

Hi David, 
  
 You’re right, it is a little strange, would you please provide us your data so that we could make a deeper investigation for it. 
  
 Waiting for your further information. 
  
 Best Regards 
  
 Summer

I uploaded the file as requested from the email instructions last week and replied to the email last week also. Guess I should let you know in this ticket that the data is there.

Hi David, 
  
 Sorry for the long time waiting. 
  
 We can show the tiff image from you without the exception, but the result is not as expected. After dug into it, we found there might be a bug in GeoTiffRasterLayer if the tiff image is tiled. As for this issue, I am afraid it is not easy to fix in a short time, so I have post it to our tracking system and I hope we can fix it ASAP. 
  
 The difference between using GeoTiffRasterLayer and GdiPlusRasterLayer is that the former is using the tiff dlls to operate it and the latter is rendering based on its RGB. But for the result, there is not a big difference. 
  
 Sorry to say you have to use the GdiPlusRasterLayer until the tiled tiff image issue is fixed. 
  
 Best regards, 
 Johnny