public void FrmInserirUnidadeSaudePorCopiaGeometria_Load(object sender, EventArgs e) { // workspace IWorkspace workspace = ArcMapUtils.GetFeatureLayerWorkspace(this._layerDeUnidadesDeSaude); IWorkspaceEdit2 workspaceEdit = workspace as IWorkspaceEdit2; // procurar bairro ISpatialFilter spatialFilter = new SpatialFilterClass(); spatialFilter.Geometry = this._featureParaCopia.ShapeCopy; spatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects; IFeatureCursor featCursorBairros = this._layerDeBairros.Search(spatialFilter, false); IFeature featureBairro = featCursorBairros.NextFeature(); if (featureBairro == null) { // cancela edição if (workspaceEdit.IsInEditOperation) { workspaceEdit.AbortEditOperation(); } workspaceEdit.StopEditing(false); MessageBox.Show(this, "O ponto não está inserido em um bairro !", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error); } else { int nomeIndex = this._layerDeBairros.FeatureClass.FindField("nome"); int codigoBairro = featureBairro.OID; string nomeBairro = (string)featureBairro.get_Value(nomeIndex); this.txtBairroUS.Text = nomeBairro; } // procurar distrito sanitário IFeatureCursor featCursorDistritos = this._layerDeDistritos.Search(spatialFilter, false); IFeature featureDistrito = featCursorDistritos.NextFeature(); if (featureDistrito == null) { // cancela edição if (workspaceEdit.IsInEditOperation) { workspaceEdit.AbortEditOperation(); } workspaceEdit.StopEditing(false); MessageBox.Show(this, "O ponto não está inserido em um distrito sanitário !", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error); } else { int nomeIndex = this._layerDeDistritos.FeatureClass.FindField("nome"); int codigoDistrito = featureDistrito.OID; string nomeDistrito = (string)featureDistrito.get_Value(nomeIndex); this.txtDistritoUS.Text = nomeDistrito; } }
private void btnInserir_Click(object sender, EventArgs e) { // valida os campos if (!this.ValidarCampos()) { return; } // workspace IWorkspace workspace = ArcMapUtils.GetFeatureLayerWorkspace(this._layerDeUnidadesDeSaude); IWorkspaceEdit2 workspaceEdit = workspace as IWorkspaceEdit2; if (workspaceEdit.IsBeingEdited()) { MessageBox.Show(this, "O workspace está em edição. Aguarde.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Stop); return; } // filtro para achar o bairro e o distrito sanitário a que a unidade de saúde pertence ISpatialFilter spatialFilter = new SpatialFilterClass(); spatialFilter.Geometry = this._featureParaCopia.ShapeCopy; spatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects; // pegar o código do bairro IFeatureCursor featCursorBairros = this._layerDeBairros.Search(spatialFilter, false); IFeature featureBairro = featCursorBairros.NextFeature(); int nomeIndex = this._layerDeBairros.FeatureClass.FindField("nome"); int codigoBairro = featureBairro.OID; string nomeBairro = (string)featureBairro.get_Value(nomeIndex); //pegar o código do distrito sanitário IFeatureCursor featCursorDistritos = this._layerDeDistritos.Search(spatialFilter, false); IFeature featureDistrito = featCursorDistritos.NextFeature(); int nomeIndex1 = this._layerDeDistritos.FeatureClass.FindField("nome"); int codigoDistrito = featureDistrito.OID; string nomeDistrito = (string)featureDistrito.get_Value(nomeIndex1); this.Cursor = Cursors.WaitCursor; //cadastra a nova unidade de saúde try { // inicia edição workspaceEdit.StartEditing(true); workspaceEdit.StartEditOperation(); // dados da nova Unidade de Saúde UnidadeSaude unidadeDeSaude = new UnidadeSaude(); unidadeDeSaude.Nome = txtNomeUS.Text.ToString(); unidadeDeSaude.Endereco = txtEnderecoUS.Text.ToString(); unidadeDeSaude.Bairro = txtBairroUS.Text.ToString(); unidadeDeSaude.DistritoSanitario = txtDistritoUS.Text.ToString(); unidadeDeSaude.CodigoBairro = (int)codigoBairro; unidadeDeSaude.CodigoDistritoSanitario = (int)codigoDistrito; // criação da nova feature IFeature featureUnidadeDeSaude = this._layerDeUnidadesDeSaude.FeatureClass.CreateFeature(); featureUnidadeDeSaude.Shape = _featureParaCopia.ShapeCopy; unidadeDeSaude.ToFeature(featureUnidadeDeSaude); // finaliza edição workspaceEdit.StopEditOperation(); workspaceEdit.StopEditing(true); MessageBox.Show(this, "Unidade de Saúde inserida com sucesso !", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); // limpa seleção ArcMap.Document.FocusMap.ClearSelection(); // fecha o formulário this.Close(); } catch { // cancela edição if (workspaceEdit.IsInEditOperation) { workspaceEdit.AbortEditOperation(); } workspaceEdit.StopEditing(false); MessageBox.Show(this, "Não foi possível realizar a inserção de uma nova unidade de saúde !", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error); } finally { // refresh IActiveView activeView = ArcMap.Document.FocusMap as IActiveView; activeView.Refresh(); // cursor this.Cursor = Cursors.Default; } }