ThinkGeo.com    |     Documentation    |     Premium Support

Use shapefile (France country)

Hey !



I have a little problem with my shapefile.



In fact, its my first time with ThinkGeo, and i copy your code in your documentation :




if (!Page.IsPostBack)
{
    // Set the Map Unit. The reason for setting it to DecimalDegrees is that is what the shapefile’s unit of measure is inherently in.
    Map1.MapUnit = GeographyUnit.DecimalDegree;
 
    // We create a new Layer and pass the path to a Shapefile into its constructor.
    ShapeFileFeatureLayer worldLayer = new ShapeFileFeatureLayer(MapPath(“SampleData/71-.shp”));
 
    // Set the worldLayer with a preset Style, as AreaStyles.Country1 has YellowGreen background and black border, our worldLayer will have the same render style. 
    worldLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.Country1;
 
    // This setting will apply from ZoonLevel01 to ZoomLevel20, that means we can see the world the same style with ZoomLevel01 all the time no matter how far we zoom out/in.
    worldLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
 
    // We need to add the world layer to map’s Static Overlay.
    Map1.StaticOverlay.Layers.Add(worldLayer);
 
    // Set a proper extent for the map, that’s the place you want it to display.
    Map1.CurrentExtent = new RectangleShape(5, 78, 30, 26);
}



But it said : “You don’t have the corresponding idx file for your shape file. You can use the static method ShapeFileFeatureSource.BuildIndexFile() or ShapeFileFeatureLayer.BuildIndexFile()  to build an idx file for the shape file, or you can set the RequireIndex property to false.”



So I put this line in my code : ShapeFileFeatureLayer.BuildIndexFile(MapPath(“SampleData/71-.shp”));



And with this line, I have a white control, i havent map in my map-Control…



I use this shapefile : 71-Saone et Loire : actualitix.fr/actgeoshap/71-saone-et-loire.zip

In this website : actualitix.com/shapefiles-des-departements-de-france.html



Can you help me ?

Hi Nao,



Thanks for choosing Map Suite and welcome to our forums!



First of all, I want to explain the index files which you’ve built for the shape file. Those files are generated by map suite and they can bring a big improvement of the performance. In map suite products line, the index files are required but it only needs to generate one time.



As for the empty map, we checked your shape file and found its coordinates system is built on EPSG 2154 (unit is meter), which we can get it from the .prj file. However, our documentation guide’s shape file is built on EPSG 4326, which is known as longitude, latitude. So, like the comments 

“// Set the Map Unit. The reason for setting it to DecimalDegrees is that is what the shapefile’s unit of measure is inherently in.”. As the shape file’s unit is meter, we should use the Meter as the map unit and change the CurrentExtent as the unit as meter also. 



Please try the codes below:


if (!Page.IsPostBack)
            {
                Map1.MapBackground.BackgroundBrush = new GeoSolidBrush(GeoColor.FromHtml("#E5E3DF"));
                Map1.MapUnit = GeographyUnit.Meter;
 
                ShapeFileFeatureLayer worldLayer = new ShapeFileFeatureLayer(MapPath(“SampleData/71-.shp”));
 
                worldLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.Country1;
 
                ShapeFileFeatureLayer.BuildIndexFile(MapPath(“SampleData/71-.shp”), BuildIndexMode.DoNotRebuild);
 
                worldLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
 
                Map1.StaticOverlay.Layers.Add(worldLayer);
 
                worldLayer.Open();
                Map1.CurrentExtent = worldLayer.GetBoundingBox();
 
                WorldMapKitWmsWebOverlay worldMapKitOverlay = new WorldMapKitWmsWebOverlay(){ Projection = WorldMapKitProjection.SphericalMercator };
                Map1.CustomOverlays.Add(worldMapKitOverlay);
            }

Please feel free to let us know if any questions.

Thanks,

Troy

Ho thx dude :) ! 



But i want to use this shape with the OpenStreetMap in background. 



Because, my shape (71-.shp) will be red if I want to see the outline of this country ! 



I use this : france-departements.tar.gz

In export.openstreetmap.fr/contours-administratifs/



I made this :




01.Map1.MapBackground.BackgroundBrush = new GeoSolidBrush(GeoColor.FromHtml("#E5E3DF"));
02.Map1.CurrentExtent = new RectangleShape(-13939426.6371, 6701997.4056, -7812401.86, 2626987.386962);
03.Map1.MapUnit = GeographyUnit.DecimalDegree;
04. 
05.Map1.MapTools.OverlaySwitcher.Enabled = true;
06.Map1.MapTools.MouseCoordinate.Enabled = true;
07. 
08. 
09.WorldMapKitWmsWebOverlay openStreetMap = new WorldMapKitWmsWebOverlay();
10. 
11.Map1.CustomOverlays.Add(openStreetMap);
12. 
13.ShapeFileFeatureLayer shapeFileFeatureLayer = new ShapeFileFeatureLayer(MapPath(“france-departements\france-departements.shp”));
14.shapeFileFeatureLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.CreateSimpleAreaStyle(  GeoColor.FromArgb(100, GeoColor.StandardColors.Pink), GeoColor.StandardColors.Black);
15.shapeFileFeatureLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
16. 
17.ManagedProj4Projection proj4 = new ManagedProj4Projection();
18.proj4.InternalProjectionParametersString = ManagedProj4Projection.GetEpsgParametersString(4326);
19.proj4.ExternalProjectionParametersString = ManagedProj4Projection.GetEpsgParametersString(4326);
20. 
21.proj4.Open();
22.Vertex projVertex = proj4.ConvertToExternalProjection(747032, 1297787);
23.proj4.Close();
24. 
25.shapeFileFeatureLayer.FeatureSource.Projection = proj4;
26. 
27.LayerOverlay layerOverlay = new LayerOverlay();
28.layerOverlay.Layers.Add(“HouseDistricts”, shapeFileFeatureLayer);
29. 
30.Map1.CustomOverlays.Add(layerOverlay);
31. 
32.shapeFileFeatureLayer.Open();
33.Map1.CurrentExtent = shapeFileFeatureLayer.GetBoundingBox();
34.shapeFileFeatureLayer.Close();





