ThinkGeo.com    |     Documentation    |     Premium Support

Load shape files

Hello,


I'm looking at your DisplayASimpleMapController sample and i'm wondering how can i load a shape file to build my map.


I used your initial code (in the controller) and added something like this:


 


 


  Map map = new Map("Map1",


                new System.Web.UI.WebControls.Unit(100, System.Web.UI.WebControls.UnitType.Percentage),


                new System.Web.UI.WebControls.Unit(100, System.Web.UI.WebControls.UnitType.Percentage));


 


map.MapUnit = GeographyUnit.DecimalDegree;


map.CurrentExtent = new RectangleShape(-125, 72, 50, -46);


 


map.MapBackground = new BackgroundLayer(new GeoSolidBrush(GeoColor.FromHtml("#E5E3DF")));


map.CustomOverlays.Add(new WorldMapKitWmsWebOverlay());


 


ShapeFileFeatureLayer coastLineLayer = new ShapeFileFeatureLayer("C:\\polygonlayer.shp");


            


LayerOverlay layerOverlay1 = new LayerOverlay();


layerOverlay1.Layers.Add(layerOverlay1);


map.CustomOverlays.Add( coastLineLayer);


return View(map);


 


However, i'm having some trouble loading the layers.


Can you give me some insight on what i'm doing wrong?


Regards,


 

 


 



Hello Hélder,


Thanks for your post and welcome to use MVC.


Your code have some problems:


First, Map contains many overlays, overlay contains man layers, so your code below need change to:



    LayerOverlay layerOverlay1 = new LayerOverlay();

            layerOverlay1.Layers.Add(coastLineLayer);

            map.CustomOverlays.Add(layerOverlay1);

Second, If you want to show a shapefile, you need set it's style, like if you want to show a street, you will need linestyle, you want to show a district, you need areastyle. So please see the code below:



            ShapeFileFeatureLayer coastLineLayer = new ShapeFileFeatureLayer(Server.MapPath("~/App_Data/cntry02.shp"));
            coastLineLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.CreateSimpleAreaStyle(GeoColor.FromArgb(255, 243, 239, 228), GeoColor.FromArgb(255, 218, 193, 163), 1);
            coastLineLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;

Third, You need set the map extent to right place to display the shapefile, you need know your object boundingbox or you can use:



            coastLineLayer.Open();
            map.CurrentExtent = coastLineLayer.GetBoundingBox();
            coastLineLayer.Close();

When you change the code to above, you can see your shapefile, I hope this can be help.


Regards,


Gary



I’ll try these changes. Thanks for your help.

Hello Hélder, 
  
 You are welcome, please feel free to let us know your problem. 
  
 Regards, 
  
 Gary