ThinkGeo.com    |     Documentation    |     Premium Support

Displaying an S57FeatureLayer

Hi,


I used the code from the S57FeatureLayerSample project to try and display the sample S57data but have had no luck. One of the issues is that Map.Image = Bitmap is no longer supported so I changed Map.Image to Map.BackgroundImage = Bitmap. When I load the application i just get a white screen.


Imports ThinkGeo.MapSuite.Core

Public Class Form1


Private MapEngine As MapEngine = New MapEngine()

Private Bitmap As Bitmap = Nothing

Private FullExtent As RectangleShape = Nothing


Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load


 'Dim Layer As FdoFeatureLayer = New TabFeatureLayer

 ClearLayers()


 'Set the background color.

 MapEngine.BackgroundFillBrush = New GeoSolidBrush(GeoColor.GeographicColors.DeepOcean)

 Dim MarineChartLayer As S57FeatureLayer = New S57FeatureLayer("C:\Sample ThinkGEO Apps\ExtendingMapSuite_FDOSamples\FDO Samples\SampleData\IHO S-57 (ENC)\GB4X0000.000", Nothing, Nothing, "Area")

 MarineChartLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.Country1

 MarineChartLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20


 'Set the CurrentExtent to Full extent.

 MarineChartLayer.Open()


 FullExtent = MarineChartLayer.GetBoundingBox()

 MarineChartLayer.Close()

 MapEngine.CurrentExtent = ExtentHelper.GetDrawingExtent(FullExtent, Map.Width, Map.Height)


 'Add the new layers to the MapEngine.

 MapEngine.StaticLayers.Add("MarineChartLayer", MarineChartLayer)

 DrawImage()

End Sub


Private Sub ClearLayers()

 If MapEngine.StaticLayers.Count > 0 Then

  For Each Layer In MapEngine.StaticLayers

   Layer.Close()

  Next

 End If

 MapEngine.StaticLayers.Clear()

End Sub


Private Sub DrawImage()

 If IsNothing(Bitmap) = False Then

  Bitmap.Dispose()

 End If


 Bitmap = New Bitmap(Map.Width, Map.Height)

 MapEngine.OpenAllLayers()

 MapEngine.DrawStaticLayers(Bitmap, GeographyUnit.Meter)

 MapEngine.CloseAllLayers()

 Map.Image = Bitmap

End Sub

End Class



Hi Kevin,


In our sample project, the Map is a picturebox control, it has a property called Image that you can set a bitmap to it, are you using a picturebox control?
Any more questions please let me know.
Thanks,
sun

That would do it, thanks for your help.



You are welcome, and any more questions please let us know. 
  
 Thanks, 
  
 sun 


Hi 
 I tried to add ogrFeatureLayer as in the FDO sample application to Hellow World sample. I was expecting that the DataHoustonMuniBdySamp_Boundary,TAB layer would overlay the layer on top of the world map. WinformsMap1.Referesh raises an exception. 
 Should that work? Would I be able to add S57FeatureLayer to the world map (i.e. any thinkgeo map) or should it be a picture box only? 
  
 Thanks  
 Bill

Bill,


Welcome you to ThinkGeo MapSuite discussion forum.
 
I am guessing you are using the Desktop Edition, right?
 
It should work as you expected, we have a couple of small applications showing how to achieve this in our HowDoI samples:
Extending MapSuite\ LoadGeoDatabaseFeatureLayer
Extending MapSuite\ LoadGdalRasterLayer
 
The difference, you should try to create a S57 layer instead of a PersonalGeoDatabaseFeatureLayer.
 
Any more qeusitons just feel free to let me know.
 
Thanks.
 
Yale

Thanks a lot 
 I was able to do so. I can display an S57Feature layer as above. Two things more please: 
 a) Where are the HowDoI samples you are referriing to? 
 b) Is there a list of the S-57 featureClassName or descreption of these classes ? Only "Area" is mentiomed above… 
 Thnaks again

