Пример #1
0
        public string AddProfilePointsTo3D(IEnumerable <IPoint> points)
        {
            string featureClassName = GenerateTemp3DPointStorage();

            IWorkspaceEdit workspaceEdit = (IWorkspaceEdit)calcWorkspace;

            workspaceEdit.StartEditing(true);
            workspaceEdit.StartEditOperation();

            IFeatureClass calc    = GetCalcProfileFeatureClass(featureClassName);
            var           GCS_WGS = Helper.GetBasePointSpatialReference();

            int i = 0;

            points.ToList().ForEach(point =>
            {
                var pointFeature = calc.CreateFeature();

                int idFieldIndex = calc.FindField("ID");
                pointFeature.set_Value(idFieldIndex, i);

                pointFeature.Shape = point;
                pointFeature.Store();
            });

            workspaceEdit.StopEditOperation();
            workspaceEdit.StopEditing(true);

            return(featureClassName);
        }
Пример #2
0
        /// <summary>
        /// 结束任务流程
        /// </summary>
        /// <param name="taskName"></param>
        public void FinishTask(string taskName)
        {
            IFeatureWorkspace   ws = Util.ServerWorkspace as IFeatureWorkspace;
            IVersionedWorkspace vw = ws as IVersionedWorkspace;

            if (taskName.ToLower() == vw.DefaultVersion.VersionName.ToLower())
            {
                return;
            }
            IVersion       ver = vw.FindVersion(taskName);
            IVersionEdit4  ve  = ver as IVersionEdit4;
            IWorkspaceEdit wse = ver as IWorkspaceEdit;

            wse.StartEditing(true);
            ve.Reconcile4(vw.DefaultVersion.VersionName, true, true, true, true);
            if (ve.CanPost())
            {
                ve.Post(vw.DefaultVersion.VersionName);
            }
            ITable       task_tbl = ws.OpenTable("TaskLog");
            IQueryFilter filter   = new QueryFilterClass();

            filter.WhereClause = "TaskName = '" + taskName + "'";
            ICursor cur = task_tbl.Search(filter, false);
            IRow    rw  = cur.NextRow();

            if (rw != null)
            {
                rw.set_Value(task_tbl.FindField("Status"), TaskManager.FINISH_STATUS);
                rw.set_Value(task_tbl.FindField("FinishDate"), DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"));
                rw.Store();
            }
            wse.StopEditing(true);
            ver.Delete();
        }
Пример #3
0
        /// <summary>
        /// 删除图元
        /// </summary>
        public void DelFeature(AxMapControl axMapControl1, IFeatureLayer feaLayer, string FeaKey)
        {
            IDataset       ipDataset     = feaLayer.FeatureClass as IDataset;
            IWorkspaceEdit ipwsEdit      = ipDataset.Workspace as IWorkspaceEdit;
            IQueryFilter   ipQueryFilter = new QueryFilterClass();

            ipQueryFilter.WhereClause = string.Format("{0}={1}", feaLayer.FeatureClass.OIDFieldName, FeaKey);
            IFeatureCursor ipFeatureCursor = feaLayer.FeatureClass.Search(ipQueryFilter, false);

            if (ipFeatureCursor != null)
            {
                IFeature ipFt = ipFeatureCursor.NextFeature();
                if (ipFt != null)
                {
                    //if (!ipwsEdit.IsBeingEdited())
                    //{
                    //    ipwsEdit.StartEditing(false);
                    //}

                    //ipwsEdit.StopEditing(true);
                    //DelFeatureByKeyName("MARKER_PIN_" + SelEditLayer + ipFt.OID.ToString());
                    axMapControl1.ActiveView.Refresh();

                    // this._mapObject.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, GetLayerByName(SelEditLayer), null);
                }
            }
        }
Пример #4
0
        public string AddPolygonTo3D(Dictionary <IPolygon, bool> polygons)
        {
            string featureClassName = GenerateTemp3DPolygonStorage();

            IWorkspaceEdit workspaceEdit = (IWorkspaceEdit)calcWorkspace;

            workspaceEdit.StartEditing(true);
            workspaceEdit.StartEditOperation();

            IFeatureClass calc    = GetCalcProfileFeatureClass(featureClassName);
            var           GCS_WGS = Helper.GetBasePointSpatialReference();

            polygons.ToList().ForEach(polygon =>
            {
                var pointFeature   = calc.CreateFeature();
                pointFeature.Shape = polygon.Key;

                int isVisibleFieldIndex = calc.FindField("IS_VISIBLE");
                pointFeature.set_Value(isVisibleFieldIndex, polygon.Value ? 1 : 0);

                pointFeature.Store();
            });

            workspaceEdit.StopEditOperation();
            workspaceEdit.StopEditing(true);

            return(featureClassName);
        }
Пример #5
0
        public void ChangeTasksStatus(string taskName, string status)
        {
            IFeatureWorkspace ws       = Util.ServerWorkspace as IFeatureWorkspace;
            ITable            task_tbl = ws.OpenTable("TaskLog");
            IQueryFilter      filter   = new QueryFilterClass();

            filter.WhereClause = "TaskName = '" + taskName + "'";
            ICursor        cur = task_tbl.Search(filter, false);
            IRow           rw  = cur.NextRow();
            IWorkspaceEdit wse = ws as IWorkspaceEdit;

            wse.StartEditing(false);
            if (rw != null)
            {
                wse.StartEditOperation();
                rw.set_Value(task_tbl.FindField("Status"), status);
                if (status == TaskManager.CHECKIN_STATUS)
                {
                    rw.set_Value(task_tbl.FindField("CheckInDate"), DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"));
                }
                else if (status == TaskManager.AUTOCHECK_STATUS)
                {
                    rw.set_Value(task_tbl.FindField("AutoDataCheckDate"), DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"));
                }
                else if (status == TaskManager.MANUALCHECK_STATUS)
                {
                    rw.set_Value(task_tbl.FindField("ManualDataCheckDate"), DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"));
                }
                rw.Store();
                wse.StopEditOperation();
            }
            wse.StopEditing(true);
        }
Пример #6
0
        public void AddPointByWrite(IFeatureLayer l, double x, double y)
        {
            ESRI.ArcGIS.Geometry.esriGeometryType featype = l.FeatureClass.ShapeType;
            if (featype == esriGeometryType.esriGeometryPoint)//判断层是否为点层
            {
                // IFeatureLayer l = MapCtr.Map.get_Layer(0) as IFeatureLayer;
                IFeatureClass      fc = l.FeatureClass;
                IFeatureClassWrite fr = fc as IFeatureClassWrite;
                IWorkspaceEdit     w  = (fc as IDataset).Workspace as IWorkspaceEdit;
                IFeature           f;
                IPoint             p;

                w.StartEditing(true);
                w.StartEditOperation();

                f = fc.CreateFeature();
                p = new PointClass();
                p.PutCoords(x, y);
                f.Shape = p;
                fr.WriteFeature(f);

                w.StopEditOperation();
                w.StopEditing(true);
            }
        }
Пример #7
0
        public void AddPolygonByWrite(AxMapControl axMapControl1, IFeatureLayer l, double x, double y)
        {
            ESRI.ArcGIS.Geometry.esriGeometryType featype = l.FeatureClass.ShapeType;
            if (featype == esriGeometryType.esriGeometryPolygon)//判断层是否为线层
            {
                //IFeatureLayer l = MapCtr.Map.get_Layer(0) as IFeatureLayer;
                IFeatureClass      fc = l.FeatureClass;
                IFeatureClassWrite fr = fc as IFeatureClassWrite;
                IWorkspaceEdit     w  = (fc as IDataset).Workspace as IWorkspaceEdit;
                IFeature           f;
                //可选参数的设置
                object Missing = Type.Missing;
                IPoint p       = new PointClass();
                w.StartEditing(true);
                w.StartEditOperation();

                f = fc.CreateFeature();
                //定义一个多义线对象
                IRgbColor color = new RgbColor();
                // 设置颜色属性
                color.Red          = 255;
                color.Transparency = 255;
                IGeometry iGeom = axMapControl1.TrackPolygon();
                AddRegion(axMapControl1, iGeom);
                f.Shape = iGeom;
                fr.WriteFeature(f);
                w.StopEditOperation();
                w.StopEditing(true);
            }
        }
Пример #8
0
        //IFeatureClass CreateFeature Example
        private IFeature IFeatureClass_Create(IFeatureClass featureClass, IGeometry pGeometry)
        {
            if (featureClass.ShapeType != ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon)
            {
                return(null);
            }
            IWorkspaceEdit iWE = (featureClass as IDataset).Workspace as IWorkspaceEdit;

            if (!iWE.IsBeingEdited())
            {
                iWE.StartEditing(false);
            }

            IFeature feature = featureClass.CreateFeature();

            //Apply the constructed shape to the new features shape
            feature.Shape = pGeometry;
            ISubtypes    subtypes    = (ISubtypes)featureClass;
            IRowSubtypes rowSubtypes = (IRowSubtypes)feature;

            if (subtypes.HasSubtype)         // does the feature class have subtypes?
            {
                rowSubtypes.SubtypeCode = 1; //in this example 1 represents the Primary Pipeline subtype
            }
            // initalize any default values that the feature has
            rowSubtypes.InitDefaultValues();
            //Commit the default values in the feature to the database
            feature.Store();
            iWE.StopEditing(true);
            iWE = null;
            return(feature);
        }
Пример #9
0
 private void dataGridViewX_CellValueChanged(object sender, DataGridViewCellEventArgs e)
 {
     try
     {
         IFeature pfeature = advTree.SelectedNode.Tag as IFeature;
         if (pfeature != null)
         {
             IWorkspaceEdit iWE = (pfeature.Class as IDataset).Workspace as IWorkspaceEdit;
             if (!iWE.IsBeingEdited())
             {
                 iWE.StartEditing(false);
             }
             iWE.StartEditOperation();
             int fdpos = pfeature.Fields.FindFieldByAliasName(dataGridViewX[e.ColumnIndex - 1, e.RowIndex].Value.ToString());
             pfeature.set_Value(fdpos, dataGridViewX[e.ColumnIndex, e.RowIndex].Value.ToString());
             pfeature.Store();
             iWE.StopEditOperation();
             labelEditStatus.Text    = "已完成更改!";
             labelEditStatus.Visible = true;
             this.Refresh();
             iWE = null;
         }
     }
     catch
     {
         MessageBox.Show("请按正确的字段格式填写属性!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
     }
 }
Пример #10
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="workspace"></param>
 /// <param name="withUndoRedo"></param>
 public EditSession(IWorkspace workspace, bool withUndoRedo)
 {
     if (workspace != null)
     {
         _workspaceEdit = (IWorkspaceEdit)workspace;
     }
 }
Пример #11
0
        /// <summary>
        /// 根据点创建要素
        /// </summary>
        /// <param name="pGeom"></param>
        private void CreateFeature(IGeometry pGeom)
        {
            try
            {
                if (pGeom == null)
                {
                    return;
                }
                if (m_pCurrentLayer == null)
                {
                    return;
                }

                IWorkspaceEdit pWorkspaceEdit = DataEditCommon.g_CurWorkspaceEdit;// GetWorkspaceEdit();
                IFeatureLayer  pFeatureLayer  = (IFeatureLayer)m_pCurrentLayer;
                IFeatureClass  pFeatureClass  = pFeatureLayer.FeatureClass;

                pWorkspaceEdit.StartEditOperation();
                IFeature pFeature = pFeatureClass.CreateFeature();

                // 处理Z/M值
                DrawCommon.HandleZMValue(pFeature, pGeom, 0);

                pFeature.Shape = pGeom;
                pFeature.Store();
                pWorkspaceEdit.StopEditOperation();
                m_GeometryCollection = null;
                m_pMap.SelectFeature(m_pCurrentLayer, pFeature);
                m_pMapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics | esriViewDrawPhase.esriViewGeoSelection, null, null);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message.ToString());
            }
        }
Пример #12
0
        private void GetSelctionSet(IFeatureLayer pFeatureLayer, IGeometry pGeometry, bool bjustone, int Shift)
        {
            IFeatureClass pFeatureClass = pFeatureLayer.FeatureClass;
            //没开启编辑的不可选择
            IDataset       pDataset       = pFeatureClass as IDataset;
            IWorkspaceEdit pWorkspaceEdit = pDataset.Workspace as IWorkspaceEdit;

            if (!pWorkspaceEdit.IsBeingEdited())
            {
                return;
            }
            switch (Shift)
            {
            case 1:       //增加选择结果集
                ModPublic.GetSelctionSet(pFeatureLayer, pGeometry, pFeatureClass, esriSelectionResultEnum.esriSelectionResultAdd, bjustone);
                break;

            case 4:       //减少选择结果集
                ModPublic.GetSelctionSet(pFeatureLayer, pGeometry, pFeatureClass, esriSelectionResultEnum.esriSelectionResultSubtract, bjustone);
                break;

            case 2:
                ModPublic.GetSelctionSet(pFeatureLayer, pGeometry, pFeatureClass, esriSelectionResultEnum.esriSelectionResultXOR, bjustone);
                break;

            default:       //新建选择结果集
                ModPublic.GetSelctionSet(pFeatureLayer, pGeometry, pFeatureClass, esriSelectionResultEnum.esriSelectionResultNew, bjustone);
                break;
            }
        }
        /// <summary>
        /// 开始编辑
        /// </summary>
        /// <param name="bWithUndoRedo"></param>
        public void StartEditing(bool WithUndoRedo)
        {
            if (MyselectedLayer == null)
            {
                return;
            }
            IFeatureLayer featureLayer = MyselectedLayer as IFeatureLayer;

            if (featureLayer == null)
            {
                return;
            }
            IFeatureClass featureClass = featureLayer.FeatureClass;

            if (featureClass == null)
            {
                return;
            }

            IDataset       dataset       = featureClass as IDataset;
            IWorkspaceEdit workspaceEdit = dataset.Workspace as IWorkspaceEdit;

            try
            {
                workspaceEdit.StartEditing(WithUndoRedo);
                If_isEdited = true;
            }
            catch
            {
                return;
            }
        }
Пример #14
0
        public string AddProfileLinesToCalculation(IEnumerable <IPolyline> profileLines)
        {
            string featureClassName = GenerateTempProfileLinesStorage();

            IWorkspaceEdit workspaceEdit = (IWorkspaceEdit)calcWorkspace;

            workspaceEdit.StartEditing(true);
            workspaceEdit.StartEditOperation();


            IFeatureClass calc    = GetCalcProfileFeatureClass(featureClassName);
            var           GCS_WGS = Helper.GetBasePointSpatialReference();


            profileLines.ToList().ForEach(
                l =>
            {
                var newLine   = calc.CreateFeature();
                newLine.Shape = l;
                newLine.Store();
            }
                );


            workspaceEdit.StopEditOperation();
            workspaceEdit.StopEditing(true);

            return(featureClassName);
        }
Пример #15
0
        /// 合并列表中所有多边形
        /// </summary>
        /// <param name="orifeature">保留源对象</param>
        /// <param name="geolist">图形列表</param>
        /// <returns></returns>
        public void CreatePolygonFromExistingGeometries(IFeatureLayer lyr, IFeature orifeature, List <IGeometry> geolist)
        {
            int            i            = 0;
            IGeometry      geometry     = null;
            IFeatureClass  Featureclass = lyr.FeatureClass;
            IWorkspaceEdit workspace    = (IWorkspaceEdit)(Featureclass as IDataset).Workspace;

            workspace.StartEditing(false);
            workspace.StartEditOperation();
            //合并图形
            ITopologicalOperator2 topologicalOperator2 = orifeature.ShapeCopy as ITopologicalOperator2;

            for (i = 0; i < geolist.Count; i++)
            {
                IGeometry geo = geolist[i];
                if (geometry != null)
                {
                    topologicalOperator2 = geometry as ITopologicalOperator2;
                }
                ITopologicalOperator opertor = geo as ITopologicalOperator;
                opertor.Simplify();
                topologicalOperator2.IsKnownSimple_2 = false;
                topologicalOperator2.Simplify();
                geometry = topologicalOperator2.Union(geo);
            }
            //更新图形对象
            IGeometry geoCombined = (IGeometry)geometry;

            orifeature.Shape = geoCombined as IGeometry;
            orifeature.Store();

            workspace.StopEditOperation();
            workspace.StopEditing(true);
        }
Пример #16
0
        /// <summary>
        /// Deletes the anno features in feature layer.
        /// </summary>
        /// <param name="featureLayer">The feature layer.</param>
        public static void DeleteAnnoFeaturesInFeatureLayer(IFeatureLayer featureLayer)
        {
            if (featureLayer == null)
            {
                return;
            }
            IFeatureClass  featureClass   = featureLayer.FeatureClass;
            IDataset       dataset        = featureClass as IDataset;
            IWorkspace     pWorkspace     = dataset.Workspace;
            IWorkspaceEdit pWorkspaceEdit = pWorkspace as IWorkspaceEdit;

            pWorkspaceEdit.StartEditing(true);
            pWorkspaceEdit.StartEditOperation();

            IWorkspaceProperties2 workspaceProperties2 = (IWorkspaceProperties2)pWorkspace;
            //判断workspace是否可以执行SQL语句
            IWorkspaceProperty canExecuteSqlProperty =
                workspaceProperties2.get_Property(esriWorkspacePropertyGroupType.esriWorkspacePropertyGroup,
                                                  (int)esriWorkspacePropertyType.esriWorkspacePropCanExecuteSQL);

            if (canExecuteSqlProperty.IsSupported)
            {
                //ExecuteSQL删除feature
                pWorkspace.ExecuteSQL("delete  from " + featureClass.AliasName + " where objectid >=0");
            }
            pWorkspaceEdit.StopEditOperation();
            pWorkspaceEdit.StopEditing(true);
        }
 public void OnClick()
 {
     try
     {
         m_Map          = m_hookHelper.FocusMap;
         m_activeView   = m_Map as IActiveView;
         m_EngineEditor = MapManager.EngineEditor;
         if (m_EngineEditor == null)
         {
             return;
         }
         if (m_EngineEditor.EditState != esriEngineEditState.esriEngineStateEditing)
         {
             return;
         }
         IWorkspaceEdit pWSEdit = m_EngineEditor.EditWorkspace as IWorkspaceEdit;
         if (pWSEdit == null)
         {
             return;
         }
         Boolean bHasRedo = true;
         pWSEdit.HasRedos(ref bHasRedo);
         if (bHasRedo)
         {
             pWSEdit.RedoEditOperation();
         }
         m_activeView.Refresh();
     }
     catch (Exception ex)
     {
     }
 }
Пример #18
0
        /// <summary>
        /// 获取绘制点的图层——Cities, 保存点绘制的函数
        /// </summary>
        /// <param name="pointLayerName"></param>
        /// <param name="point"></param>
        private void AddPointByStore(string pointLayerName, IPoint pt)
        {
            //得到要添加地物的图层
            IFeatureLayer pFeatureLayer = GetLayerByName(pointLayerName) as IFeatureLayer;

            if (pFeatureLayer != null)
            {
                //定义一个地物类, 把要编辑的图层转化为定义的地物类
                IFeatureClass pFeatureClass = pFeatureLayer.FeatureClass;
                //先定义一个编辑的工作空间, 然后将其转化为数据集, 最后转化为编辑工作空间
                IWorkspaceEdit w = (pFeatureClass as IDataset).Workspace as IWorkspaceEdit;
                IFeature       pFeature;
                //开始事务操作
                w.StartEditing(false);
                //开始编辑
                w.StartEditOperation();
                //创建一个(点)要素
                pFeature = pFeatureClass.CreateFeature();
                //赋值该要素的Shape属性
                pFeature.Shape = pt;

                //保存要素, 完成点要素生成
                //此时生成的点要素只要集合特征(shape/Geometry), 无普通属性
                pFeature.Store();

                //结束编辑
                w.StopEditOperation();
                //结束事务操作
                w.StopEditing(true);
            }
            //屏幕刷新
            this.axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, pFeatureLayer, null);
        }
Пример #19
0
        private bool UpdateFieldValue(IField pField, object str)
        {
            IWorkspaceEdit workspace = (this.m_pFeatLayer.FeatureClass as IDataset).Workspace as IWorkspaceEdit;
            bool           flag      = false;

            try
            {
                ICursor cursor;
                workspace.StartEditOperation();
                int index = this.m_pFeatLayer.FeatureClass.Fields.FindField(pField.Name);
                (this.m_pFeatLayer as IFeatureSelection).SelectionSet.Search(null, false, out cursor);
                for (IRow row = cursor.NextRow(); row != null; row = cursor.NextRow())
                {
                    row.set_Value(index, str);
                    row.Store();
                }
                ComReleaser.ReleaseCOMObject(cursor);
                workspace.StopEditOperation();
                try
                {
                }
                catch
                {
                }
                flag = true;
            }
            catch (Exception exception)
            {
                MessageBox.Show("输入数据格式错误");
                CErrorLog.writeErrorLog(null, exception, "");
            }
            return(flag);
        }
Пример #20
0
 public override void OnMouseUp(int int_0, int int_1, int int_2, int int_3)
 {
     if (this.istretchLineFeedback_0 != null)
     {
         IPolyline polyline = this.istretchLineFeedback_0.Stop();
         this.istretchLineFeedback_0 = null;
         IWorkspaceEdit workspace = (this.ifeature_0.Class as IDataset).Workspace as IWorkspaceEdit;
         workspace.StartEditOperation();
         try
         {
             if ((this.ifeature_0.Shape as IZAware).ZAware)
             {
                 (polyline as IZAware).ZAware = true;
                 (polyline as IZ).SetConstantZ((this.ifeature_0.Shape as IZ).ZMax);
             }
             this.ifeature_0.Shape = polyline;
             this.ifeature_0.Store();
         }
         catch (Exception exception)
         {
             MessageBox.Show(exception.ToString());
         }
         workspace.StopEditOperation();
         _context.ActiveView.Refresh();
     }
 }
Пример #21
0
        public void ActiveCommand()
        {
            m_pEditWorkspace = null;
            if (this.Enabled)
            {
                _context.ShowCommandString("正在启动编辑", CommandTipsType.CTTLog);

                if (Editor2.StartEditing(_context.MapControl.Map, _context))
                {
                    m_pEditWorkspace = Editor2.EditWorkspace;

                    _context.Config.IsInEdit = true;
                    _context.ShowCommandString("启动编辑", CommandTipsType.CTTEnd);
                    EditorEvent.StartEditing();
                    //EditToolUI.EditTemplateCtrl.Map = _context.MapControl.Map;
                    //base.m_HookHelper.DockWindows(EditToolUI.EditTemplateCtrl, null);
                }
                else
                {
                    _context.ShowCommandString("未启动编辑", CommandTipsType.CTTEnd);
                }
            }
            else
            {
                if ((Editor2.EditMap != null) && (Editor2.EditMap != _context.MapControl.Map))
                {
                    _context.ShowCommandString("已处于编辑状态", CommandTipsType.CTTEnd);
                }
                else
                {
                    _context.ShowCommandString("开始编辑命令不可用", CommandTipsType.CTTEnd);
                }
            }
        }
Пример #22
0
        protected override void OnClick()
        {
            IActiveView activeView = ArcMap.Document.ActiveView;

            IMap          map          = activeView as IMap;
            ILayer        layer        = map.get_Layer(0);
            IFeatureLayer featureLayer = layer as IFeatureLayer;
            IFeatureClass featureClass = featureLayer.FeatureClass;

            IPoint point = new PointClass();

            point.PutCoords(-117.1, 34.075); //(LONG, LAT)

            IWorkspace     workspace     = GetWorkspace();
            IWorkspaceEdit workspaceEdit = workspace as IWorkspaceEdit;

            workspaceEdit.StartEditing(true);
            workspaceEdit.StartEditOperation();

            // -------------- Perform your editing tests here ------------------
            CreateFeature(featureClass, point);
            //UpdateFeature(featureClass);
            //DeleteFeature(featureClass);

            // -----------------------------------------------------------------

            workspaceEdit.StopEditOperation();
            workspaceEdit.StopEditing(true);

            ArcMap.Application.CurrentTool = null;
        }
Пример #23
0
        /// <summary>
        /// 删除指定图层的指定图形
        /// </summary>
        /// <param name="id">图形的id</param>
        /// <param name="layerName">图层名</param>
        public void DeleteFeature(int id, string layerName)
        {
            InitLicense();
            try
            {
                List <FieldInfo> list = GetAllFields(layerName);

                var node = configXml.SelectSingleNode("/Layers/Layer[@Title='" + layerName + "']");

                var            ws   = CreateWorkspace();
                IWorkspaceEdit edit = (IWorkspaceEdit)ws;
                edit.StartEditing(false);
                edit.StartEditOperation();
                var fc                 = ws.OpenFeatureClass(node.Attributes["Name"].Value);
                var feature            = fc.GetFeature(id);
                IFeatureClassWrite fcw = fc as IFeatureClassWrite;
                if (feature != null)
                {
                    fcw.RemoveFeature(feature);
                }
                edit.StopEditOperation();
                edit.StopEditing(true);
            }
            catch (Exception ex)
            {
                ShutdownLicense();
                throw ex;
            }
        }
Пример #24
0
 public virtual void StartEdit()
 {
     this.oWs = this.Workspace;
     this.iwe = (IWorkspaceEdit)oWs;
     this.iwe.StartEditing(true);
     this.iwe.StartEditOperation();
 }
Пример #25
0
 /// <summary>
 /// 删除多个几何对象
 /// </summary>
 /// <param name="lyr">图层</param>
 /// <param name="fea">要素对象</param>
 /// <param name="attributes">属性集合</param>
 /// <param name="pGeo">空间对象</param>
 /// <returns>成功失败标志</returns>
 public void DelFeatures(IFeatureLayer lyr, string sql)
 {
     try
     {
         IFeatureClass Featureclass = lyr.FeatureClass;
         if (Featureclass != null)
         {
             IFeatureCursor featurecursor = PropertySearch(sql, lyr);
             IWorkspaceEdit workspace     = (IWorkspaceEdit)(Featureclass as IDataset).Workspace;
             workspace.StartEditing(false);
             workspace.StartEditOperation();
             IFeature fea = featurecursor.NextFeature();
             while (fea != null)
             {
                 fea.Delete();
                 fea = featurecursor.NextFeature();
             }
             workspace.StopEditOperation();
             workspace.StopEditing(true);
         }
     }
     catch (Exception ei)
     {
         Log.Debug("[GIS] Del Feature: " + ei.ToString());
     }
 }
Пример #26
0
        /// <summary>
        /// 将拓扑错误要素存入要素类中
        /// </summary>
        /// <param name="topoErrorFeatures">拓扑错误要素</param>
        /// <param name="resultFeatureClass">保存拓扑错误要素的要素类,注意其坐标系和类型(点/线/面)必须与拓扑错误要素相同</param>
        public static void TopoErrorInsertToFeatureClass(this IEnumerable <ITopologyErrorFeature> topoErrorFeatures, IFeatureClass resultFeatureClass)
        {
            int typeIndex      = resultFeatureClass.AddField("TRuleType", "拓扑规则", esriFieldType.esriFieldTypeInteger);
            int orClassIdIndex = resultFeatureClass.AddField("OriClsID", "源要素类ID", esriFieldType.esriFieldTypeInteger);
            int deClassIdIndex = resultFeatureClass.AddField("DesClsID", "目标要素类ID", esriFieldType.esriFieldTypeInteger);
            int orOidIndex     = resultFeatureClass.AddField("OriOID", "源要素OID", esriFieldType.esriFieldTypeInteger);
            int deOidIndex     = resultFeatureClass.AddField("DesOID", "目标要素OID", esriFieldType.esriFieldTypeInteger);

            IWorkspaceEdit tmpWorkspaceEdit = (IWorkspaceEdit)(resultFeatureClass as IDataset).Workspace;

            tmpWorkspaceEdit.StartEditing(true);
            tmpWorkspaceEdit.StartEditOperation();
            IFeatureBuffer featureBuffer = resultFeatureClass.CreateFeatureBuffer();

            //在目标要素类中插入所有错误要素
            IFeatureCursor featureCursor = resultFeatureClass.Insert(true);

            foreach (var errorFeature in topoErrorFeatures)
            {
                IFeature tmpFeature = errorFeature as IFeature;
                featureBuffer.set_Value(typeIndex, errorFeature.TopologyRuleType);
                featureBuffer.set_Value(orClassIdIndex, errorFeature.OriginClassID);
                featureBuffer.set_Value(deClassIdIndex, errorFeature.DestinationClassID);
                featureBuffer.set_Value(orOidIndex, errorFeature.OriginOID);
                featureBuffer.set_Value(deOidIndex, errorFeature.DestinationOID);

                featureBuffer.Shape = tmpFeature.Shape;
                object featureOID = featureCursor.InsertFeature(featureBuffer);
            }
            featureCursor.Flush();//保存要素
            tmpWorkspaceEdit.StopEditOperation();
            tmpWorkspaceEdit.StopEditing(true);
            Marshal.ReleaseComObject(featureCursor);
        }
Пример #27
0
        /// <summary>
        /// 根据查询语句从ITable中删除对应的记录信息
        /// </summary>
        /// <param name="lyr">图层</param>
        /// <param name="sql">查询语句</param>
        public void DelFeaturesByQueryFilter(IFeatureLayer lyr, string sql)
        {
            IFeatureClass  Featureclass = lyr.FeatureClass;
            IWorkspaceEdit workspace    = (IWorkspaceEdit)(Featureclass as IDataset).Workspace;

            workspace.StartEditing(false);
            workspace.StartEditOperation();

            //删除要素
            IQueryFilter qfilter = new QueryFilterClass();

            qfilter.WhereClause = sql;
            ITable table = Featureclass as ITable;

            table.DeleteSearchedRows(qfilter);

            //停止编辑

            try
            {
                workspace.StopEditOperation();
                workspace.StopEditing(true);
            }
            catch (Exception ei)
            {
                throw;
            }

            System.Runtime.InteropServices.Marshal.ReleaseComObject(qfilter);
            Global.pActiveView.Refresh();
        }
Пример #28
0
        // 关闭feature的工作空间编辑状态
        public void StopEditing(IFeature pFeature)
        {
            try
            {
                IFeatureClass pFC      = pFeature.Table as IFeatureClass;
                IDataset      pDataset = pFC as IDataset;
                if (pDataset == null)
                {
                    return;
                }

                //如果数据已被修改,则提示用户是否保存
                IWorkspaceEdit pWorkspaceEdit = (IWorkspaceEdit)pDataset.Workspace;
                if (pWorkspaceEdit.IsBeingEdited())
                {
                    pWorkspaceEdit.StopEditing(true);
                }
                IActiveView pActiveView = m_SceneCtrl.Scene  as IActiveView;
                pActiveView.Refresh();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message.ToString());
            }
        }
Пример #29
0
 private void CreateFeature(IGeometry geo, IMap pMap, IFeatureClass fc)
 {
     try
     {
         if (geo == null || fc == null || pMap == null)
         {
             return;
         }
         IDataset       pDataset       = fc as IDataset;
         IWorkspaceEdit pWorkspaceEdit = pDataset.Workspace as IWorkspaceEdit;
         int            index          = fc.FindField(fc.ShapeFieldName);
         IGeometryDef   pGD            = fc.Fields.get_Field(index).GeometryDef;
         if (pGD.HasZ)
         {
             IZAware pZA = geo as IZAware;
             pZA.ZAware = true;
             IZ     pZ = geo as IZ;
             double zmin = -1000, zmax = 1000;
             if (pGD.SpatialReference.HasZPrecision())
             {
                 pGD.SpatialReference.GetZDomain(out zmin, out zmax);
             }
             if (pZ != null)
             {
                 pZ.SetConstantZ(0);
             }
             else
             {
                 IPoint p = geo as IPoint;
                 if (p.Z.ToString() == "非数字")
                 {
                     p.Z = 0;
                 }
             }
         }
         if (pGD.HasM)
         {
             IMAware pMA = geo as IMAware;
             pMA.MAware = true;
         }
         if (!pWorkspaceEdit.IsBeingEdited())
         {
             pWorkspaceEdit.StartEditing(true);
             pWorkspaceEdit.StartEditOperation();
         }
         IFeature pFeature = fc.CreateFeature();
         pFeature.Shape = geo;
         pFeature.Store();
         if (pWorkspaceEdit.IsBeingEdited())
         {
             pWorkspaceEdit.StartEditOperation();
             pWorkspaceEdit.StopEditing(true);
         }
         pMap.ClearSelection();
     }
     catch (System.Exception ex)
     {
         return;
     }
 }
        private void UpdateFeature(IFeature selectedFeature, ISegmentCollection polylineSegments)
        {
            ISegmentCollection polyline = new PolylineClass();

            polyline.AddSegmentCollection(polylineSegments);
            IFeatureClass  featureClass  = selectedFeature.Class as IFeatureClass;
            IDataset       dataset       = featureClass as IDataset;
            IWorkspaceEdit workspaceEdit = dataset.Workspace as IWorkspaceEdit;

            if (!(workspaceEdit.IsBeingEdited()))
            {
                return;
            }

            try
            {
                workspaceEdit.StartEditOperation();
                selectedFeature.Shape = polyline as IGeometry;
                selectedFeature.Store();
                workspaceEdit.StopEditOperation();
            }
            catch (Exception ex)
            {
                workspaceEdit.AbortEditOperation();
                MessageBox.Show("移动线段失败!!" + ex.Message, "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
Пример #31
0
        protected override void OnMouseDown(ESRI.ArcGIS.Desktop.AddIns.Tool.MouseEventArgs arg)
        {
            IMxDocument pMxDoc = ArcMap.Application.Document as IMxDocument;

            IRubberBand pRabber = new RubberPolygon();

            //get polygon from screen
            IPolygon pPolygon = pRabber.TrackNew(pMxDoc.ActiveView.ScreenDisplay, null) as IPolygon;

            //get cordinate from hard coded
            //IPolygon pPolygon ;

            //IPoint pPoint1 = new Point();
            //pPoint1.X = -120.730273;
            //pPoint1.Y = 224.928212;

            //IPoint pPoint2 = new Point();
            //pPoint2.X = -25.280158;
            //pPoint2.Y = 27942068.023;

            //IPoint pPoint3 = new Point();
            //pPoint3.X = -117.895121;
            //pPoint3.Y = 150.269211;



            //IPointCollection pPointCollection = new Polygon();
            //pPointCollection.AddPoint(pPoint1);
            //pPointCollection.AddPoint(pPoint2);
            //pPointCollection.AddPoint(pPoint3);
            //pPointCollection.AddPoint(pPoint1);

            //pPolygon = pPointCollection as IPolygon;


            ////fix when draw wrong draw
            //IArea pArea = pPolygon as IArea;
            //if (pArea.Area < 0)
            //{
            //    pPolygon.ReverseOrientation();
            //}


            IFeatureLayer  pFlayer = pMxDoc.FocusMap.Layer[0] as IFeatureLayer;
            IDataset       pDS     = pFlayer.FeatureClass as IDataset;
            IWorkspaceEdit pWSE    = pDS.Workspace as IWorkspaceEdit;

            pWSE.StartEditing(false);
            pWSE.StartEditOperation();

            IFeature pFeature = pFlayer.FeatureClass.CreateFeature();

            pFeature.Shape = pPolygon;
            pFeature.Store();

            pWSE.StopEditOperation();
            pWSE.StopEditing(true);

            pMxDoc.ActiveView.Refresh();
        }
Пример #32
0
 public static void CheckEditState()
 {
     try
     {
         if (g_engineEditor.EditState == esriEngineEditState.esriEngineStateNotEditing)
         {
             // ����༭�������£���ɫ����ֵ��ע�⣬��������ñ༭���ͣ�
             // ��ᱨ�쳣���� HRESULT:0x80040356�����������������Arcmap��Edit������������Opetionsѡ���Versisionѡ���
             g_engineEditor.EditSessionMode = esriEngineEditSessionMode.esriEngineEditSessionModeVersioned;
             g_engineEditor.StartEditing(g_pCurrentWorkSpace, g_pMap);
         }
         if (g_CurWorkspaceEdit == null)
             g_CurWorkspaceEdit = (IWorkspaceEdit)g_pCurrentWorkSpace;
         if (g_CurWorkspaceEdit.IsBeingEdited() == false)
         {
             g_engineEditor.EditSessionMode = esriEngineEditSessionMode.esriEngineEditSessionModeVersioned;
             g_engineEditor.StartEditing(g_pCurrentWorkSpace, g_pMap);
         }
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }
Пример #33
0
 private void DiscardEdits()
 {
     try
     {
         if (InEditingSession)
         {
             _editor.AbortOperation();
         }
         else
         {
             _hluWorkspaceEdit.AbortEditOperation();
             _hluWorkspaceEdit.StopEditOperation();
             _hluWorkspaceEdit.StopEditing(false);
         }
     }
     finally { _hluWorkspaceEdit = null; }
 }
Пример #34
0
        private void CommitEdits()
        {
            try
            {
                if (InEditingSession)
                {
                    _editor.StopOperation(String.Empty);
                    if (_saveEditsCmd == null)
                        _saveEditsCmd = FindSaveEditsCommand();

                    if (_saveEditsCmd != null)
                    {
                        _saveEditsCmd.Execute(); // only way to save edits without closing edit session
                    }
                    else
                    {
                        _editor.StopEditing(true);
                        _editor.StartEditing((IWorkspace)_hluWS);
                    }
                }
                else
                {
                    _hluWorkspaceEdit.StopEditOperation();
                    _hluWorkspaceEdit.StopEditing(true);
                    _hluWorkspaceEdit = null;
                }
            }
            catch { DiscardEdits(); }
        }
Пример #35
0
 private void StartEditing()
 {
     try
     {
         if (InEditingSession)
         {
             if (_saveEditsCmd == null)
                 _saveEditsCmd = FindSaveEditsCommand();
             _editor.StartOperation();
         }
         else
         {
             _hluWorkspaceEdit = StartEditingWorkspace(_hluWS);
         }
     }
     catch { }
 }
Пример #36
0
 public static void load(string path)
 {
     g_pMyMapCtrl = (IMapControl3)g_pAxMapControl.Object;
     g_pMap = g_pAxMapControl.Map;
     g_pGraph = (IGraphicsContainer)g_pMap;
     IWorkspace workspace = SDEOperation.connectSde(path);//dfjia
     g_pCurrentWorkSpace = workspace;
     g_CurWorkspaceEdit = (IWorkspaceEdit)workspace;
     contextMenu.SetHook(g_pAxMapControl.Object);
     //g_pAxMapControl.ActiveView.Refresh();
 }
        public void ProcessFeature(IWorkspaceEdit iwe, IFeatureLayer ifl_active, IRow rw)
        {
            double value = double.NaN;

            if (CoordinateSystem == "")
            {
                CoordinateSystem = ((IFeature)rw).Shape.SpatialReference.Name;
            }

            if (this.LinearUnit == null || this.LinearUnit == "")
            {
                if (fieldTier == 2)
                {
                    LinearUnit = rw.get_Value(GetFieldUnitIndex()).ToString();
                }

                if (this.LinearUnit == null || this.LinearUnit.Trim() == "")
                {
                    LinearUnit = GetSpatialReferenceLinearUnit(((IFeature)rw).Shape.SpatialReference);
                }
            }

            if (LinearUnit.IndexOf("meter", 0, StringComparison.CurrentCultureIgnoreCase) > -1)
            {
                if (useArealUnit)
                {
                    currentAreaUnit = esriAreaUnits.esriSquareMeters;
                    LinearUnit = "Square Meters";
                }
                else
                {
                    currentLinearUnit = esriUnits.esriMeters;
                }
            }
            else if (LinearUnit.IndexOf("foot", 0, StringComparison.CurrentCultureIgnoreCase) > -1)
            {
                if (useArealUnit)
                {
                    currentAreaUnit = esriAreaUnits.esriSquareFeet;
                    LinearUnit = "Square Feet";
                }
                else
                {
                    currentLinearUnit = esriUnits.esriFeet;
                }
            }
            else if (LinearUnit.IndexOf("acre", 0, StringComparison.CurrentCultureIgnoreCase) > -1)
            {
                currentAreaUnit = esriAreaUnits.esriAcres;
                currentLinearUnit = esriUnits.esriUnknownUnits;
                LinearUnit = "Acres";
            }

            if (doReCalcValues || !double.TryParse(rw.get_Value(GetFieldIndex()).ToString(), out value) || value == double.NaN || value == 0.0)
            {
                value = DoMeasure(rw);

                //try writing the (single) measured value to the table
                try
                {
                    IFeature feat = (IFeature)rw;

                    //if we are re-calculating all values, there is no need to start editing on each row
                    if (!doReCalcValues)
                    {
                        if (!iwe.IsBeingEdited())
                            iwe.StartEditing(true);

                        iwe.StartEditOperation();
                    }

                    feat.set_Value(GetFieldIndex(), value);
                    feat.set_Value(GetFieldUnitIndex(), LinearUnit);
                    feat.Store();
                }
                catch (Exception err)
                {
                }
                finally
                {
                    if (!doReCalcValues)
                    {
                        iwe.StopEditOperation();

                        if (iwe.IsBeingEdited())
                            iwe.StopEditing(true);

                        //there may be more than one row that requires editing
                        doReCalcValues = true;
                    }
                }
            }

            values.Add(value);
        }
Пример #38
0
        public bool InsertNewRow(ITable table,IWorkspaceEdit workspace)
        {
            using (ComReleaser comReleaser = new ComReleaser())
            {
                try
                {
                    multiWspEdit.StartMultiuserEditing(esriMultiuserEditSessionMode.esriMESMVersioned);
                    workspace.StartEditOperation();
                    _currentRow = table.CreateRow();
                    _currentRow.Store();
                    workspace.StopEditOperation();
                    workspace.StopEditing(true);
                    return true;
                }
                catch {
                    workspace.StopEditOperation();
                    workspace.StopEditing(false);
                    return false; }

            }
        }
Пример #39
0
    /// <summary>
    /// Initializes a new instance of the <see cref="FieldPropertyDescriptor"/> class.
    /// </summary>
    /// <param name="wrappedTable">The wrapped table.</param>
    /// <param name="fieldName">Name of the field within wrappedTable.</param>
    /// <param name="fieldIndex">Index of the field within wrappedTable.</param>
    public FieldPropertyDescriptor(ITable wrappedTable, string fieldName, int fieldIndex)
      : base(fieldName, null)
    {
      wrappedFieldIndex = fieldIndex;

      // Get the field this property will represent. We will use it to
      // get the field type and determine whether it can be edited or not. In
      // this case, editable means the field's editable property is true and it
      // is not a blob, geometry or raster field.
      IField wrappedField = wrappedTable.Fields.get_Field(fieldIndex);
      esriType = wrappedField.Type;
      isEditable = wrappedField.Editable && 
        (esriType != esriFieldType.esriFieldTypeBlob) &&
        (esriType != esriFieldType.esriFieldTypeRaster) &&
        (esriType != esriFieldType.esriFieldTypeGeometry);
      netType = actualType = EsriFieldTypeToSystemType(wrappedField);
      wkspcEdit = ((IDataset)wrappedTable).Workspace as IWorkspaceEdit;
    } 
Пример #40
0
        public SDETable(ITable table, IWorkspace workspace)
        {
            _table = table;

            _workspace = workspace;
            _workspaceEdit = (IWorkspaceEdit)_workspace;
            multiWspEdit = (IMultiuserWorkspaceEdit)_workspace;
        }
Пример #41
0
        /// <summary>
        /// 开始编辑
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Star_Edit_Click(object sender, EventArgs e)
        {
            if (flaglayer == null)
            {
                MessageBox.Show("请选取图层");
                return;
            }
            else
            {

                istoolenable(true);
                //for (int i = 0; i < axMapControl1.LayerCount;i++)
                //mlayer = axMapControl1.Map.get_Layer(0);
                m_map = axMapControl1.Map;
                //mlayer = getLayerByName(m_map, comboBox1.SelectedText);
                mfeaturelayer = flaglayer as IFeatureLayer;
                mlayer = flaglayer;

                mfeatureclass = mfeaturelayer.FeatureClass;
                dataset = mfeatureclass as IDataset;
                mworkspace = dataset.Workspace;
                CurWorkspaceEdit = mworkspace as IWorkspaceEdit;

                //CurWorkspaceEdit.StartEditing(true);
                //CurWorkspaceEdit.StartEditOperation();

                mEngineEditor.StartEditing(mworkspace, m_map);
                mEngineEditLayer = mEngineEditor as IEngineEditLayers;
                mEngineEditLayer.SetTargetLayer(mfeaturelayer, 0);
                //((IEngineEditLayers)mEngineEditor).SetTargetLayer(mfeaturelayer, 0);

            }
        }
Пример #42
0
 ITable IDataManager.OpenTableFromSDE(IWorkspaceEdit workspace, string table)
 {
     IFeatureWorkspace fwsp = (IFeatureWorkspace)workspace;
        return fwsp.OpenTable(table);
 }
Пример #43
0
 public SDETable(ITable table, IWorkspaceEdit workspaceEdit)
 {
     _table = table;
     _workspaceEdit = workspaceEdit;
 }
Пример #44
0
        public void Calculate(List<object> newId)
        {
            #region tinh gia dat
            //cachtinhdongia = "[giadatduong] * [hesodatsxkd]";
            //cachtinhdongia = "DonGiaSxkdMattienDt(Multiply([giadatduong],[hesodatsxkd]))";
            //cachtinhdongia = "DonGiaOcoNnMattienDt([giadatduong])";
            //cachtinhdongia = "DonGiaOcoSxkdMattienDt([giadatduong])";
            //cachtinh="[giadatduong] * [dientich]";
            //cachtinh = "GiaDatSxkdMattienDt([giadatduong] * [hesodatsxkd] * [dientich])";
            //cachtinh = "DonGiaOcoNnMattienDt(Multiply([giadatduong],[giadatnongnghiep]))";

            #region khoi tao cac bien
            SdeConnection conn = new SdeConnection();
            ISdeConnectionInfo sdeConn = conn as ISdeConnectionInfo;
            _wspEdit = (IWorkspaceEdit)sdeConn.Workspace;
            _mwspEdit = (IMultiuserWorkspaceEdit)sdeConn.Workspace;
            IFeatureWorkspace fw = (IFeatureWorkspace)sdeConn.Workspace;
            copyTool = new DataManager(sdeConn.Workspace, sdeConn.Environment);
            this._fcName = new TnFeatureClassName(sdeConn.Workspace);
            this._tblName = new TnTableName(sdeConn.Workspace);
            string tgdDraft = string.Format("{0}_{1}", DataNameTemplate.Thua_Gia_Dat_Draft, this._currentConfig.NamApDung);
            string gdd = string.Format("{0}_{1}", DataNameTemplate.Gia_Dat_Duong, this._currentConfig.NamApDung);
            string gdhem = string.Format("{0}_{1}", DataNameTemplate.Gia_Hem, this._currentConfig.NamApDung);
            string gdhemPhu = string.Format("{0}_{1}", DataNameTemplate.Gia_Hem_Phu, this._currentConfig.NamApDung);
            string thuaName = string.Format("{0}_{1}", DataNameTemplate.Thua, this._currentConfig.NamApDung);
            string gdNnName=string.Format("{0}_{1}", DataNameTemplate.Gia_Dat_Nongnghiep, this._currentConfig.NamApDung);
            string gdPnnNtName = string.Format("{0}_{1}", DataNameTemplate.Gia_Dat_Pnn_Nongthon, this._currentConfig.NamApDung);
            _fcName.FC_THUA.NAME = thuaName;
            _fcName.FC_THUA.InitIndex();
            _fcName.FC_THUA_GIADAT_DRAFT.NAME = tgdDraft;
            _fcName.FC_THUA_GIADAT_DRAFT.InitIndex();
            _tblName.GIA_DAT_DUONG.NAME = gdd;
            _tblName.GIA_DAT_DUONG.InitIndex();
            _fcName.FC_GIA_DAT_HEM.NAME = gdhem;
            _fcName.FC_GIA_DAT_HEM.InitIndex();
            _fcName.FC_GIA_DAT_HEM_PHU.NAME = gdhemPhu;
            _fcName.FC_GIA_DAT_HEM_PHU.InitIndex();
            _tblName.GIA_DAT_NONGNGHIEP.NAME = gdNnName;
            _tblName.GIA_DAT_NONGNGHIEP.InitIndex();
            _tblName.GIA_DAT_O_NONGTHON.NAME = gdPnnNtName;
            _tblName.GIA_DAT_O_NONGTHON.InitIndex();
            IFeatureClass tgdDraftFeatureClass = null;
            try
            {
                tgdDraftFeatureClass = fw.OpenFeatureClass(tgdDraft);
            }
            catch
            {
                MessageBox.Show("Không tìm thấy bảng " + tgdDraft);
                return;
            }
            IFeatureClass fcGiaDatHem = null;
            try
            {
                fcGiaDatHem = fw.OpenFeatureClass(gdhem);
            }
            catch
            {
                MessageBox.Show("Không tìm thấy bảng " + gdhem);
            }
            IFeatureClass fcGiaDatHemPhu = null;
            try
            {
                fcGiaDatHemPhu = fw.OpenFeatureClass(gdhemPhu);
            }
            catch
            {
                MessageBox.Show("Không tìm thấy bảng " + gdhemPhu);
            }
            ITable tblLoaiDat;
            ITable tblThuaGiaDatDraft;
            ITable tblGiaDatDuong;
            ITable tblHesoVitri;
            ITable tblTenDuong;
            ITable tblGiaDatNn;
            ITable tblGiaDatPnnNt;
            IFeatureClass fcThua;
            IFeatureClass fcXa;
            IFeatureClass fcDuong;
            IFeatureClass fcKtvhxh;
            IFeatureClass fcHemChinh;
            #endregion

            #region dinh nghia cac bien

            try
            {
                fcThua = fw.OpenFeatureClass(thuaName);
            }
            catch
            {
                MessageBox.Show("Không tìm thấy bảng " + thuaName);
                return;
            }

            try
            {
                tblTenDuong = fw.OpenTable(DataNameTemplate.Ten_Duong);
            }
            catch(Exception ex)
            {
                MessageBox.Show("Không tìm thấy bảng " + DataNameTemplate.Ten_Duong);
                return;
            }

            try
            {
                tblLoaiDat = fw.OpenTable(DataNameTemplate.Loai_Dat);
                tblThuaGiaDatDraft = (ITable)tgdDraftFeatureClass;

                //tblThuaGiaDat = fw.OpenTable(_fcName.FC_THUA_GIADAT.NAME);
                tblGiaDatDuong = fw.OpenTable(gdd);

                tblHesoVitri = fw.OpenTable(DataNameTemplate.He_So_K);
            }
            catch
            {
                MessageBox.Show("Không tìm thấy bảng " + tgdDraft);
                return;
            }

            try
            {
                tblGiaDatNn = fw.OpenTable(gdNnName);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Không tìm thấy bảng " + gdNnName);
                return;
            }

            try
            {
                tblGiaDatPnnNt = fw.OpenTable(gdPnnNtName);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Không tìm thấy bảng " + gdPnnNtName);
                return;
            }

            try
            {
                fcXa = fw.OpenFeatureClass(DataNameTemplate.Ranh_Xa_Poly);
            }
            catch
            {
                MessageBox.Show("Không tìm thấy bảng " + DataNameTemplate.Ranh_Xa_Poly);
                return;
            }

            try
            {
                fcHemChinh = fw.OpenFeatureClass(DataNameTemplate.Hem);
            }
            catch
            {
                MessageBox.Show("Không tìm thấy bảng " + DataNameTemplate.Hem);
                return;
            }

            ISDETableEditor sdeTblTgdEditor = new SDETable(tblThuaGiaDatDraft, sdeConn.Workspace);
            IQueryFilter qrf = new QueryFilterClass();
            #endregion

            string paramTableName = DataNameTemplate.Thong_So + "_" + _currentConfig.NamApDung;
            ITable paramTable = fw.OpenTable(paramTableName);
            Dictionary<string, object> pars4TinhGia = new Dictionary<string, object>();
            Dictionary<string, object> pars4TinhDonGia = new Dictionary<string, object>();
            IQueryFilter q = new QueryFilterClass();
            q.WhereClause = "";
            ICursor parCursor = paramTable.Search(q, false);
            IRow parRow = null;
            try
            {
                while ((parRow = parCursor.NextRow()) != null)
                {
                    string parName = parRow.get_Value(parRow.Fields.FindField(_tblName.THONG_SO.TEN_THONG_SO)).ToString();
                    object parVal = parRow.get_Value(parRow.Fields.FindField(_tblName.THONG_SO.GIA_TRI));
                    try
                    {
                        pars4TinhGia.Add(parName, parVal);
                        pars4TinhDonGia.Add(parName, parVal);
                    }
                    catch (Exception ex)
                    {
                        continue;
                    }
                }
            }
            catch (Exception) { }
            finally { Marshal.ReleaseComObject(parCursor); }
            pars4TinhGia.Add(ExpressionParameters.GiaDatDuong, 0);
            pars4TinhGia.Add(ExpressionParameters.DienTichPl, 0);
            pars4TinhGia.Add(ExpressionParameters.GiaDatNn,0);
            pars4TinhGia.Add(ExpressionParameters.GiaDatONT, 0);
            pars4TinhGia.Add(ExpressionParameters.GiaDatHemChinh, 0);
            pars4TinhGia.Add(ExpressionParameters.GiaDatHemPhu, 0);

            pars4TinhDonGia.Add(ExpressionParameters.GiaDatDuong,0);
            pars4TinhDonGia.Add(ExpressionParameters.GiaDatNn,0);
            pars4TinhDonGia.Add(ExpressionParameters.GiaDatONT, 0);
            pars4TinhDonGia.Add(ExpressionParameters.GiaDatHemChinh, 0);
            pars4TinhDonGia.Add(ExpressionParameters.GiaDatHemPhu, 0);

            #region vong lap tung id

            #region khoi dau
            int rowTgdNnHandleUpdate = 0;
            string cachtinh="";
            string cachtinhdongia = "";
            bool result = false;
            List<object[,]> pairColValTgd = new List<object[,]>();
            CalculationEventArg evt = new CalculationEventArg();
            if (_caller != null)
            {
                evt.Reset();
                evt.Log = "\n\nBắt đầu tính giá cho các thửa vừa xác định vị trí";
                _caller.onCalculating(evt);
            }
            int len = newId.Count;
            int thuaCount = 1;
            //MessageBox.Show(len.ToString());
            #endregion

            foreach (object o in newId)
            {
                #region lay thong tin thua gia dat
                IRow tgdRowNew = tblThuaGiaDatDraft.GetRow((int)o);
                string mathuaNew = tgdRowNew.get_Value(tgdRowNew.Fields.FindField(_fcName.FC_THUA_GIADAT_DRAFT.MA_THUA)).ToString();
                string maduongNew = tgdRowNew.get_Value(tgdRowNew.Fields.FindField(_fcName.FC_THUA_GIADAT_DRAFT.MA_DUONG)).ToString();
                string hesovitriNew = tgdRowNew.get_Value(tgdRowNew.Fields.FindField(_fcName.FC_THUA_GIADAT_DRAFT.HE_SO_K)).ToString();
                object dientich = tgdRowNew.get_Value(tgdRowNew.Fields.FindField(_fcName.FC_THUA_GIADAT_DRAFT.DIEN_TICH));
                object dientichpl = tgdRowNew.get_Value(tgdRowNew.Fields.FindField(_fcName.FC_THUA_GIADAT_DRAFT.DIEN_TICH_PHAP_LY));
                object khoagia = tgdRowNew.get_Value(tgdRowNew.Fields.FindField(_fcName.FC_THUA_GIADAT_DRAFT.LOCKED));
                object mahem=tgdRowNew.get_Value(tgdRowNew.Fields.FindField(_fcName.FC_THUA_GIADAT_DRAFT.MA_HEM));
                object dorongHem=0;
                object tenHem = "";
                //MessageBox.Show("line 237 CalcLandprice, maduong=" + maduongNew);
                if (khoagia != null)
                {
                    if (khoagia.ToString() != "0" && khoagia.ToString()!="")
                    {
                        //MessageBox.Show(khoagia.ToString());
                        if (_caller != null)
                        {
                            evt.Reset();
                            evt.IdThuaKhoaGia = o;
                            evt.mathua = mathuaNew;
                            _caller.onCalculating(evt);
                        }
                        continue;
                    }
                }
                #endregion

                #region lay cach tinh
                qrf.WhereClause = string.Format("{0}='{1}'", "hesovitri", hesovitriNew);
                ICursor curNew = tblHesoVitri.Search(qrf, false);

                try
                {
                    IRow rowNew = curNew.NextRow();
                    if (rowNew != null)
                    {
                        cachtinh = rowNew.get_Value(_tblName.HESO_VITRI.GetIndex(_tblName.HESO_VITRI.CACH_TINH)).ToString();
                        cachtinhdongia = rowNew.get_Value(_tblName.HESO_VITRI.GetIndex(_tblName.HESO_VITRI.CACH_TINH_DON_GIA)).ToString();
                        //MessageBox.Show("line 262 CalcLandprice, cachtinhdongia=" + cachtinhdongia);
                    }
                }
                catch (COMException comExc) { }
                finally
                {
                    Marshal.ReleaseComObject(curNew);
                }

                Evaluation evalTinhGia = new Evaluation(cachtinh);
                Evaluation evalTinhDonGia = new Evaluation(cachtinhdongia);
                Evaluation evalCachtinh = new Evaluation(cachtinhdongia);
                #endregion

                #region lay gia dat duong
                //MessageBox.Show("line 365 maduong=" + maduongNew);
                qrf.WhereClause = string.Format("{0}='{1}'", _tblName.GIA_DAT_DUONG.MA_DUONG, maduongNew);
                ICursor gdDuongCur = null;
                gdDuongCur = tblGiaDatDuong.Search(qrf, false);
                IRow gdDuongRow = null;
                double giaduong = 0;
                try
                {
                    if ((gdDuongRow = gdDuongCur.NextRow()) != null)
                    {
                        result = double.TryParse(gdDuongRow.get_Value(_tblName.GIA_DAT_DUONG.GetIndex(_tblName.GIA_DAT_DUONG.GIA_DAT)).ToString(), out giaduong);
                        if (!result)
                        {
                            giaduong = 0;
                        }
                        //MessageBox.Show("line 292 CalcLandprice, giaduong=" + giaduong.ToString());
                    }
                }
                catch (COMException comExc) { }
                finally { Marshal.ReleaseComObject(gdDuongCur); }
                #endregion

                #region lay ten duong
                qrf.WhereClause = string.Format("{0}='{1}'", _tblName.TEN_DUONG.MA_DUONG, maduongNew);
                ICursor tenDuongCur = null;
                tenDuongCur = tblTenDuong.Search(qrf, false);
                IRow tenDuongRow = null;
                object tenduong = "";
                object batdau = "";
                object ketthuc = "";
                try
                {
                    if ((tenDuongRow = tenDuongCur.NextRow()) != null)
                    {
                        tenduong = tenDuongRow.get_Value(_tblName.TEN_DUONG.GetIndex(_tblName.TEN_DUONG.TEN_DUONG));
                        batdau = tenDuongRow.get_Value(_tblName.TEN_DUONG.GetIndex(_tblName.TEN_DUONG.BAT_DAU));
                        ketthuc = tenDuongRow.get_Value(_tblName.TEN_DUONG.GetIndex(_tblName.TEN_DUONG.KET_THUC));
                    }
                }
                catch (COMException comExc) { giaduong = 0; }
                finally { Marshal.ReleaseComObject(tenDuongCur); }
                #endregion

                #region lay loai dat, loai xa
                qrf.WhereClause = string.Format("{0}='{1}'", _fcName.FC_THUA.MA_THUA, mathuaNew);
                IFeatureCursor thuaCur = null;
                thuaCur = fcThua.Search(qrf, false);
                IFeature thuaFt = null;
                object loaidat = "";
                object maxa = "";
                try
                {
                    if ((thuaFt = thuaCur.NextFeature()) != null)
                    {
                        loaidat = thuaFt.get_Value(_fcName.FC_THUA.GetIndex(_fcName.FC_THUA.LOAI_DAT));
                        maxa = thuaFt.get_Value(_fcName.FC_THUA.GetIndex(_fcName.FC_THUA.MA_XA));
                    }

                    #region kiem tra co dat nong nghiep

                    foreach (string s in TnLoaiDats.NONG_NGHIEP)
                    {
                        if (loaidat.ToString().Contains(s))
                        {
                            _loaidatNn = s;

                            break;
                        }
                        else
                        {
                            _loaidatNn = "";
                        }
                    }
                    #endregion
                }
                catch (COMException comExc) { }
                finally { Marshal.ReleaseComObject(thuaCur); }
                #endregion

                //danh cho thua co dat nong nghiep
                #region lay ma xa va gia dat nong nghiep
                object loaixa = "";
                object giadatNnDeGhi = 0;
                object giadatNnDeTinh = 0;
                int loaiDoThi = 0;
                object loaiDatNnDeTinh = "";
                string nnStart = hesovitriNew.Substring(0, 1);
                string nnEnd = hesovitriNew.Substring(hesovitriNew.Length - 1, 1);
                object giadatPnnNt = 0;
                double giahem = 0;
                double giahemPhu = 0;
                if (nnStart=="5" || nnStart=="2"|| nnStart=="1")
                {

                    qrf.WhereClause = string.Format("{0}='{1}'", _fcName.FC_RANH_XA_POLY.MA_XA, maxa);
                    IFeatureCursor xaFcr = fcXa.Search(qrf, false);
                    IFeature xaFt = null;
                    try
                    {
                        if ((xaFt = xaFcr.NextFeature()) != null)
                        {
                            loaixa = xaFt.get_Value(xaFt.Fields.FindField(_fcName.FC_RANH_XA_POLY.MA_LOAI_XA));
                            result = int.TryParse(xaFt.get_Value(xaFt.Fields.FindField(_fcName.FC_RANH_XA_POLY.MA_LOAI_XA)).ToString(), out loaiDoThi);
                        }
                    }
                    catch (Exception ex) { loaixa = ""; }
                    finally { Marshal.ReleaseComObject(xaFcr); }

                    if (loaixa != "")
                    {
                        #region neu la dat o nong thon
                        if (nnStart == "2")
                        {
                            object vitriPnn;
                            object khuvucPnn;
                            getVitriPnnNt(hesovitriNew, out vitriPnn, out khuvucPnn);
                            qrf.WhereClause = string.Format("{0}='{1}' and {2}='{3}' and {4}='{5}'",
                                _tblName.GIA_DAT_O_NONGTHON.MA_LOAI_XA, loaixa,
                                _tblName.GIA_DAT_O_NONGTHON.VI_TRI, vitriPnn,
                                _tblName.GIA_DAT_O_NONGTHON.MA_KHU_VUC, khuvucPnn);
                            //MessageBox.Show("line 471 CalcLandprice, qrf=" + qrf.WhereClause);
                            ICursor gdPnnCur = tblGiaDatPnnNt.Search(qrf, false);
                            IRow gdPnnRow = null;
                            try
                            {
                                if ((gdPnnRow = gdPnnCur.NextRow()) != null)
                                {
                                    giadatPnnNt = gdPnnRow.get_Value(gdPnnRow.Fields.FindField(_tblName.GIA_DAT_O_NONGTHON.GIA_DAT));
                                }
                                else
                                {
                                    giadatPnnNt = 0;
                                }
                                //MessageBox.Show("line 484 CalcLandprice, giadat=" + giadatPnnNt);
                            }
                            catch (Exception ex) { giadatPnnNt = 0; }
                            finally { Marshal.ReleaseComObject(gdPnnCur); }
                        }
                        #endregion

                        #region neu co dat nong nghiep
                        if (nnStart == "5" || (nnStart == "2" && nnEnd == "2") || nnStart == "1")
                        {
                            loaiDatNnDeTinh = _loaidatNn;
                            object vitriNn = getVitriNongNghiep(hesovitriNew);

                            if (loaiDoThi != 0)
                            {
                                vitriNn = 1;
                                loaiDatNnDeTinh = "LNQ";
                            }
                            qrf.WhereClause = string.Format("{0}='{1}' and {2}='{3}' and {4}='{5}'",
                                _tblName.GIA_DAT_NONGNGHIEP.MA_LOAI_DAT, loaiDatNnDeTinh,
                                _tblName.GIA_DAT_NONGNGHIEP.MA_LOAI_XA, loaixa,
                                _tblName.GIA_DAT_NONGNGHIEP.VI_TRI, vitriNn);
                            ICursor gdNnCur = tblGiaDatNn.Search(qrf, false);
                            IRow gdNnRow = null;
                            try
                            {
                                if ((gdNnRow = gdNnCur.NextRow()) != null)
                                {
                                    giadatNnDeGhi = gdNnRow.get_Value(gdNnRow.Fields.FindField(_tblName.GIA_DAT_NONGNGHIEP.GIA_DAT));
                                }
                                else
                                {
                                    giadatNnDeGhi = 0;
                                }
                            }
                            catch (Exception ex) { giadatNnDeGhi = 0; }
                            finally { Marshal.ReleaseComObject(gdNnCur); }
                            //MessageBox.Show(string.Format("line 331 CalcLandprice giadatnndegi={0}", giadatNnDeGhi));

                            //neu ko phai dat thuan nong nghiep
                            if (nnStart != "1")
                            {
                                if (double.Parse(dientichpl.ToString()) < 200)
                                {
                                    giadatNnDeTinh = 0;
                                }
                                else
                                {
                                    giadatNnDeTinh = giadatNnDeGhi;
                                }
                            }
                            else
                            {
                                giadatNnDeTinh = giadatNnDeGhi;
                            }
                        }
                        #endregion

                    }
                    //lay gia dat nn o vi tri theo quy dinh (vt3)
                    //qrf.WhereClause=string.Format("{0}='{1}' and {2}='{3}'",_tblName.GIA_DAT_NONGNGHIEP.MA_LOAI_DAT,_loaidatNn,_tblName.GIA_DAT_NONGNGHIEP.MA_LOAI_XA,)
                }

                #endregion
                if (mahem != null)
                {
                    #region lay thong tin hem
                    //MessageBox.Show("line 567 CalcLandprice, mahem=" + mahem);

                    if (mahem.ToString() != "0" && mahem.ToString() != "")
                    {
                        qrf.WhereClause = string.Format("{0}='{1}'", _fcName.FC_HEM.MA_HEM, mahem);
                        IFeatureCursor hemFcur = fcHemChinh.Search(qrf, false);
                        IFeature hemFt = null;
                        int maHemChinh = 0;
                        try
                        {
                            if ((hemFt = hemFcur.NextFeature()) != null)
                            {
                                dorongHem = hemFt.get_Value(hemFt.Fields.FindField(_fcName.FC_HEM.DO_RONG));
                                tenHem = hemFt.get_Value(hemFt.Fields.FindField(_fcName.FC_HEM.TEN_HEM));
                                maduongNew = hemFt.get_Value(hemFt.Fields.FindField(_fcName.FC_HEM.MA_DUONG)).ToString();
                                result = int.TryParse(hemFt.get_Value(hemFt.Fields.FindField(_fcName.FC_HEM.HEM_CHINH)).ToString(), out maHemChinh);
                                if (!result)
                                {
                                    maHemChinh = 0;
                                }
                                //MessageBox.Show("line 586 CalcLandprice,mahemchinh=" + maHemChinh);
                            }
                        }
                        catch (Exception ex)
                        {
                            //MessageBox.Show("line 566 CalcLandprice, ex=" + ex.ToString());
                        }
                        finally { Marshal.ReleaseComObject(hemFcur); }

                        #region lay gia dat hem chinh
                        string hsvitriHem = getHesoHem(hesovitriNew);
                        //MessageBox.Show("line 597 hsvitrihem=" + hsvitriHem);
                        if (hsvitriHem == "0")
                        {
                            continue;
                        }
                        if (maHemChinh == 0)
                        {
                            qrf.WhereClause = string.Format("{0}='{1}' and {2}='{3}'", _fcName.FC_GIA_DAT_HEM.MA_HEM, mahem, _fcName.FC_GIA_DAT_HEM.HE_SO, hsvitriHem);
                            //MessageBox.Show("line 603 CalcLandprice, qrf=" + qrf.WhereClause);
                            IFeatureCursor gdHemCur = null;
                            gdHemCur = fcGiaDatHem.Search(qrf, false);
                            IFeature gdHemRow = null;
                            //MessageBox.Show("line 588 CalcLandprice, giaHem=" + _fcName.FC_GIA_DAT_HEM.GetIndex(_fcName.FC_GIA_DAT_HEM.GIA_DAT));
                            try
                            {
                                if ((gdHemRow = gdHemCur.NextFeature()) != null)
                                {

                                    result = double.TryParse(gdHemRow.get_Value(_fcName.FC_GIA_DAT_HEM.GetIndex(_fcName.FC_GIA_DAT_HEM.GIA_DAT)).ToString(), out giahem);
                                    if (!result)
                                    {
                                        giahem = 0;
                                    }
                                    //MessageBox.Show("line 588 CalcLandprice, giaHem=" + giahem.ToString());
                                }
                            }
                            catch (COMException comExc)
                            {
                                //MessageBox.Show("line 593 CalcLandprice comexc=" + comExc.ToString());
                            }
                            finally { Marshal.ReleaseComObject(gdHemCur); }
                        }
                        #endregion
                        #region lay gia hem phu
                        else
                        {
                            qrf.WhereClause = string.Format("{0}='{1}' and {2}='{3}'", _fcName.FC_GIA_DAT_HEM_PHU.MA_HEM, mahem, _fcName.FC_GIA_DAT_HEM_PHU.HE_SO, hsvitriHem);
                            //MessageBox.Show("line 632 CalcLandprice, qrf=" + qrf.WhereClause);
                            IFeatureCursor gdHemPhuCur = null;
                            gdHemPhuCur = fcGiaDatHemPhu.Search(qrf, false);
                            IFeature gdHemPhuRow = null;
                            //MessageBox.Show("line 588 CalcLandprice, giaHem=" + _fcName.FC_GIA_DAT_HEM.GetIndex(_fcName.FC_GIA_DAT_HEM.GIA_DAT));
                            try
                            {
                                if ((gdHemPhuRow = gdHemPhuCur.NextFeature()) != null)
                                {

                                    result = double.TryParse(gdHemPhuRow.get_Value(_fcName.FC_GIA_DAT_HEM_PHU.GetIndex(_fcName.FC_GIA_DAT_HEM_PHU.GIA_DAT)).ToString(), out giahemPhu);
                                    if (!result)
                                    {
                                        giahemPhu = 0;
                                    }
                                    //MessageBox.Show("line 646 CalcLandprice, giaHemPhu=" + giahemPhu.ToString());
                                }
                            }
                            catch (COMException comExc)
                            {
                                //MessageBox.Show("line 593 CalcLandprice comexc=" + comExc.ToString());
                            }
                            finally { Marshal.ReleaseComObject(gdHemPhuCur); }
                        }
                        #endregion

                        #region lay gia duong tu lop gia hem

                        qrf.WhereClause = string.Format("{0}='{1}'", _tblName.GIA_DAT_DUONG.MA_DUONG, maduongNew);
                        gdDuongCur = null;
                        gdDuongCur = tblGiaDatDuong.Search(qrf, false);
                        gdDuongRow = null;
                        giaduong = 0;
                        try
                        {
                            if ((gdDuongRow = gdDuongCur.NextRow()) != null)
                            {
                                result = double.TryParse(gdDuongRow.get_Value(_tblName.GIA_DAT_DUONG.GetIndex(_tblName.GIA_DAT_DUONG.GIA_DAT)).ToString(), out giaduong);
                                if (!result)
                                {
                                    giaduong = 0;
                                }
                                //MessageBox.Show("line 292 CalcLandprice, giaduong=" + giaduong.ToString());
                            }
                        }
                        catch (COMException comExc) { }
                        finally { Marshal.ReleaseComObject(gdDuongCur); }
                        #endregion
                    }
                    #endregion
                }
                    //MessageBox.Show(string.Format("line 346 CalcLandprice giadatnndegi={0}, giadatnndetinh={1}", giadatNnDeGhi, giadatNnDeTinh));
                #region lay gia dat o nong thon
                int intHsk = int.Parse(hesovitriNew);
                #endregion

                #region tinh gia
                //evalTinhGia.Giadatduong = giaduong;
                //evalTinhGia.Dientich = dientich;
                //evalTinhGia.Dientichpl = dientichpl;
                //evalTinhGia.GiadatNn = giadatNnDeTinh;
                //evalTinhDonGia.Giadatduong = giaduong;
                //evalTinhDonGia.GiadatNn = giadatNnDeTinh;
                //Dictionary<string, object> pars = new Dictionary<string, object>();
                //MessageBox.Show("line 609 CalcLandprice, giaHem=" + giahem.ToString());
                pars4TinhGia[ExpressionParameters.GiaDatDuong] = giaduong;
                pars4TinhGia[ExpressionParameters.DienTichPl] = dientichpl;
                pars4TinhGia[ExpressionParameters.GiaDatNn] = giadatNnDeTinh;
                pars4TinhGia[ExpressionParameters.GiaDatONT] = giadatPnnNt;
                pars4TinhGia[ExpressionParameters.GiaDatHemChinh] = giahem;
                pars4TinhGia[ExpressionParameters.GiaDatHemPhu] = giahemPhu;
                //pars.Add(ExpressionParameters.HeSoDatSxkd, _currentConfig.PGiaDatSxkddt);
                evalTinhGia.Params = pars4TinhGia;

                //Dictionary<string, object> pars1 = new Dictionary<string, object>();
                //pars1.Add(ExpressionParameters.GiaDatDuong, giaduong);
                //pars1.Add(ExpressionParameters.GiaDatNn, giadatNnDeTinh);
                //pars1.Add(ExpressionParameters.HeSoDatSxkd, _currentConfig.PGiaDatSxkddt);
                pars4TinhDonGia[ExpressionParameters.GiaDatDuong] = giaduong;
                pars4TinhDonGia[ExpressionParameters.DienTichPl] = dientichpl;
                pars4TinhDonGia[ExpressionParameters.GiaDatNn] = giadatNnDeTinh;
                pars4TinhDonGia[ExpressionParameters.GiaDatONT] = giadatPnnNt;
                pars4TinhDonGia[ExpressionParameters.GiaDatHemChinh] = giahem;
                pars4TinhDonGia[ExpressionParameters.GiaDatHemPhu] = giahemPhu;
                evalTinhDonGia.Params = pars4TinhDonGia;

                object giaMoiTinh = evalTinhGia.EvaluateLandPrice();
                object dongiaMoiTinh = evalTinhDonGia.EvaluateLandPrice();
                //MessageBox.Show(string.Format("line 660 CalcLandprice dongia={0}", dongiaMoiTinh));
                #endregion

                #region ghi cach tinh
                _methodBuilder.BatDau = batdau;
                _methodBuilder.CachTinh = cachtinh;
                _methodBuilder.CachTinhDonGia = cachtinhdongia;
                _methodBuilder.GiaDatNN = giadatNnDeGhi;
                _methodBuilder.GiaDuong = giaduong;
                _methodBuilder.KetThuc = ketthuc;
                _methodBuilder.LoaiDat = loaidat;
                _methodBuilder.TenDuong = tenduong;
                _methodBuilder.DoRongHem = dorongHem;
                _methodBuilder.LoaiXa = loaixa;
                string strCachtinh=_methodBuilder.GetMethodString(hesovitriNew);
                //evt.Reset();
                //evt.Log = string.Format("\n\nĐộ dài cách tính:{0}, cachtinh={1}",strCachtinh.Length,strCachtinh);
                //_caller.onCalculating(evt);
                //MessageBox.Show(string.Format("line 241 CalcLandprice {0}, {1}",hesovitriNew,TnHeSoK.DatOMatTienDt));
                //if (hesovitriNew == TnHeSoK.DatOMatTienDt.ToString())
                //{
                //    strCachtinh = string.Format("Đất ở đô thị ({0}), mặt tiền đường {1} (giá={2}) đoạn từ {3} đến {4}. Giá đất = {5}", loaidat, tenduong, giaduong, batdau, ketthuc, cachtinhdongia);
                //    //MessageBox.Show(string.Format("line 241 CalcLandprice \n{0}", strCachtinh));
                //}
                //else if (hesovitriNew == TnHeSoK.DatSxkdMatTienDt.ToString())
                //{
                //    strCachtinh = string.Format("Đất sxkd tại đô thị ({0}) (hệ số ={1}), mặt tiền đường {2} (giá={3}) đoạn từ {4} đến {5}. Giá đất = {6}", loaidat, _currentConfig.PGiaDatSxkddt, tenduong,giaduong, batdau, ketthuc, cachtinhdongia);
                //}
                //else if (hesovitriNew == TnHeSoK.DatONnMatTien.ToString())
                //{
                //    strCachtinh = string.Format("Đất ở tại đô thị có đất nông nghiệp ({0}) (giá đất nn ={1}), mặt tiền đường {2} (giá={3}) đoạn từ {4} đến {5}. Giá đất = {6}", loaidat, giadatNnDeGhi, tenduong, giaduong, batdau, ketthuc, cachtinhdongia);
                //}
                #endregion

                #region lay cach ghi cach tinh gia
                //string ct = string.Format(cachtinh);
                //MessageBox.Show(evalCachtinh.EvaluateMethod().ToString());
                #endregion

                #region luu thong tin gia va cach tinh
                pairColValTgd.Add(new object[,] { { _fcName.FC_THUA_GIADAT_DRAFT.GetIndex(_fcName.FC_THUA_GIADAT_DRAFT.DON_GIA), dongiaMoiTinh } });
                pairColValTgd.Add(new object[,] { { _fcName.FC_THUA_GIADAT_DRAFT.GetIndex(_fcName.FC_THUA_GIADAT_DRAFT.GIA_DAT), giaMoiTinh } });
                pairColValTgd.Add(new object[,] { { _fcName.FC_THUA_GIADAT_DRAFT.GetIndex(_fcName.FC_THUA_GIADAT_DRAFT.CACH_TINH), strCachtinh } });
                sdeTblTgdEditor.CacheData(o, rowTgdNnHandleUpdate, pairColValTgd, EnumTypeOfEdit.UPDATE);
                rowTgdNnHandleUpdate++;
                pairColValTgd.Clear();
                #endregion

                #region ---log
                if (_caller != null)
                {
                    evt.Reset();
                    evt.IdThuaTinhGia = o;// new object[,] { { o, "tui", "soto", "sothua" } };
                    evt.mathua = mathuaNew;
                    _caller.onCalculating(evt);
                    evt.Reset();
                    if (thuaCount < len)
                    {
                        if (thuaCount % 10 == 0)
                        {
                            evt.Log = string.Format("\n---Đã tính cho {0} thửa----", thuaCount);
                        }
                        thuaCount++;
                    }
                    else if (thuaCount == len)
                    {
                        evt.Log = string.Format("\n---Đã tính cho {0} thửa---", thuaCount);
                    }
                    _caller.onCalculating(evt);
                }
                #endregion
            }

            #endregion

            #region luu thong tin vao bang gia dat
            if (!sdeTblTgdEditor.IsEditing())
            {
                sdeTblTgdEditor.StartEditing(esriMultiuserEditSessionMode.esriMESMVersioned);
                sdeTblTgdEditor.StartEditOperation();
            }
            //else
            //{
            //    //try
            //    //{
            //    //    sdeTblTgdEditor.SaveEdit();
            //    //    sdeTblTgdEditor.StopEditOperation();
            //    //    sdeTblTgdEditor.StopEditing(true);
            //    //}
            //    //catch
            //    //{
            //    //    sdeTblTgdEditor.StopEditOperation();
            //    //    sdeTblTgdEditor.StopEditing(false);
            //    //}
            //    //sdeTblTgdEditor.StartEditing(esriMultiuserEditSessionMode.esriMESMVersioned);
            //    //sdeTblTgdEditor.StartEditOperation();
            //}

            #region ----log
            if (_caller != null)
            {
                evt.Log = string.Format("\n----||| Đang lưu bảng {0} |||---- ", tgdDraft);

                _caller.onCalculating(evt);
            }
            #endregion
            try
            {
                sdeTblTgdEditor.SaveEdit();
                sdeTblTgdEditor.StopEditOperation();
                sdeTblTgdEditor.StopEditing(true);
            }
            catch (Exception ex)
            {
                sdeTblTgdEditor.StopEditOperation();
                sdeTblTgdEditor.StopEditing(false);
            }

            #region ----log
            if (_caller != null)
            {
                evt.Log = string.Format("\n----||| Đã lưu bảng {0} |||---- ", tgdDraft);
                _caller.onCalculating(evt);
            }
            #endregion

            #endregion

            #region loc gia dat

            ThreadStart filterThread =()=>fil(newId);
            Thread t = new Thread(filterThread);
            t.Start();
            //while (!t.IsAlive) ;
            //Thread.Sleep(1);
            //t.Abort();
            t.Join();

            #endregion
            #endregion
        }
Пример #45
0
 IFeatureClass IDataManager.TnOpenFeatureClassFromSDE(IWorkspaceEdit workspace, string featureClass)
 {
     IFeatureWorkspace fwsp = (IFeatureWorkspace)workspace;
        return fwsp.OpenFeatureClass(featureClass);
 }
Пример #46
0
        public void CalcGiaHemPhu(List<object> newId)
        {
            #region khoi tao cac bien
            SdeConnection conn = new SdeConnection();
            ISdeConnectionInfo sdeConn = conn as ISdeConnectionInfo;
            _wspEdit = (IWorkspaceEdit)sdeConn.Workspace;
            _mwspEdit = (IMultiuserWorkspaceEdit)sdeConn.Workspace;
            IFeatureWorkspace fw = (IFeatureWorkspace)sdeConn.Workspace;
            copyTool = new DataManager(sdeConn.Workspace, sdeConn.Environment);
            this._fcName = new TnFeatureClassName(sdeConn.Workspace);
            this._tblName = new TnTableName(sdeConn.Workspace);
            string gdHemPhu = string.Format("{0}_{1}", DataNameTemplate.Gia_Hem_Phu, this._currentConfig.NamApDung);
            string gdHemChinh = string.Format("{0}_{1}", DataNameTemplate.Gia_Hem, this._currentConfig.NamApDung);

            _fcName.FC_GIA_DAT_HEM_PHU.NAME = gdHemPhu;
            _fcName.FC_GIA_DAT_HEM_PHU.InitIndex();
            _fcName.FC_GIA_DAT_HEM.NAME = gdHemChinh;
            _fcName.FC_GIA_DAT_HEM.InitIndex();

            IFeatureClass gdhPhuFeatureClass = null;
            ITable tblgdHemPhu = null;
            try
            {
                gdhPhuFeatureClass = fw.OpenFeatureClass(gdHemPhu);
                tblgdHemPhu = (ITable)gdhPhuFeatureClass;
            }
            catch
            {
                MessageBox.Show("Không tìm thấy bảng " + gdHemPhu);
                return;
            }

            IFeatureClass gdhChinhFeatureClass;
            ITable tblHesoVitri;
            ITable tblTenDuong;
            ITable tblHemChinh;

            #endregion

            #region dinh nghia cac bien

            try
            {
                tblTenDuong = fw.OpenTable(DataNameTemplate.Ten_Duong);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Không tìm thấy bảng " + DataNameTemplate.Ten_Duong);
                return;
            }

            try
            {
                gdhChinhFeatureClass = fw.OpenFeatureClass(gdHemChinh);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Không tìm thấy bảng " + gdHemChinh);
                return;
            }
            try
            {
                tblHemChinh = fw.OpenTable(DataNameTemplate.Hem);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Không tìm thấy bảng " + DataNameTemplate.Hem);
                return;
            }

            ISDETableEditor sdeTblGdhEditor = new SDETable(tblgdHemPhu, sdeConn.Workspace);
            IQueryFilter qrf = new QueryFilterClass();
            #endregion

            #region vong lap tung id

            #region khoi dau
            int rowGdhHandleUpdate = 0;
            string cachtinh = "";
            string cachtinhdongia = "";
            bool result = false;
            List<object[,]> pairColValTgd = new List<object[,]>();
            CalculationEventArg evt = new CalculationEventArg();
            if (_caller != null)
            {
                evt.Reset();
                evt.Log = "\n\nBắt đầu tính giá cho các hẻm vừa xác định vị trí";
                _caller.onCalculating(evt);
            }
            int len = newId.Count;
            int thuaCount = 1;
            //MessageBox.Show(len.ToString());
            #endregion

            foreach (object o in newId)
            {
                if (!((int)o > 0))
                {
                    //MessageBox.Show("line 737 CalcLandprice: không thể tính cho hẻm có id=" + o);
                    continue;
                }
                #region lay thong tin hem gia dat
                IRow gdhRowNew = null;
                try
                {
                    gdhRowNew = tblgdHemPhu.GetRow((int)o);
                }
                catch (Exception ex) { }
                if (gdhRowNew == null)
                {
                    continue;
                }

                string maHemChinhNew = gdhRowNew.get_Value(gdhRowNew.Fields.FindField(_fcName.FC_GIA_DAT_HEM_PHU.MA_HEM_CHINH)).ToString();
                int hesovitriNew;
                result = int.TryParse(gdhRowNew.get_Value(gdhRowNew.Fields.FindField(_fcName.FC_GIA_DAT_HEM_PHU.HE_SO)).ToString(), out hesovitriNew);

                object khoagia = gdhRowNew.get_Value(gdhRowNew.Fields.FindField(_fcName.FC_GIA_DAT_HEM_PHU.LOCKED));
                object mahem = gdhRowNew.get_Value(gdhRowNew.Fields.FindField(_fcName.FC_GIA_DAT_HEM_PHU.MA_HEM));
                int dorongHem = 0;
                object tenHem = "";
                //MessageBox.Show("line 237 CalcLandprice, maduong=" + maduongNew);
                if (khoagia != null)
                {
                    if (khoagia.ToString() != "0" && khoagia.ToString() != "")
                    {
                        //MessageBox.Show(khoagia.ToString());
                        //evt.Reset();
                        //evt.IdThuaKhoaGia = o;
                        //evt.mathua = mahem;
                        //_caller.onCalculating(evt);
                        continue;
                    }
                }
                #endregion

                #region lay gia dat hem chinh
                qrf.WhereClause = string.Format("{0}='{1}'", _fcName.FC_GIA_DAT_HEM.MA_HEM, maHemChinhNew);
                IFeatureCursor gdHemChinhCur = null;
                gdHemChinhCur = gdhChinhFeatureClass.Search(qrf, false);
                IFeature gdHemChinhRow = null;
                double giaHemChinh = 0;
                object maduong = 0;
                try
                {
                    if ((gdHemChinhRow = gdHemChinhCur.NextFeature()) != null)
                    {
                        result = double.TryParse(gdHemChinhRow.get_Value(_fcName.FC_GIA_DAT_HEM.GetIndex(_fcName.FC_GIA_DAT_HEM.GIA_DAT)).ToString(), out giaHemChinh);
                        if (!result)
                        {
                            giaHemChinh = 0;
                        }
                        maduong=gdHemChinhRow.get_Value(_fcName.FC_GIA_DAT_HEM.GetIndex(_fcName.FC_GIA_DAT_HEM.MA_DUONG));
                        //MessageBox.Show("line 1259 CalcLandprice, giahemchinh=" + giaHemChinh.ToString());
                    }
                }
                catch (COMException comExc) { }
                finally { Marshal.ReleaseComObject(gdHemChinhCur); }
                #endregion
                if (mahem != null)
                {
                    #region lay thong tin hem
                    if (mahem.ToString() != "0" && mahem.ToString() != "")
                    {
                        qrf.WhereClause = string.Format("{0}='{1}'", _fcName.FC_HEM.MA_HEM, mahem);
                        ICursor hemFcur = tblHemChinh.Search(qrf, false);
                        IRow hemRow = null;
                        try
                        {
                            if ((hemRow = hemFcur.NextRow()) != null)
                            {
                                object dorong = hemRow.get_Value(hemRow.Fields.FindField(_fcName.FC_HEM.DO_RONG));
                                result = int.TryParse(dorong.ToString(), out dorongHem);
                                if (!result)
                                {
                                    dorongHem = 0;
                                }
                                tenHem = hemRow.get_Value(hemRow.Fields.FindField(_fcName.FC_HEM.TEN_HEM));
                            }
                        }
                        catch (Exception ex) { }
                        finally { Marshal.ReleaseComObject(hemFcur); }
                    }
                    #endregion
                }
                #region lay ten duong
                qrf.WhereClause = string.Format("{0}='{1}'", _tblName.TEN_DUONG.MA_DUONG, maduong);
                ICursor tenDuongCur = null;
                tenDuongCur = tblTenDuong.Search(qrf, false);
                IRow tenDuongRow = null;
                object tenduong = "";
                object batdau = "";
                object ketthuc = "";
                try
                {
                    if ((tenDuongRow = tenDuongCur.NextRow()) != null)
                    {
                        tenduong = tenDuongRow.get_Value(_tblName.TEN_DUONG.GetIndex(_tblName.TEN_DUONG.TEN_DUONG));
                        batdau = tenDuongRow.get_Value(_tblName.TEN_DUONG.GetIndex(_tblName.TEN_DUONG.BAT_DAU));
                        ketthuc = tenDuongRow.get_Value(_tblName.TEN_DUONG.GetIndex(_tblName.TEN_DUONG.KET_THUC));
                    }
                }
                catch (COMException comExc) { giaHemChinh = 0; }
                finally { Marshal.ReleaseComObject(tenDuongCur); }
                #endregion

                object giaMoiTinh = 0;
                double hesorong = 1;
                double hesosau = 1;

                #region chon chieu rong
                if (dorongHem < 3.5)
                {
                    hesorong = _currentConfig.PHemChinhRongDuoi3_5m;
                }
                else if (dorongHem < 6)
                {
                    hesorong = _currentConfig.PHemChinhRongTren3_5m;
                }
                else
                {
                    hesorong = _currentConfig.PHemChinhRongTren6m;
                }
                #endregion

                #region chon chieu sau
                if (hesovitriNew == 1) //chieu sau <100m
                {
                    hesosau = _currentConfig.PHemSauDuoi100m;
                }
                else if (hesovitriNew == 2)
                {
                    hesosau = _currentConfig.PHemSauDuoi200m;
                }
                else
                {
                    hesosau = _currentConfig.PHemSauTren200m;
                }
                #endregion

                giaMoiTinh = giaHemChinh * hesorong * hesosau;
                //MessageBox.Show("line 868 CalcLandprice giamoitinh=" + giaMoiTinh);
                pairColValTgd.Add(new object[,] { { _fcName.FC_GIA_DAT_HEM_PHU.GetIndex(_fcName.FC_GIA_DAT_HEM_PHU.GIA_DAT), giaMoiTinh } });
                sdeTblGdhEditor.CacheData(o, 0, pairColValTgd, EnumTypeOfEdit.UPDATE);
                pairColValTgd.Clear();
            }

            #endregion

            #region luu thong tin vao bang gia dat
            if (!sdeTblGdhEditor.IsEditing())
            {

                sdeTblGdhEditor.StartEditing(true);
                sdeTblGdhEditor.StartEditOperation();
            }
            else
            {
                try
                {
                    sdeTblGdhEditor.SaveEdit();
                    sdeTblGdhEditor.StopEditOperation();
                    sdeTblGdhEditor.StopEditing(true);
                }
                catch
                {
                    sdeTblGdhEditor.StopEditOperation();
                    sdeTblGdhEditor.StopEditing(false);
                }
                sdeTblGdhEditor.StartEditing(esriMultiuserEditSessionMode.esriMESMVersioned);
                sdeTblGdhEditor.StartEditOperation();
            }

            #region ----log
            if (_caller != null)
            {
                evt.Log = string.Format("\n----||| Đang lưu vị trí các thửa vào bảng {0} |||---- ", gdHemPhu);
                _caller.onCalculating(evt);
            }
            #endregion
            try
            {
                sdeTblGdhEditor.SaveEdit();
                sdeTblGdhEditor.StopEditOperation();
                sdeTblGdhEditor.StopEditing(true);
            }
            catch (Exception ex)
            {
                MessageBox.Show("line 1405 CalcGiaHemChinh ex=" + ex.ToString());
                sdeTblGdhEditor.StopEditOperation();
                sdeTblGdhEditor.StopEditing(false);
            }

            #region ----log
            if (_caller != null)
            {
                evt.Log = string.Format("\n----||| Đã lưu vị trí các thửa vào bảng {0} |||---- ", gdHemPhu);
                _caller.onCalculating(evt);
            }
            #endregion

            #endregion
        }
        private static void setFeatureSpatialReference(IFeatureLayer ifl_active, IName name, out IFeatureWorkspace workspace, out IWorkspaceEdit iwe, out IFields flds)
        {
            IGeoDataset igd_dest = (IGeoDataset)ifl_active.FeatureClass;
            // Open the workspace through the name object.
            workspace = (IFeatureWorkspace)name.Open();
            iwe = (IWorkspaceEdit)workspace;

            ESRI.ArcGIS.Geodatabase.IObjectClassDescription objectClassDescription = new ESRI.ArcGIS.Geodatabase.FeatureClassDescriptionClass();
            flds = objectClassDescription.RequiredFields;
            IFieldEdit fld_Edit = (IFieldEdit)flds.get_Field(flds.FindField("Shape"));

            IGeometryDefEdit pGeoDef = (IGeometryDefEdit)fld_Edit.GeometryDef;
            pGeoDef.SpatialReference_2 = igd_dest.SpatialReference;
        }