Пример #1
0
        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;
            }
        }
Пример #2
0
        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;
            }
        }