Thanks a lot 
 I was able to do so. I can display an S57Feature layer as above. Two things more please: 
 a) Where are the HowDoI samples you are referriing to? 
 b) Is there a list of the S-57 featureClassName or descreption of these classes ? Only "Area" is mentiomed above… 
 Thnaks again

Bill,


You are welcome.
 
1)      After you install our Desktop installer package, there would be some HowDoI samples exists showing how to simply use some important APIs.
You could open it in :
Full Edition : All Programs\ThinkGeo\ Map Suite Desktop Full Edition 3.0\ Winforms How Do I Samples
Eval Edition: All Programs\ThinkGeo\ Map Suite Desktop Eval Edition 3.0\ Winforms How Do I Samples
2)      Could you try the following APIs to get the list of S-57 featureClassName?

Collection<string> featureClassNames = s57Layer.GetFeatureClassNamesBySchema("OGRSchema");

 
Any more quesitons just feel free to let me know.
 
Thanks.
 
Yale

Thanks again 
  there are 5 classes: DSID,Point, Line, Area & Meta. I was able to read the Point, Line, & Area layers since they have a known style. How do I deal with the DSID and Meta classes ? 
 Also, when I plot all points in the S57Layer I can not tell the difference between a buoy and a wreck. I call using S57FeatureLayer (@path, null,null, "Point"). Are there other qualifiers I should be using to tell the difference? i.e. is there a description to the idColumnName and geometry ColumnName ? 
 best regards

Bill, 
  
 Hope my following answer can give you some helps. 
  
 I think up to now we are on the initial stage of supporting S57 data, so up to now I do not think we can support DSID & Meta, sorry for the inconvinience now. 
  
 For the idColumnName, you could use API to get all the columns and decides which column as the id column: 
 s57FeatureLayer.FeatureSource.GetColumns(); 
  
 For the geometry ColumnName, we only support the “Geometry” now which will be passed in to FDO dll as parameters. 
  
 Any more questions just feel free to let me know. 
  
 Thanks. 
  
 Yale 


Hi 
  I was able to use OGR tools and got shapefiles from the S57 ".000" file. I was able to display shape files. However, for sounding layer "SOUNDG" I am unable to display the value of the depth. This could be because of not knowing how to get the values out of the column "DEPTH" in the SOUNDG.shp layer or the values may not be there. Would you please help me read the depth values. The Columns of the SOUNDG.shp layer contain the depth column. I attached the shapefiles. Best regards. 


I e-mailed the files to Support@thinkgeo.com. Attention Yale … Thanks agin.

Bill,


Sorry for the delay, We are now preparing the new release. I think there would be some strange things happened when build index, we will do more investigations on it.Now you could go around this problem in following way:

        private void ShowHideLayer_Load(object sender, EventArgs e)
        {
            winformsMap1.MapUnit = GeographyUnit.DecimalDegree;
            winformsMap1.BackgroundOverlay.BackgroundBrush = new GeoSolidBrush(GeoColor.GeographicColors.ShallowOcean);
 
            ShapeFileFeatureLayer worldLayer = new ShapeFileFeatureLayer(@"C:\SOUNDG\SOUNDG.shp");
            worldLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.CreateSimpleAreaStyle(GeoColor.SimpleColors.Transparent, GeoColor.FromArgb(100, GeoColor.SimpleColors.Green));
            worldLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle = PointStyles.Capital1;
            worldLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
            worldLayer.RequireIndex = false;
 
            worldLayer.Open();
            RectangleShape boundingBox = worldLayer.GetBoundingBox();
            worldLayer.Close();
 
            LayerOverlay staticOverlay = new LayerOverlay();
            staticOverlay.Layers.Add("WorldLayer", worldLayer);
            
            winformsMap1.Overlays.Add("WorldOverlay", staticOverlay);
 
            winformsMap1.CurrentExtent = boundingBox;
            winformsMap1.Refresh();
        }
 

 
Any more questions just feel free to let me know.
 
Thanks.
 
Yale