ThinkGeo.com    |     Documentation    |     Premium Support

Sample to view ENC Maps

 I have read that it is possible to load and render ENC Maps with Map Suite. Please, could you send me a complete sample ?


TY.



Hi Stéphane, 
  
 I think you can refer to this thread for more information: 
 gis.thinkgeo.com/Support/DiscussionForums/tabid/143/aff/21/aft/7521/afv/topic/Default.aspx 
  
 Regards, 
 Tsui

I have try to use the sample "Extending MapSuite\LoadGeoDatabaseFeatureLayer" and create a S57 layer instead of a PersonalGeoDatabaseFeatureLayer (see code bellow) but the program crash with an exception "System.Reflection.TargetInvocationException" on "worldLayer.Open()". 
  
  
        private void wpfMap1_Loaded(object sender, RoutedEventArgs e)
        {
            try
            {
                Process.GetCurrentProcess().ProcessorAffinity = (System.IntPtr)1; 

                wpfMap1.MapUnit = GeographyUnit.Meter;
                wpfMap1.CurrentExtent = new RectangleShape(2149408.38465815, 246471.365609125, 2204046.63635703, 213231.081162168);

                S57FeatureLayer worldLayer = new S57FeatureLayer(@"C:\ENC Data\ENC_ROOT\US3MI01M\US3MI01M.000", null, null, "Mains");
                //PersonalGeoDatabaseFeatureLayer worldLayer = new PersonalGeoDatabaseFeatureLayer(@"…\SampleData\Data\JORWD6gdb.mdb", null, null, "Mains");
                worldLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.Country1;
                worldLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;

                worldLayer.Open();
                RectangleShape rs = worldLayer.GetBoundingBox();
                worldLayer.Close();


                LayerOverlay worldOverlay = new LayerOverlay();
                worldOverlay.Layers.Add(new BackgroundLayer(new GeoSolidBrush(GeoColor.FromArgb(255, 233, 232, 214))));
                worldOverlay.Layers.Add("WorldLayer", worldLayer);
                wpfMap1.Overlays.Add("WorldOverlay", worldOverlay);

                wpfMap1.Refresh();
            }
            catch (FileNotFoundException ex)
            {
                string message = "You should get Fdo dependencies from [Install-Path]\Developer Reference\System32\, and put MapSuiteFdoExtensionx86 folder to System32 folder.\r\n\r\n" + ex.Message;
                MessageBox.Show(message, "FileNotFound", MessageBoxButton.OK, MessageBoxImage.Error, MessageBoxResult.OK, (MessageBoxOptions)0);
            }
        }


 Hi Stéphane,



I just downloaded some s-57 data from the internet, tested it with S57FeatureLayer, and it worked correctly.


This is the code that I used to load the s-57 data:


S57FeatureLayer testLayer = new S57FeatureLayer(@"C:\Users\cuipengfei\Desktop\SampleTG\CA49995B.000", null, null, "Area");


 


testLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.County2;


testLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;


 


LayerOverlay testOverlay = new LayerOverlay();


testOverlay.Layers.Add(testLayer);


wpfMap1.Overlays.Add(testOverlay);


 


wpfMap1.Refresh();


 


If you can send us the data that you were trying to load, then we can figure out what is causing your problem.


 


Regards,


Tsui



Hi Stéphane, 
  
  Do you have all the c:\Windows\System32\FdoExtension stuff in place? 
  
  Regards, 
  
 Carlos.

Hi Carlos, 
  
 Yes, I have copied "MapSuiteFdoExtensionx86" to C:\windows\system32.  
  
 Regards, 
  
 Stéphane

 Hi Carlos,



 


I guess all the dependencies are in place, because the exception Stéphane got is TargetInvocationException, which means the reflection is successful but the reflected assembly ran into some problem.


If the dependencies are missing, then the exception will be something like “Can’t find MapSuiteFDOExtension.dll”.


But of course, I am only guessing, I could be wrong.


And thanks for helping out others in this forum J


 


Regards,


Tsui



Hi Tsui, 
  
 I use a file downloaded on the internet (us5tx51m.zip : home.gdal.org/projects/s57/index.html). 
  
 Regards, 
  
 Stéphane

Hi Tsui, 
  
 I have tried your code, thank you.  
 There is no more exception during loading but there is nothing visible and a crash on exit ("System.Reflection.TargetInvocationException"). 
  
 I have also tried an other sample for which data are provided (LoadTabFileFeatureLayer) and the result is an exception "System.Reflection.TargetInvocationException" on "wpfMap1.Refresh()". 
  
 Stéphane

I have found the origine of the exception.  
 I was using .NET 4 instead of 3.5 in project properties. 
  
 Stéphane

 Hi Stéphane,



 


I downloaded the file, tried to load it by using this code:


S57FeatureLayer testLayer = new S57FeatureLayer(@"C:\Users\cuipengfei\Desktop\SampleTG\US5TX51M.000", null, null, "Area");


 


testLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.Country2;


testLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;


 


LayerOverlay testOverlay = new LayerOverlay();


testOverlay.Layers.Add(testLayer);


wpfMap1.Overlays.Add(testOverlay);


 


wpfMap1.CurrentExtent = testOverlay.GetBoundingBox();


wpfMap1.Refresh();


 


And it worked out correctly; this is a screen shot of the result that I got:



Please try this code snippet and let us know if it works.


 


Regards,


Tsui


 



Hi Tsui, 
  
 Every thing is ok now. 
 The problem was a bad .NET version in my project properties. 
 After that correction and after adding the good extent "wpfMap1.CurrentExtent = testOverlay.GetBoundingBox();", the map is visible like in your screen shot. 
  
 Thank you for your help.  
  
 Regards, 
  
 Stéphane 


You are welcome, Stéphane. 
 Please let us know if you have any other questions. 
  
 Regards, 
 Tsui