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; } }
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); }