Пример #1
0
        protected override List <ShapeFile> CreateMapLayers(HttpContext context)
        {
            List <ShapeFile> layers = new List <ShapeFile>();
            //load the shapefiles
            string    shapeFilePath = context.Server.MapPath("/demos/us_demo_files/counties.shp");
            ShapeFile sf            = new ShapeFile(shapeFilePath);

            //set the field name used to label the shapes
            sf.RenderSettings.FieldName            = "NAME";
            sf.RenderSettings.CustomRenderSettings = CreatePopulationRenderSettings(sf);
            layers.Add(sf);

            //set some CustomRenderSettings depending on the render type selected by the user
            int renderSettingsType = 0;

            int.TryParse(context.Request["rendertype"], out renderSettingsType);
            if (renderSettingsType == 0)
            {
                layers[0].RenderSettings.CustomRenderSettings = CreatePopulationRenderSettings(layers[0]);
            }
            else if (renderSettingsType == 1)
            {
                layers[0].RenderSettings.CustomRenderSettings = null;
            }
            else
            {
                layers[0].RenderSettings.CustomRenderSettings = CustomRenderSettingsUtil.CreateRandomColorCustomRenderSettings(layers[0].RenderSettings, 1);
            }

            return(layers);
        }
Пример #2
0
 private static ICustomRenderSettings CreatePopulationRenderSettings(ShapeFile sf)
 {
     Color[] populationColors = new Color[] { Color.FromArgb(255, 255, 128),
                                              Color.FromArgb(220, 225, 65),
                                              Color.FromArgb(255, 245, 0),
                                              Color.FromArgb(255, 128, 0),
                                              Color.FromArgb(255, 64, 0),
                                              Color.FromArgb(255, 0, 0) };
     //synchronize the creation. Another thread may be attempting to render
     //the map or create a custom render settings and reading from the
     //internal DBFReader is not thread safe
     lock (EGIS.ShapeFileLib.ShapeFile.Sync)
     {
         return(CustomRenderSettingsUtil.CreateQuantileCustomRenderSettings(
                    sf.RenderSettings,
                    populationColors,
                    "POP90_SQMI"));
     }
 }
        protected override List <ShapeFile> CreateMapLayers(HttpContext context)
        {
            List <ShapeFile> layers = new List <ShapeFile>();

            //lock (EGIS.ShapeFileLib.ShapeFile.Sync)
            {
                //load the shapefiles
                string    shapeFilePath = context.Server.MapPath("/demos/us_demo_files/counties.shp");
                ShapeFile sf            = new ShapeFile(shapeFilePath);
                //set the field name used to label the shapes
                sf.RenderSettings.FieldName            = "NAME";
                sf.RenderSettings.CustomRenderSettings = CreatePopulationRenderSettings(sf);
                layers.Add(sf);

                if (context.Request["getshape"] == null)
                {
                    //set some CustomRenderSettings depending on the render type selected by the user
                    int renderSettingsType = 0;
                    int.TryParse(context.Request["rendertype"], out renderSettingsType);
                    if (renderSettingsType == 0)
                    {
                        layers[0].RenderSettings.CustomRenderSettings = CreatePopulationRenderSettings(layers[0]);
                    }
                    else if (renderSettingsType == 2)
                    {
                        layers[0].RenderSettings.CustomRenderSettings = CustomRenderSettingsUtil.CreateRandomColorCustomRenderSettings(layers[0].RenderSettings, 1);
                    }
                    else if (renderSettingsType == 3)
                    {
                        layers[0].RenderSettings.CustomRenderSettings = null;
                        //here you could select some records based on an SQL query from another table or perhaps
                        //pass in some other parameter and determine what to select
                        //to keep this example simple we will just select the first 100 records
                        int numRecordstoSelect = Math.Min(100, layers[0].RecordCount);
                        for (int n = 0; n < numRecordstoSelect; ++n)
                        {
                            layers[0].SelectRecord(n, true);
                        }
                    }
                    else if (renderSettingsType == 4)
                    {
                        layers[0].RenderSettings.CustomRenderSettings = null;

                        //select records intersecting a circle
                        List <int> ind         = new List <int>();
                        PointD     centrePoint = new PointD(layers[0].Extent.Left + layers[0].Extent.Width / 2,
                                                            layers[0].Extent.Top + layers[0].Extent.Height / 2);
                        lock (ShapeFile.Sync) //shapefile not thread safe so need synchronise access. See Shapefile class description
                        {
                            layers[0].GetShapeIndiciesIntersectingCircle(ind, centrePoint, layers[0].Extent.Height / 4);
                        }
                        for (int n = 0; n < ind.Count; ++n)
                        {
                            layers[0].SelectRecord(ind[n], true);
                        }
                    }
                    else
                    {
                        //not using any custom render settings
                        layers[0].RenderSettings.CustomRenderSettings = null;
                    }
                }
            }

            return(layers);
        }