But its not OpenStreetMap :/



Help 



Hi Nao, 
  
 As the projection of OpenStreet map is EPSG:3857(unit is meter), so we need to set MapUnit to GeographyUnit.Meter. 
  
 As for the shapefile you want to display is based on EPSG:4326, so we need a projection conversion with Proj4Projection. The internal projection is the projection what your data is(EPSG:4326), while the external projection is what you want convert to. 
  
 Please try below code and see if it works. 
  
             if (!Page.IsPostBack)
            {
                Map1.MapBackground.BackgroundBrush = new GeoSolidBrush(GeoColor.FromHtml("#E5E3DF"));
                Map1.MapUnit = GeographyUnit.Meter;

                Map1.MapTools.OverlaySwitcher.Enabled = true;
                Map1.MapTools.MouseCoordinate.Enabled = true;

                OpenStreetMapOverlay openStreetMap = new OpenStreetMapOverlay();

                Map1.CustomOverlays.Add(openStreetMap);

                ShapeFileFeatureLayer shapeFileFeatureLayer = new ShapeFileFeatureLayer(MapPath("france-departements\france-departements.shp"));                shapeFileFeatureLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.CreateSimpleAreaStyle(GeoColor.FromArgb(100, GeoColor.StandardColors.Pink), GeoColor.StandardColors.Black);
                shapeFileFeatureLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;

                ManagedProj4Projection proj4 = new ManagedProj4Projection();
                proj4.InternalProjectionParametersString = ManagedProj4Projection.GetEpsgParametersString(4326);
                proj4.ExternalProjectionParametersString = ManagedProj4Projection.GetEpsgParametersString(3857);

                shapeFileFeatureLayer.FeatureSource.Projection = proj4;

                LayerOverlay layerOverlay = new LayerOverlay();
                layerOverlay.Layers.Add("HouseDistricts", shapeFileFeatureLayer);

                Map1.CustomOverlays.Add(layerOverlay);

                shapeFileFeatureLayer.Open();
                Map1.CurrentExtent = shapeFileFeatureLayer.GetBoundingBox();
                shapeFileFeatureLayer.Close();
            }
 
  
 Any question please feel free to let us know. 
  
 Thanks 


Hello 



Thx for your help, it work, but now, i want to test with the watercourses.



My map-focus is done, it focus the shape, but my shape is invisible… I use this code : 



With : services.sandre.eaufrance.fr/telechargement/geo/BDCarthage/FXX/2013/arcgis/Regions/26_BOURGOGNE/

COURS D’EAU.SHP : services.sandre.eaufrance.fr/telechargement/geo/BDCarthage/FXX/2013/arcgis/Regions/26_BOURGOGNE/COURS_D_EAU.SHP.zip


01.ShapeFileFeatureLayer shapeFileFeatureLayer = new ShapeFileFeatureLayer(MapPath(“26_BOURGOGNE/COURS_D_EAU.SHP”));
02.ShapeFileFeatureLayer.BuildIndexFile(MapPath(“26_BOURGOGNE/COURS_D_EAU.SHP”), BuildIndexMode.DoNotRebuild);
03.shapeFileFeatureLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.CreateSimpleAreaStyle(GeoColor.FromArgb(100, GeoColor.StandardColors.Pink), GeoColor.StandardColors.Black);
04.shapeFileFeatureLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
05. 
06.ManagedProj4Projection proj4 = new ManagedProj4Projection();
07.proj4.InternalProjectionParametersString = ManagedProj4Projection.GetEpsgParametersString(2154);
08.proj4.ExternalProjectionParametersString = ManagedProj4Projection.GetEpsgParametersString(3857);
09. 
10.shapeFileFeatureLayer.FeatureSource.Projection = proj4;
11. 
12.LayerOverlay layerOverlay = new LayerOverlay();
13.layerOverlay.Layers.Add(“HouseDistricts”, shapeFileFeatureLayer);
14. 
15.Map1.CustomOverlays.Add(layerOverlay);
16. 
17.shapeFileFeatureLayer.Open();
18.Map1.CurrentExtent = shapeFileFeatureLayer.GetBoundingBox();
19.shapeFileFeatureLayer.Close();

I dont understand…  spatialreference.org/ref/epsg/rgf93-lambert-93/

Hi Nao, 
  
 Your code only have one problem, your data is line shape but not area shape, so please modify that like this: 
  
 1. Add  
       Map1.MapUnit = GeographyUnit.Meter; 
 2. Modify 
       shapeFileFeatureLayer.ZoomLevelSet.ZoomLevel01.DefaultLineStyle = LineStyles.InternationalBorder1; // Modify your line style here 
  
 I have rendered your data succeed. 
  
 Regards, 
  
 Don