private void btnOK_Click(object sender, EventArgs e)
        {
            // valida os campos
            if (!this.ValidarCampos())
            {
                return;
            }

            this.Cursor = Cursors.WaitCursor;

            //enviar os parametros pra function do banco
            try
            {
                var incidenciaDoencaEmUnidadeSaude = new DoencaEmUnidadeSaudeRepositorio();


                //retorna uma lista de unidades de saude com incidencia da doença escolhida
                var listaIncidenciaDoencaEmDistritosSanitarios = incidenciaDoencaEmUnidadeSaude.GerarMapaTematicoEmDistritosSanitarios((int)this.cmbDoenca.SelectedValue,
                                                                                                                                       this.dateTPDe.Value.Year, this.dateTPAte.Value.Year);
                listaIncidenciaDoencaEmDistritosSanitarios.Count.ToString();

                //criar a Feature Class
                IFeatureClass featureClass = CreateNewShapeFile(@"C:\Sistemas\GestaoSMS\Files\Mapas\MapaIncidencia" + cmbDoenca.Text + "EmDistritosSanitarios" + DateTime.Now.ToString("ddMMyyyyhhmmss") + ".shp");

                //criar uma feature buffer
                IFeatureBuffer featureBuffer = featureClass.CreateFeatureBuffer();

                //campo nome
                int indexNome = featureClass.FindField("nome");

                //campo incidências
                int indexIncidencia = featureClass.FindField("incidencia");

                //criar um feature cursor com buffer ativado
                IFeatureCursor featureCursor = featureClass.Insert(true);

                foreach (MapaDoencaEmDistritoSanitario incidencia in listaIncidenciaDoencaEmDistritosSanitarios)
                {
                    //passar de Wkb para IGeometry
                    var geometry = WKBToGeometry(incidencia.DistritosSanitarios);

                    //atribuir a geometria ao buffer
                    featureBuffer.Shape = geometry;
                    featureBuffer.set_Value(indexNome, incidencia.Nome);
                    featureBuffer.set_Value(indexIncidencia, incidencia.TotalIncidencias);

                    //inserir a feature na featureclass
                    featureCursor.InsertFeature(featureBuffer);
                }

                featureCursor.Flush();
                Marshal.FinalReleaseComObject(featureCursor);

                try
                {
                    //cria featureLayer
                    IFeatureLayer featureLayer = new FeatureLayerClass();
                    featureLayer.FeatureClass = featureClass;

                    if (featureLayer != null)
                    {
                        //cria a geofeaturelayer
                        IGeoFeatureLayer geoFeatureLayer = (IGeoFeatureLayer)featureLayer;

                        //ativar os Labels
                        //geoFeatureLayer.DisplayAnnotation = true;

                        //tabela dos dados
                        ITable table = (ITable)featureClass;

                        //define o metodo de classificacao
                        IClassifyGEN classifyGEN = new NaturalBreaks();

                        //objetos com array de frequencia de dados e valores dos dados
                        object dataFrequency;
                        object dataValues;

                        //histograma
                        ITableHistogram tableHistogram = new TableHistogramClass();
                        IHistogram      histogram      = (IHistogram)tableHistogram;
                        tableHistogram.Field = "incidencia";
                        tableHistogram.Table = table;
                        histogram.GetHistogram(out dataValues, out dataFrequency);
                        double[] data = dataValues as double[];
                        int[]    freq = dataFrequency as int[];
                        classifyGEN.Classify(data, freq, 5);

                        //Renderer de simbolos proporcionais
                        IClassBreaksRenderer render = new ClassBreaksRenderer();
                        double[]             cb     = (double[])classifyGEN.ClassBreaks;
                        render.Field      = "incidencia";
                        render.BreakCount = 5;
                        //render.MinimumBreak = listaIncidenciaDoencaEmDistritosSanitarios.Min(p => p.TotalIncidencias);
                        render.MinimumBreak = cb[0];

                        //define a escala de cores
                        IRgbColor color1 = new RgbColor();
                        IRgbColor color2 = new RgbColor();
                        color1.Red   = 255;
                        color1.Green = 255;
                        color1.Blue  = 0;
                        color2.Red   = 140;
                        color2.Green = 23;
                        color2.Blue  = 23;

                        IAlgorithmicColorRamp colorRamp = new AlgorithmicColorRamp();
                        colorRamp.FromColor = color1;
                        colorRamp.ToColor   = color2;
                        colorRamp.Algorithm = esriColorRampAlgorithm.esriCIELabAlgorithm;
                        colorRamp.Size      = 5;
                        bool ok;
                        colorRamp.CreateRamp(out ok);
                        IEnumColors enumColors = colorRamp.Colors;
                        enumColors.Reset();

                        IClassBreaksUIProperties uiProperties = (IClassBreaksUIProperties)render;
                        uiProperties.ColorRamp = "Custom";

                        //loop para definir o estilo de cada geometria de distrito sanitario
                        for (int i = 0; i < 5; i++)
                        {
                            if (i != 0)
                            {
                                render.Break[i]          = cb[i + 1];
                                render.Label[i]          = (cb[i] + 1).ToString("0") + " - " + cb[i + 1].ToString("0");
                                uiProperties.LowBreak[i] = cb[i] + 1;
                            }
                            else
                            {
                                render.Break[i]          = cb[i + 1];
                                render.Label[i]          = "0 - " + cb[i + 1].ToString("0");
                                uiProperties.LowBreak[i] = cb[i] + 1;
                            }


                            ISimpleFillSymbol simpleFillSymbol = new SimpleFillSymbol();
                            simpleFillSymbol.Color = enumColors.Next();
                            simpleFillSymbol.Style = esriSimpleFillStyle.esriSFSSolid;
                            ISymbol symbolteste = simpleFillSymbol as ISymbol;
                            render.Symbol[i] = (ISymbol)symbolteste;
                        }

                        //carregar o shape no mapa
                        geoFeatureLayer.FeatureClass = featureClass;
                        geoFeatureLayer.Name         = featureClass.AliasName;
                        geoFeatureLayer.Visible      = true;
                        geoFeatureLayer.Renderer     = (IFeatureRenderer)render;
                        ArcMap.Document.FocusMap.AddLayer(geoFeatureLayer);
                    }

                    MessageBox.Show("O mapa de incidência da doença [" + cmbDoenca.Text +
                                    "] nos Distritos Sanitários foi gerado com sucesso!", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                }
                catch (Exception ex)
                {
                    MostrarErro(ex);
                    MessageBox.Show("Escolha um período que contenha incidências da doença [" + cmbDoenca.Text + "].", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                }
            }

            catch (Exception ex)
            {
                this.MostrarErro(ex);
            }
            finally
            {
                this.Cursor = Cursors.Default;
            }
        }
Example #2
0
        private void RenderFeatures(ILayer layer)
        {
            //Set up renderer
            IClassBreaksRenderer classBreaksRenderer = new ClassBreaksRenderer();
            classBreaksRenderer.Field = "HistoField";
            classBreaksRenderer.BreakCount = 5;

            //Set up table histogram properties
            object douleArrayValues;
            object frequencyArray;
            IFeatureClass featureClass = ((IFeatureLayer) layer).FeatureClass;
            ITable table = (ITable) featureClass;
            ITableHistogram tableHistogram = (ITableHistogram) new BasicTableHistogram();
            tableHistogram.Table = table;
            tableHistogram.Field = "HistoField";
            ((IDataSampling)classBreaksRenderer).SamplingMethod = esriDataSampling.esriAllRecords;
            tableHistogram.Sampling = (IDataSampling)classBreaksRenderer;
            ((IBasicHistogram) tableHistogram).GetHistogram(out douleArrayValues, out frequencyArray);
            IClassifyGEN classifyGen = new NaturalBreaks();
            classifyGen.Classify(douleArrayValues, frequencyArray, classBreaksRenderer.BreakCount);
            Double[] x = classifyGen.ClassBreaks as Double[];
            Random random = new Random();
            for (var i = 1; i < x.Length; i++)
            {
                classBreaksRenderer.Break[i-1] = x[i];
                classBreaksRenderer.Description[i-1] = "TEST";
                classBreaksRenderer.Label[i-1] = x.GetValue(i).ToString();
                IMarkerSymbol markerSymbol = new SimpleMarkerSymbol();
                Color colorToUse = GetAColor(random.Next(0,174));
                IRgbColor rgbColor = new RgbColorClass();
                rgbColor.Blue = colorToUse.B;
                rgbColor.Red = colorToUse.R;
                rgbColor.Green = colorToUse.G;
                markerSymbol.Color = rgbColor;
                markerSymbol.Size = 5;
                classBreaksRenderer.Symbol[i - 1] = (ISymbol)markerSymbol;
            }

            ((IGeoFeatureLayer) layer).Renderer = ((IFeatureRenderer)classBreaksRenderer);
        }