Beispiel #1
0
        private void btn_Save_Click(object sender, EventArgs e)
        {
            Recordset objRt = null;

            try
            {
                btn_Draw.Enabled = true;
                objRt            = (m_Application.Workspace.Datasources["Resource"].Datasets["ArtCraftTable"] as DatasetVector).GetRecordset(false, CursorType.Dynamic);
                switch (m_Type)
                {
                case WorkflowEditType.New:
                    Dictionary <string, object> dic = new Dictionary <string, object>();
                    dic.Add("CraftName", txt_Name.Text.Trim());
                    dic.Add("Note", rtb_Description.Text.Equals(m_Tip) ? "" : rtb_Description.Text);
                    dic.Add("CraftID", (objRt.RecordCount + 1).ToString());
                    dic.Add("PlaySpeed", txt_PlaySpeed.Text);
                    dic.Add("Symbol", btn_SelectColor.Text + ',' + btn_SelectColor.Tag);
                    objRt.AddNew(null, dic);
                    objRt.Update();
                    break;

                case WorkflowEditType.Edit:
                    objRt.Edit();
                    objRt.SetFieldValue("CraftName", txt_Name.Text.Trim());
                    objRt.SetFieldValue("Note", rtb_Description.Text.Equals(m_Tip) ? "" : rtb_Description.Text);
                    objRt.SetFieldValue("CraftID", objRt.RecordCount + 1);
                    objRt.SetFieldValue("PlaySpeed", txt_PlaySpeed.Text);
                    objRt.SetFieldValue("Symbol", btn_SelectColor.Text + ',' + btn_SelectColor.Tag);
                    objRt.Update();
                    break;
                }

                Layer3DDataset layer = m_SceneControl.Scene.Layers[txt_Name.Text + "@SpaceData"] as Layer3DDataset;
                for (int i = 0; i < (layer.Theme as Theme3DUnique).Count; i++)
                {
                    Theme3DUniqueItem item = (layer.Theme as Theme3DUnique)[i];
                    item.IsVisible = false;
                }
                m_Application.MessageBox.Show("保存成功!");
            }
            catch (Exception ex)
            {
                Log.OutputBox(ex);
            }
            finally
            {
                if (objRt != null)
                {
                    objRt.Close();
                    objRt.Dispose();
                }
            }
        }
Beispiel #2
0
        private void btn_Commit_Click(object sender, EventArgs e)
        {
            Recordset objRt = null;

            try
            {
                if (chkTheme.SelectedItem == null)
                {
                    m_Application.MessageBox.Show(Message);
                    return;
                }
                Layer3DDataset layer3DDataset = (chkTheme.SelectedItem as Label).Tag as Layer3DDataset;
                objRt = (layer3DDataset.Dataset as DatasetVector).GetRecordset(false, CursorType.Dynamic);
                foreach (DataGridViewRow row in dg_Data.Rows)
                {
                    int id = Convert.ToInt32(row.HeaderCell.Value);
                    if (objRt.SeekID(id) && objRt.Edit())
                    {
                        foreach (DataGridViewColumn column in dg_Data.Columns)
                        {
                            switch (objRt.GetFieldInfos()[column.Name].Type)
                            {
                            case FieldType.WText:
                                objRt.SetFieldValue(column.Name, Convert.ToString(row.Cells[column.Name].Value));
                                break;

                            case FieldType.Double:
                                objRt.SetFieldValue(column.Name, Convert.ToDouble(row.Cells[column.Name].Value));
                                break;

                            case FieldType.Int32:
                                objRt.SetFieldValue(column.Name, Convert.ToInt32(row.Cells[column.Name].Value));
                                break;
                            }
                        }
                        objRt.Update();
                    }
                }
                m_SceneControl.Refresh();
            }
            catch (Exception ex)
            {
                Log.OutputBox(ex);
            }
            finally
            {
                if (objRt != null)
                {
                    objRt.Close();
                    objRt.Dispose();
                }
            }
        }
Beispiel #3
0
        private void btnGetCamera_Click(object sender, EventArgs e)
        {
            Recordset objRt = null;

            try
            {
                if (dg_Data.SelectedRows.Count == 0)
                {
                    m_Application.MessageBox.Show("未选中数据!");
                    return;
                }
                DataGridViewRow  row  = dg_Data.SelectedRows[0];
                ResourceTypeData data = cmbDeviceType.SelectedItem as ResourceTypeData;
                objRt = (m_Application.Workspace.Datasources["Resource"].Datasets[data.DatasetName] as DatasetVector).GetRecordset(false, CursorType.Dynamic);
                if (objRt.SeekID(Convert.ToInt32(row.Tag)) && objRt.Edit())
                {
                    objRt.SetFieldValue("Longitude", m_SceneControl.Scene.Camera.Longitude);
                    objRt.SetFieldValue("Latitude", m_SceneControl.Scene.Camera.Latitude);
                    objRt.SetFieldValue("Altitude", m_SceneControl.Scene.Camera.Altitude);
                    objRt.SetFieldValue("Heading", m_SceneControl.Scene.Camera.Heading);
                    objRt.SetFieldValue("Tilt", m_SceneControl.Scene.Camera.Tilt);

                    if (objRt.Update())
                    {
                        m_Application.MessageBox.Show("视角保存成功!");
                    }
                    else
                    {
                        m_Application.MessageBox.Show("视角保存失败!");
                    }
                }
            }
            catch (Exception ex)
            {
                Log.OutputBox(ex);
            }
            finally
            {
                if (objRt != null)
                {
                    objRt.Close();
                    objRt.Dispose();
                }
            }
        }
Beispiel #4
0
        //更新数据集内容
        private void UpdateLocationData(DatasetVector dtVector)
        {
            if (dtVector == null)
            {
                return;
            }
            try {
                Recordset recdst = dtVector.GetRecordset(true, CursorType.Dynamic);
                if (recdst != null)
                {
                    recdst.Batch.Begin();
                    //获取设备编码
                    string  strTableName = "T_BUSI_DEVICE";
                    string  strSQL       = string.Format("select device_bm,device_carrier_lx from {0}  where substr(device_user_bm,0,2)='32'", strTableName);
                    DataSet dtSet        = DbHelperOra.Query(DbHelperOra.connectionString_172, strSQL);
                    if (dtSet != null && dtSet.Tables.Count > 0)
                    {
                        DataTable dtTable = dtSet.Tables[0];
                        foreach (DataRow dr in dtTable.Rows)
                        {
                            string strBM   = string.Format("{0}", dr[0]);
                            string strZTLX = string.Format("{0}", dr[1]);
                            //获取坐标点
                            GeoPoint geoPt = GetGeoPoint();
                            //

                            if (geoPt != null)
                            {
                                if (recdst.AddNew(geoPt))
                                {
                                    recdst.SetFieldValue("device_bm", strBM);
                                    recdst.SetFieldValue("device_ztlx", strZTLX);
                                }
                            }
                        }
                    }
                    recdst.Batch.Update();
                }
            }
            catch { }
        }
Beispiel #5
0
        private DatasetVector DatasetConvertRegionToLine(DatasetVector dtVector2)
        {
            DatasetVector dtVector = null;

            if (dtVector2 != null)
            {
                DatasetVectorInfo dvi = new DatasetVectorInfo();
                dvi.Name = m_selLayer.Dataset.Datasource.Datasets.GetAvailableDatasetName("C_geoLine");
                dvi.Type = DatasetType.Line;

                //DatasetVector
                dtVector = m_selLayer.Dataset.Datasource.Datasets.Create(dvi);
                foreach (FieldInfo fi in dtVector2.FieldInfos)
                {
                    if (dtVector.FieldInfos.IndexOf(fi.Name) < 0 && !fi.IsSystemField)
                    {
                        dtVector.FieldInfos.Add(fi.Clone());
                    }
                }

                Recordset recdst = dtVector.GetRecordset(true, CursorType.Dynamic);

                recdst.Batch.Begin();
                try
                {
                    Recordset recdst2 = dtVector2.GetRecordset(false, CursorType.Static);
                    while (!recdst2.IsEOF)
                    {
                        GeoRegion geoR = recdst2.GetGeometry() as GeoRegion;

                        if (geoR != null)
                        {
                            GeoLine geoLine = geoR.ConvertToLine();
                            recdst.AddNew(geoLine);
                            foreach (FieldInfo fi in dtVector2.FieldInfos)
                            {
                                if (dtVector.FieldInfos.IndexOf(fi.Name) > -1 && !fi.IsSystemField)
                                {
                                    recdst.SetFieldValue(fi.Name, recdst2.GetFieldValue(fi.Name));
                                }
                            }
                            geoR.Dispose();
                        }
                        recdst2.MoveNext();
                    }
                    recdst2.Dispose();
                }
                catch { }
                recdst.Batch.Update();
                recdst.Dispose();
            }
            return(dtVector);
        }
Beispiel #6
0
        public void AddModel_Click(Point3D Point3D, int ModelIndex, string strID, string strNOID)
        {
            AddPointToDatasets(Point3D, ModelIndex, strID, strNOID);

            Datasource    datasource   = m_workspace.Datasources[0];
            DatasetVector pointDataset = datasource.Datasets["Point3D"] as DatasetVector;
            Recordset     recordset    = pointDataset.GetRecordset(false, CursorType.Dynamic);

            GeoPoint3D geopoint3D = new GeoPoint3D(Point3D);
            GeoStyle3D geoStyle   = new GeoStyle3D();

            geoStyle.MarkerSymbolID    = UserHelper.Marker3DSymbolID[ModelIndex];
            geoStyle.IsMarkerSizeFixed = false;
            geoStyle.MarkerSize        = 1;
            geoStyle.Marker3DScaleX    = 0.03;
            geoStyle.Marker3DScaleY    = 0.03;
            geoStyle.Marker3DScaleZ    = 0.08;
            geoStyle.IsMarker3D        = true;
            geoStyle.AltitudeMode      = AltitudeMode.RelativeToGround;
            geopoint3D.Style3D         = geoStyle;

            recordset.MoveLast();
            recordset.AddNew(geopoint3D);
            recordset.SetFieldValue(m_filedName, strID);
            recordset.Update();
            recordset.Dispose();

            m_layer3DPoint.IsSelectable = false;
            m_layer3DPoint.UpdateData();
            m_SceneControl.Scene.Refresh();

            //AddKmlLayer();

            //GeoPlacemark geoPlacemark = new GeoPlacemark();
            //m_geoModel = new GeoModel();
            //m_geoModel.FromFile(UserHelper.sModelName[ModelIndex]);
            ////人物模型朝向前进方向,如果原始方向一致则不需要旋转。
            //m_geoModel.Style3D = m_style3D;
            //m_geoModel.RotationZ = 180;
            //m_geoModel.ScaleX = 0.3;
            //m_geoModel.ScaleY = 0.3;
            //m_geoModel.ScaleZ = 0.3;
            //m_geoModel.Position = new Point3D(Point3D.X, Point3D.Y, Point3D.Z);
            //geoPlacemark.Geometry = m_geoModel;
            //Feature3Ds feture3Ds = m_LayerKML.Features;
            //Feature3D feature = new Feature3D();
            //feature.Geometry = geoPlacemark;
            //feature.Description = strID;
            //feature.Name = feature.Description;
            //feture3Ds.Add(feature);
            //feture3Ds.ToKMLFile(m_LayerKML.DataName);
            //m_LayerKML.UpdateData();
        }
Beispiel #7
0
        private void AddPointToDatasets(Point3D Point3D, int ModelIndex, string strID, string strNOID)
        {
            CreateDatasets();
            try
            {
                Datasource    datasource   = m_workspace.Datasources[0];
                DatasetVector pointDataset = datasource.Datasets[UserHelper.sDeviceName[ModelIndex]] as DatasetVector;

                if (pointDataset != null)
                {
                    GeoPoint  geoPoint  = new GeoPoint(Point3D.X, Point3D.Y);
                    Recordset recordset = pointDataset.GetRecordset(false, CursorType.Dynamic);
                    recordset.MoveLast();
                    recordset.AddNew(geoPoint);
                    recordset.SetFieldValue(m_filedName, strID);
                    recordset.Update();
                    recordset.Close();
                    recordset.Dispose();
                }

                m_MapControl.Map.Refresh();

                DatasetVector textDataset = datasource.Datasets[UserHelper.sTextName] as DatasetVector;
                if (textDataset != null)
                {
                    Recordset textRecordset = textDataset.GetRecordset(false, CursorType.Dynamic);

                    TextPart part = new TextPart();
                    part.Text = strNOID;
                    Point2D point2D = new Point2D(Point3D.X, Point3D.Y);
                    part.AnchorPoint = point2D;
                    GeoText geoText = new GeoText(part);
                    geoText.TextStyle.ForeColor  = Color.Green;
                    geoText.TextStyle.FontHeight = 8;

                    textRecordset.MoveLast();
                    textRecordset.AddNew(geoText);
                    textRecordset.Update();
                    textRecordset.Close();
                    textRecordset.Dispose();
                }

                m_MapControl.Map.Refresh();
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }
        }
Beispiel #8
0
 private void button1_Click(object sender, EventArgs e)
 {
     try
     {
         if (recordset.SetFieldValue("界址点号", textBox1.Text.ToString()))
         {
             MessageBox.Show("修改成功");
         }
         recordset.Update();
         this.Hide();
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.ToString());
     }
 }
Beispiel #9
0
 private void button1_Click(object sender, EventArgs e)
 {
     try
     {
         if (zdh.Text.Length != 0)
         {
             object value = getvalue(recordset.GetFieldInfos()[label_zdh.Text.Remove(label_zdh.Text.Length - 1)].Type, zdh.Text);
             recordset.SetFieldValue(label_zdh.Text.Remove(label_zdh.Text.Length - 1), value);
         }
         if (tdlylb.Text.Length != 0)
         {
             object value = getvalue(recordset.GetFieldInfos()[label_tdlylb.Text.Remove(label_tdlylb.Text.Length - 1)].Type, tdlylb.Text);
             recordset.SetFieldValue(label_tdlylb.Text.Remove(label_tdlylb.Text.Length - 1), value);
         }
         if (qlr.Text.Length != 0)
         {
             object value = getvalue(recordset.GetFieldInfos()[label_qlr.Text.Remove(label_qlr.Text.Length - 1)].Type, qlr.Text);
             recordset.SetFieldValue(label_qlr.Text.Remove(label_qlr.Text.Length - 1), value);
         }
         if (xzqh.Text.Length != 0)
         {
             object value = getvalue(recordset.GetFieldInfos()[label_qh.Text.Remove(label_qh.Text.Length - 1)].Type, xzqh.Text);
             recordset.SetFieldValue(label_qh.Text.Remove(label_qh.Text.Length - 1), value);
         }
         if (frdb.Text.Length != 0)
         {
             object value = getvalue(recordset.GetFieldInfos()[label_frdb.Text.Remove(label_frdb.Text.Length - 1)].Type, frdb.Text);
             recordset.SetFieldValue(label_frdb.Text.Remove(label_frdb.Text.Length - 1), value);
         }
         if (sfz1.Text.Length != 0)
         {
             object value = getvalue(recordset.GetFieldInfos()[label_sfz.Text.Remove(label_sfz.Text.Length - 1)].Type, sfz1.Text);
             recordset.SetFieldValue(label_sfz.Text.Remove(label_sfz.Text.Length - 1), value);
         }
         if (tel1.Text.Length != 0)
         {
             object value = getvalue(recordset.GetFieldInfos()[lable_tel.Text.Remove(lable_tel.Text.Length - 1)].Type, tel1.Text);
             recordset.SetFieldValue(lable_tel.Text.Remove(lable_tel.Text.Length - 1), value);
         }
         MessageBox.Show("修改成功");
         recordset.Update();
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.ToString());
     }
 }
        private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                Recordset rec      = mDataVec.GetRecordset(false, CursorType.Dynamic);
                int       Rowindex = e.RowIndex;                                         //获取修改记录的行索引
                int       Colindex = e.ColumnIndex;                                      //获取修改记录的列索引

                rec.MoveTo(Rowindex);                                                    //记录集移到当前索引
                object changevalue = dataGridView1.Rows[Rowindex].Cells[Colindex].Value; //获取修改之后的cell值
                if (!rec.Dataset.FieldInfos[Colindex].IsSystemField)
                {
                    rec.Edit();//编辑记录集中该行记录
                    rec.SetFieldValue(Colindex, changevalue);
                    rec.Update();
                }
            }
            catch (Exception)
            {
                throw;
            }
        }
Beispiel #11
0
        //规范化数据-BUSINESS_ID
        private void FormatData()
        {
            DatasetVector dtVector = GetSCZT();

            if (dtVector != null)
            {
                string    strBS_ID  = m_strBusiness_id;
                string    strFilter = string.Format(" length({0})=5", strBS_ID);
                Recordset recdst    = dtVector.Query(strFilter, CursorType.Dynamic);
                if (recdst.RecordCount > 0)
                {
                    int iDex = recdst.GetFieldInfos().IndexOf(strBS_ID);
                    recdst.Batch.Begin();
                    while (!recdst.IsEOF)
                    {
                        string strValue = string.Format("0{0}", recdst.GetString(iDex));
                        recdst.SetFieldValue(iDex, strValue);
                        recdst.MoveNext();
                    }
                    recdst.Batch.Update();
                    MessageBox.Show("规范数据完毕");
                }
            }
        }
Beispiel #12
0
        private void btnSetCamera_Click(object sender, EventArgs e)
        {
            Recordset objRt = null;

            try
            {
                if (lst_Items.SelectedItem == null)
                {
                    m_Application.MessageBox.Show("请选择分段数据!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }
                int id = Convert.ToInt32((lst_Items.SelectedItem as Label).Tag);
                objRt = (m_Application.Workspace.Datasources["SpaceData"].Datasets[txt_Name.Text.Trim()] as DatasetVector).GetRecordset(false, CursorType.Dynamic);
                objRt.MoveTo(id);
                objRt.Edit();
                objRt.SetFieldValue("Longitude", m_SceneControl.Scene.Camera.Longitude.ToString());
                objRt.SetFieldValue("Latitude", m_SceneControl.Scene.Camera.Latitude.ToString());
                objRt.SetFieldValue("Altitude", m_SceneControl.Scene.Camera.Altitude.ToString());
                objRt.SetFieldValue("Tilt", m_SceneControl.Scene.Camera.Tilt.ToString());
                objRt.SetFieldValue("Heading", m_SceneControl.Scene.Camera.Heading.ToString());
                objRt.SetFieldValue("Time", txt_PlaySpeed.Text);
                objRt.Update();

                (m_lstItems[lst_Items.SelectedIndex] as Label).Text = (lst_Items.SelectedItem as Label).Text.Split('(')[0];

                lst_Items.DataSource    = null;
                lst_Items.DataSource    = m_lstItems;
                lst_Items.DisplayMember = "Text";
            }
            catch (Exception ex)
            {
                Log.OutputBox(ex);
            }
            finally
            {
                if (objRt != null)
                {
                    objRt.Close();
                    objRt.Dispose();
                }
            }
        }
Beispiel #13
0
        private void insertData()
        {
            #region 属性记录补登
            //文件上传成功后,文件表插入成功后,更新属性表记录
            //获得用于操作的两个数据集
            DatasetVector gkfqdDatasetVector = (DatasetVector)gk01dDatasource.Datasets["BG" + gkfqd.Common.DbUse.GetTownCode(textBox4.Text)];
            DatasetVector tempDatasetVector  = (DatasetVector)gk01dDatasource.Datasets["temp_gkfqd"];

            string strSmid = gk01dDataGridViewRow.Cells["SMID"].Value.ToString();//获取smid值
            // 构造一个查询参数对象,查询选中的记录
            QueryParameter para = new QueryParameter();
            para.AttributeFilter = "SMID = " + strSmid;
            para.CursorType      = CursorType.Dynamic;

            Recordset tempRecordset  = tempDatasetVector.Query(para);
            Recordset gkfqdRecordset = gkfqdDatasetVector.GetRecordset(false, CursorType.Dynamic);
            //判断添加地块在目标图层是否存在 标记
            Boolean flag = false;

            //临时图层到正式图层用smid
            string getSmid = "";
            if (gkfqdRecordset == null)
            {
                flag = false;
            }
            else if (gkfqdRecordset.RecordCount > 0)
            {
                for (int i = 0; i <= gkfqdRecordset.RecordCount; i++)
                {
                    gkfqdRecordset.MoveTo(i);
                    if (gkfqdRecordset.GetGeometry().Bounds.Equals(tempRecordset.GetGeometry().Bounds))
                    {
                        flag = true;
                        break;
                    }
                }
            }
            if (!flag)
            {
                //非面数据不能导入
                if (tempRecordset.GetGeometry().GetType().Name.ToString() != "GeoRegion")
                {
                    MessageBox.Show("导入图斑不是面数据,不能导入,请重新选择!");
                    return;
                }
                //------以下为属性字段添加
                //项目所在县
                if (textBox4.Text == "")
                {
                    MessageBox.Show("请输入项目所在县!");
                    return;
                }

                //项目名称
                if (textBox2.Text == "")
                {
                    MessageBox.Show("请输入项目名称!");
                    return;
                }
                //备注
                if (textBox1.Text == "")
                {
                    MessageBox.Show("请输入备注!");
                    return;
                }
                //地块编号
                if (textBox3.Text == "")
                {
                    MessageBox.Show("请输入地块编号!");
                    return;
                }

                if (button1.Text != "更新")
                {
                    //查询重复项目名称
                    sqlQuery.Clear();
                    sqlQuery.Append(" SELECT DKBH  FROM  " + "BG" + gkfqd.Common.DbUse.GetTownCode(textBox4.Text));
                    sqlQuery.Append(" WHERE DKBH ='" + textBox3.Text + "'");

                    gkfqd.Common.DbUse.GetOleDbconnection().Close();
                    gkfqd.Common.DbUse.GetOleDbconnection().Open();
                    dataSet.Clear();
                    OleDbDataAdapter MyAdapter = new OleDbDataAdapter(sqlQuery.ToString(), gkfqd.Common.DbUse.GetOleDbconnection());
                    MyAdapter.Fill(dataSet);
                    gkfqd.Common.DbUse.GetOleDbconnection().Close();
                    if (dataSet.Tables[0].Rows.Count != 0)
                    {
                        MessageBox.Show("该地块编号已经存在,请重新录入!");
                        return;
                    }
                }
                //临时图层到正式图层赋值
                gkfqdRecordset.AddNew(tempRecordset.GetGeometry());
                //所属复垦项目名称 主键
                gkfqdRecordset.SetFieldValue("FKXMMC", textBox2.Text);
                //地块编号
                gkfqdRecordset.SetFieldValue("DKBH", textBox3.Text);
                //备注
                gkfqdRecordset.SetFieldValue("BZ", textBox1.Text);
                //项目所在县名
                gkfqdRecordset.SetFieldValue("XMSZXM", textBox4.Text);

                gkfqdRecordset.Update();
                //插入记录成功后防止再次点击插入设置按钮不可用
                button1.Enabled = false;
            }
            else
            {
                MessageBox.Show("该图斑已经存在,请确认或重新选择!");
                tempRecordset.Dispose();
                gkfqdRecordset.Dispose();
                return;
            }

            tempRecordset.Dispose();
            gkfqdRecordset.Dispose();
            gk011 frmGk011;
            frmGk011 = (gk011)this.Owner;
            frmGk011.RefreshDataGridView();
            MessageBox.Show("导入成功!");
            #endregion
        }
Beispiel #14
0
        //private void CreatePointDataset(string tableName)
        //{
        //    Workspace workspace = new Workspace();
        //    DatasourceConnectionInfo info = new DatasourceConnectionInfo();
        //    Datasource datasource = GetDbDatasource(workspace, info);
        //    var datasetVector = (DatasetVector)datasource.Datasets[tableName];
        //    if (datasetVector == null)
        //    {
        //        CreateDataset(datasource, DatasetType.Point, tableName);
        //    }
        //    //只取了数据结构,没有取数据
        //    var recordset = datasetVector.GetRecordset(true, SuperMap.Data.CursorType.Dynamic);
        //    recordset.Edit();
        //    recordset.fi
        //}

        private void InsertRecordSetToDb(string shapeFieldName, string tableName)
        {
            Workspace workspace           = new Workspace();
            DatasourceConnectionInfo info = new DatasourceConnectionInfo();
            var filePath = $"{Directory.GetCurrentDirectory()}\\{Guid.NewGuid().ToString()}";
            var files    = new List <string> {
                $"{filePath}.udb", $"{filePath}.udd"
            };

            Datasource datasource = GetDbDatasource(workspace, info);

            if (datasource != null)
            {
                //临时数据源
                DatasourceConnectionInfo tempInfo = new DatasourceConnectionInfo();
                //设置数据源连接的引擎类型
                tempInfo.EngineType = EngineType.UDB;
                tempInfo.Alias      = tableName;

                tempInfo.Server = filePath;
                // 创建/打开数据库数据源
                Datasource tempDatasource = workspace.Datasources.Create(tempInfo);
                Recordset  recordset = null, tempRecordset = null;
                if (tempDatasource != null)
                {
                    ImportResult result = ImportShpToTemp(shapeFieldName, tempDatasource, tableName);
                    if (result.FailedSettings.Length == 0)
                    {
                        Console.WriteLine($"导入{shapeFieldName}成功!");
                        try
                        {
                            for (int index = 0; index < tempDatasource.Datasets.Count; index++)
                            {
                                DatasetVector tempDatasetVector = (DatasetVector)tempDatasource.Datasets[index];
                                tempRecordset = tempDatasetVector.GetRecordset(false, SuperMap.Data.CursorType.Dynamic);
                                //没有数据
                                if (tempRecordset.RecordCount == 0)
                                {
                                    continue;
                                }
                                var tempFieldInfos = tempDatasetVector.FieldInfos;
                                //注意:数据集是手工录入的,不是超图sdk生成的,所以不能删除数据集
                                //如果更新数据集中的记录,则应该操纵记录集(删除、修改、新增)
                                var datasetVector = (DatasetVector)datasource.Datasets[tableName];
                                if (datasetVector == null)
                                {
                                    CreateDataset(datasource, DatasetType.Point, tableName);
                                    //throw new Exception($"不存在数据集名称为{tableName}的数据集!");
                                }
                                //删去之前的所有记录
                                //datasetVector.GetRecordset(false, SuperMap.Data.CursorType.Dynamic).DeleteAll();
                                //只取了数据结构,没有取数据
                                recordset = datasetVector.GetRecordset(true, SuperMap.Data.CursorType.Dynamic);
                                //设置批量提交
                                // 设置批量更新的限度为5000,注意一定要在开始批量更新前设置MaxRecordCount!
                                recordset.Batch.MaxRecordCount = 500;
                                // 开始批量更新,当添加到设置的MaxRecordCount的下一条记录时,将会将MaxRecordCount条记录自动提交到数据库中。
                                recordset.Batch.Begin();

                                tempRecordset.MoveFirst();
                                //遍历临时记录集
                                for (Int32 i = 0; i < tempRecordset.RecordCount; i++)
                                {
                                    //往mysql新增记录
                                    SuperMap.Data.Geometry geoPoint = tempRecordset.GetGeometry();
                                    recordset.AddNew(geoPoint);
                                    //SeekID:在记录中搜索指定 ID 号的记录,并定位该记录为当前记录。
                                    recordset.MoveLast();
                                    foreach (SuperMap.Data.FieldInfo fileInfo in tempFieldInfos)
                                    {
                                        if (!fileInfo.IsSystemField && IsHaveField(datasetVector.FieldInfos, fileInfo.Name))
                                        {
                                            recordset.Edit();
                                            recordset.SetFieldValue(fileInfo.Name, tempRecordset.GetFieldValue(fileInfo.Name));
                                            Object valueID = recordset.GetFieldValue(fileInfo.Name);
                                        }
                                    }

                                    //处理业务数据

                                    tempRecordset.MoveNext();

                                    //recordset.Update();
                                }

                                // 使用批量更新的Update,提交没有自动提交的记录
                                recordset.Batch.Update();
                            }
                        }
                        catch (Exception ex)
                        {
                            throw ex;
                        }
                        finally
                        {
                            //示例程序BatchAdd说明要释放记录集
                            if (recordset != null)
                            {
                                recordset.Dispose();
                            }
                            if (tempRecordset != null)
                            {
                                tempRecordset.Dispose();
                            }
                        }
                    }
                    else
                    {
                        throw new Exception($"导入{shapeFieldName}失败!");
                    }
                }
                else
                {
                    throw new Exception($"创建临时数据源{filePath}失败!");
                }
            }

            // 释放工作空间资源
            info.Dispose();
            workspace.Dispose();


            foreach (var file in files)
            {
                if (File.Exists(file))
                {
                    File.Delete(file);
                }
            }

            MessageBox.Show("成功!");
        }
Beispiel #15
0
        public void run()
        {
            Recordset rc = dv.GetRecordset(false, CursorType.Dynamic);

            Dictionary <int, Feature> feas = rc.GetAllFeatures();

            foreach (KeyValuePair <int, Feature> item in feas)
            {
                GeoModel gm = item.Value.GetGeometry() as GeoModel;
                Console.WriteLine("==" + gm.Position + "==");

                GeoModel model = new GeoModel();
                model.Position = gm.Position;
                foreach (Mesh m in gm.Meshes)
                {
                    if (m.Material.TextureFile.Length > 1)
                    {
                        //Console.WriteLine(m.Material.TextureFile.ToString());
                        Point3Ds p3ds = new Point3Ds();

                        for (int i = 0; i < m.Vertices.Length; i += 3)
                        {
                            bool repition = false;
                            foreach (Point3D p in p3ds)
                            {
                                if (p.X == m.Vertices[i] && p.Y == m.Vertices[i + 1] && p.Z == m.Vertices[i + 2])
                                {
                                    repition = true;
                                }
                            }
                            if (!repition)
                            {
                                p3ds.Add(new Point3D(m.Vertices[i], m.Vertices[i + 1], m.Vertices[i + 2]));
                            }
                        }

                        foreach (Point3D p3d in p3ds)
                        {
                            Console.WriteLine(string.Format(" {0},{1},{2}", p3d.X, p3d.Y, p3d.Z));
                            scene.TrackingLayer.Add(new GeoPoint3D(p3d.X, p3d.Y, p3d.Z), "");
                        }
                        //model.Meshes.Add(MakeMeshPot(p3ds));
                        Mesh mesh = new Mesh(m);
                        mesh.Material.TextureFile = @".\78310a55b319ebc41f7810198326cffc1e171629.png";
                        model.Meshes.Add(mesh);


                        #region 写属性表
                        Dictionary <string, double> fields = new Dictionary <string, double>();
                        fields.Add("FaceMeshCenterX", model.Position.X);
                        fields.Add("FaceMeshCenterY", model.Position.Y);
                        fields.Add("FaceMeshCenterZ", model.Position.Z);
                        fields.Add("FaceMeshLx", p3ds.leftbottom().X);
                        fields.Add("FaceMeshLy", p3ds.leftbottom().Y);
                        fields.Add("FaceMeshLz", p3ds.leftbottom().Z);
                        fields.Add("FaceMeshUx", p3ds.rightup().X);
                        fields.Add("FaceMeshUy", p3ds.rightup().Y);
                        fields.Add("FaceMeshUz", p3ds.rightup().Z);


                        foreach (KeyValuePair <string, double> field in fields)
                        {
                            if (dv.FieldInfos.IndexOf(field.Key) < 0)
                            {
                                FieldInfo fieldInf = new FieldInfo(field.Key, FieldType.Double);
                                dv.FieldInfos.Add(fieldInf);
                            }

                            string fieldName  = field.Key;
                            double fieldValue = field.Value;
                            try
                            {
                                rc.SeekID(item.Value.GetID());
                                rc.Edit();
                                rc.SetFieldValue(fieldName, fieldValue);
                                rc.Update();
                            }
                            catch
                            {
                                Console.WriteLine("error!");
                            }
                            //Console.WriteLine(string.Format("{0},{1},{2}", item.GetID(), fieldName, fieldValue));
                        }
                        #endregion
                    }
                }
                Console.WriteLine("");

                model.ComputeBoundingBox();
                scene.TrackingLayer.Add(model, gm.Position.ToString());
                scene.Refresh();
            }
        }
Beispiel #16
0
        private void insertData()
        {
            #region 属性记录补登

            //----------------拼接行政区图形数据存储表名
            string tableName = gkfqd.Common.DbUse.GetTownCode(textBox35.Text);

            //文件上传成功后,文件表插入成功后,更新属性表记录
            //获得用于操作的两个数据集
            DatasetVector gkfqdDatasetVector = (DatasetVector)gk013Datasource.Datasets[tableName];
            DatasetVector tempDatasetVector  = (DatasetVector)gk013Datasource.Datasets["temp_gkfqd"];

            string strSmid = gk013DataGridViewRow.Cells["SMID"].Value.ToString();//获取smid值
            // 构造一个查询参数对象,查询选中的记录
            QueryParameter para = new QueryParameter();
            para.AttributeFilter = "SMID = " + strSmid;
            para.CursorType      = CursorType.Dynamic;


            Recordset tempRecordset  = tempDatasetVector.Query(para);
            Recordset gkfqdRecordset = gkfqdDatasetVector.GetRecordset(false, CursorType.Dynamic);
            //判断添加地块在目标图层是否存在 标记
            Boolean flag = false;

            //临时图层到正式图层用smid
            string getSmid = "";
            if (gkfqdRecordset == null)
            {
                flag = false;
            }
            else if (gkfqdRecordset.RecordCount > 0)
            {
                for (int i = 0; i <= gkfqdRecordset.RecordCount; i++)
                {
                    gkfqdRecordset.MoveTo(i);
                    if (gkfqdRecordset.GetGeometry().Bounds.Equals(tempRecordset.GetGeometry().Bounds))
                    {
                        flag = true;
                        break;
                    }
                }
            }
            if (!flag)
            {
                //非面数据不能导入
                if (tempRecordset.GetGeometry().GetType().Name.ToString() != "GeoRegion")
                {
                    MessageBox.Show("导入图斑不是面数据,不能导入,请重新选择!");
                    return;
                }
                //------以下为属性字段添加
                //地块编号
                if (textBox1.Text == "")
                {
                    MessageBox.Show("请输入地块编号!");

                    return;
                }
                //国有面积
                if (textBox2.Text == "")
                {
                    MessageBox.Show("请输入国有面积!");
                    return;
                }
                //地块位置
                if (textBox4.Text == "")
                {
                    MessageBox.Show("请输入地块位置!");
                    return;
                }
                //集体面积
                if (textBox5.Text == "")
                {
                    MessageBox.Show("请输入集体面积!");
                    return;
                }
                //土源保障情况
                if (comboBox9.Text == "")
                {
                    MessageBox.Show("请输入土源保障情况!");
                    return;
                }
                //地块现状的地形坡度
                if (comboBox10.Text == "")
                {
                    MessageBox.Show("请输入地块现状的地形坡度!");
                    return;
                }
                //水源保障情况
                if (comboBox4.Text == "")
                {
                    MessageBox.Show("请输入水源保障情况!");
                    return;
                }
                //预期复垦更低等级
                if (textBox14.Text == "")
                {
                    MessageBox.Show("请输入预期复垦更低等级!");
                    return;
                }
                //预期地块的地形坡度
                if (comboBox16.Text == "")
                {
                    MessageBox.Show("请输入预期地块的地形坡度!");
                    return;
                }
                //建设用地合法性
                if (comboBox1.Text == "")
                {
                    MessageBox.Show("请选择建设用地合法性!");
                    return;
                }
                //复垦义务人情况
                if (comboBox2.Text == "")
                {
                    MessageBox.Show("请选择复垦义务人情况!");
                    return;
                }
                //查询重复地块编号,若重复则重新输入地块编号
                sqlQuery.Clear();
                sqlQuery.Append(" SELECT DKBH  FROM  " + tableName);
                sqlQuery.Append(" WHERE DKBH ='" + textBox1.Text + "'");

                gkfqd.Common.DbUse.GetOleDbconnection().Close();
                gkfqd.Common.DbUse.GetOleDbconnection().Open();
                DataSetDkbh.Clear();
                OleDbDataAdapter MyAdapter = new OleDbDataAdapter(sqlQuery.ToString(), gkfqd.Common.DbUse.GetOleDbconnection());
                MyAdapter.Fill(DataSetDkbh);
                gkfqd.Common.DbUse.GetOleDbconnection().Close();
                if (DataSetDkbh.Tables[0].Rows.Count != 0)
                {
                    MessageBox.Show("该地块编号已经存在,请重新录入!");
                    return;
                }
                //临时图层到正式图层赋值
                gkfqdRecordset.AddNew(tempRecordset.GetGeometry());
                getSmid = gkfqdRecordset.GetFieldValue("SMID").ToString();
                //复垦项目名称 主键
                gkfqdRecordset.SetFieldValue("FKXMMC", textBox10.Text);
                //地块编号
                gkfqdRecordset.SetFieldValue("DKBH", textBox1.Text);
                //地块位置
                gkfqdRecordset.SetFieldValue("DKWZ", textBox4.Text);
                //地块中的国有面积
                gkfqdRecordset.SetFieldValue("DKZGYMJ", double.Parse(textBox2.Text));
                //地块中的集体面积
                gkfqdRecordset.SetFieldValue("DKZJTMJ", double.Parse(textBox5.Text));
                //土源保障情况
                gkfqdRecordset.SetFieldValue("TYBZQK", comboBox9.Text);
                //水源保障情况
                gkfqdRecordset.SetFieldValue("SYBZQK", comboBox4.Text);
                //现状地形坡度
                gkfqdRecordset.SetFieldValue("XZDXPD", comboBox10.Text);
                //预期复垦更低等级
                gkfqdRecordset.SetFieldValue("YQFKGDDJ", textBox14.Text);
                //预期地形坡度
                gkfqdRecordset.SetFieldValue("YQDXPD", comboBox4.Text);
                //建设用地合法性
                gkfqdRecordset.SetFieldValue("JSYDHF", comboBox1.Text);
                //复垦义务人情况
                gkfqdRecordset.SetFieldValue("FKYWR", comboBox2.Text);
                //其他规划名称
                if (textBox6.Text != null)
                {
                    gkfqdRecordset.SetFieldValue("QTGHMC", textBox6.Text);
                }
                //是否符合
                if (checkBox2.Checked == true)
                {
                    gkfqdRecordset.SetFieldValue("SFFH", "是");
                }
                //是否符合土地利用总体规划
                if (checkBox1.Checked == true)
                {
                    gkfqdRecordset.SetFieldValue("SFFHTDLYZTGH", "是");
                }
                //现状有无污染状况
                if (checkBox3.Checked == true)
                {
                    gkfqdRecordset.SetFieldValue("XZYWWRZK", "有");
                }
                //现状污染状况
                if (textBox7.Text != null)
                {
                    gkfqdRecordset.SetFieldValue("XZWRZK", textBox7.Text);
                }
                //现状有无地质灾害隐患
                if (checkBox4.Checked == true)
                {
                    gkfqdRecordset.SetFieldValue("XZYWDZZHYH", "有");
                }
                //交通运输用地
                if (textBox9.Text != "")
                {
                    gkfqdRecordset.SetFieldValue("JTYSYD", double.Parse(textBox9.Text));
                }
                //工业用地
                if (textBox25.Text != "")
                {
                    gkfqdRecordset.SetFieldValue("GYYD", double.Parse(textBox25.Text));
                }
                //其他建设用地
                if (textBox11.Text != "")
                {
                    gkfqdRecordset.SetFieldValue("QTJSYD", double.Parse(textBox11.Text));
                }
                //采矿用地
                if (textBox12.Text != "")
                {
                    gkfqdRecordset.SetFieldValue("CKYD", double.Parse(textBox12.Text));
                }
                //水域及水利设施用地
                if (textBox8.Text != "")
                {
                    gkfqdRecordset.SetFieldValue("SYJSLSSYD", double.Parse(textBox8.Text));
                }
                //地块现状小计
                if (textBox13.Text != "")
                {
                    // double result = double.Parse(textBox9.Text) + double.Parse(textBox25.Text) + double.Parse(textBox11.Text) + double.Parse(textBox12.Text) + double.Parse(textBox8.Text);
                    gkfqdRecordset.SetFieldValue("XZXJ", double.Parse(textBox13.Text));
                }
                //有效土层厚度
                if (textBox3.Text != "")
                {
                    gkfqdRecordset.SetFieldValue("YXTCHD", double.Parse(textBox3.Text));
                }
                //预期有无污染状况
                if (checkBox5.Checked == true)
                {
                    gkfqdRecordset.SetFieldValue("YQYWWRZK", "有");
                }
                //预期污染状况
                if (textBox15.Text != null)
                {
                    gkfqdRecordset.SetFieldValue("YQWRZK", textBox15.Text);
                }
                //预期有无地质灾害隐患
                if (checkBox6.Checked == true)
                {
                    gkfqdRecordset.SetFieldValue("YQYWDZZHYH", "有");
                }
                //农村道路
                if (textBox16.Text != "")
                {
                    gkfqdRecordset.SetFieldValue("NCDL", double.Parse(textBox16.Text));
                }
                //耕地
                if (textBox18.Text != "")
                {
                    gkfqdRecordset.SetFieldValue("GD", double.Parse(textBox18.Text));
                }
                //园地
                if (textBox17.Text != "")
                {
                    gkfqdRecordset.SetFieldValue("YD", double.Parse(textBox17.Text));
                }
                //坑塘水面
                if (textBox19.Text != "")
                {
                    gkfqdRecordset.SetFieldValue("KTSM", double.Parse(textBox19.Text));
                }
                //林地
                if (textBox20.Text != "")
                {
                    gkfqdRecordset.SetFieldValue("LD", double.Parse(textBox20.Text));
                }
                //草地
                if (textBox21.Text != "")
                {
                    gkfqdRecordset.SetFieldValue("CD", double.Parse(textBox21.Text));
                }
                //其他农用地
                if (textBox22.Text != "")
                {
                    gkfqdRecordset.SetFieldValue("QTNYD", double.Parse(textBox22.Text));
                }
                //沟渠
                if (textBox23.Text != "")
                {
                    gkfqdRecordset.SetFieldValue("GQ", double.Parse(textBox23.Text));
                }
                //预期地块小计
                if (textBox24.Text != "")
                {
                    // double result = double.Parse(textBox16.Text) + double.Parse(textBox17.Text) + double.Parse(textBox18.Text) + double.Parse(textBox19.Text) + double.Parse(textBox20.Text) + double.Parse(textBox21.Text) + double.Parse(textBox22.Text) + double.Parse(textBox23.Text);
                    gkfqdRecordset.SetFieldValue("YQXJ", double.Parse(textBox24.Text));
                }
                //地块名称
                if (textBox26.Text != "")
                {
                    gkfqdRecordset.SetFieldValue("DKMC", textBox26.Text);
                }
                //地块面积(亩)
                if (textBox27.Text != "")
                {
                    gkfqdRecordset.SetFieldValue("DKMJ", double.Parse(textBox27.Text));
                }
                //坐标系
                if (textBox28.Text != "")
                {
                    gkfqdRecordset.SetFieldValue("ZBX", textBox28.Text);
                }
                //界址点数
                if (textBox29.Text != "")
                {
                    gkfqdRecordset.SetFieldValue("JZDS", double.Parse(textBox29.Text));
                }
                //几度分带
                if (textBox30.Text != "")
                {
                    gkfqdRecordset.SetFieldValue("JDFD", double.Parse(textBox30.Text));
                }
                //精度
                if (textBox31.Text != "")
                {
                    gkfqdRecordset.SetFieldValue("JD", double.Parse(textBox31.Text));
                }
                //计量单位
                if (textBox32.Text != "")
                {
                    gkfqdRecordset.SetFieldValue("JLDW", textBox32.Text);
                }
                // 记录图形属性
                if (textBox33.Text != "")
                {
                    gkfqdRecordset.SetFieldValue("JLTCSX", textBox33.Text);
                }
                // 投影类型
                if (textBox34.Text != "")
                {
                    gkfqdRecordset.SetFieldValue("TYLX", textBox34.Text);
                }
                gkfqdRecordset.Update();
                //防止第二次插入 设置按钮不能点
                button2.Enabled = false;
            }
            else
            {
                MessageBox.Show("该图斑已经存在,请确认或重新选择!");
                tempRecordset.Dispose();
                gkfqdRecordset.Dispose();
                return;
            }

            tempRecordset.Dispose();
            gkfqdRecordset.Dispose();
            gk011 frmGk011;
            frmGk011 = (gk011)this.Owner;
            frmGk011.RefreshDataGridView();
            MessageBox.Show("导入成功!");
            #endregion
        }
Beispiel #17
0
        private void button1_Click(object sender, EventArgs e)
        {
            try {
                if (xzqh.Text.Length > 0)
                {
                    if (xzqh.Text.Length != 6)
                    {
                        MessageBox.Show("行政区划必须为六位");
                        return;
                    }
                    object value = getvalue(recordset.GetFieldInfos()[label_xzqh.Text.Remove(label_xzqh.Text.Length - 1)].Type, xzqh.Text);
                    recordset.SetFieldValue(label_xzqh.Text.Remove(label_xzqh.Text.Length - 1), value);
                }
                else
                {
                    MessageBox.Show(label_xzqh.Text.Remove(label_xzqh.Text.Length - 1) + " 不能为空");
                    return;
                }

                if (jd.Text.Length > 0)
                {
                    if (jd.Text.Length != 3)
                    {
                        MessageBox.Show("街道号必须为3位");
                        return;
                    }
                    object value = getvalue(recordset.GetFieldInfos()[label_jd.Text.Remove(label_jd.Text.Length - 1)].Type, jd.Text);
                    recordset.SetFieldValue(label_jd.Text.Remove(label_jd.Text.Length - 1), value);
                }
                else
                {
                    MessageBox.Show(label_jd.Text.Remove(label_jd.Text.Length - 1) + "不能为空");
                    return;
                }
                if (jf.Text.Length > 0)
                {
                    if (jf.Text.Length != 2)
                    {
                        MessageBox.Show("街坊必须为2位");
                        return;
                    }
                    object value = getvalue(recordset.GetFieldInfos()[label_jf.Text.Remove(label_jf.Text.Length - 1)].Type, jf.Text);
                    recordset.SetFieldValue(label_jf.Text.Remove(label_jf.Text.Length - 1), value);
                }
                else
                {
                    MessageBox.Show(label_jf.Text.Remove(label_jf.Text.Length - 1) + " 不能为空");
                    return;
                }

                if (zdh.Text.Length > 0)
                {
                    object value = getvalue(recordset.GetFieldInfos()[zdh_l.Text.Remove(zdh_l.Text.Length - 1)].Type, jd.Text + jf.Text + zdh.Text);
                    recordset.SetFieldValue(zdh_l.Text.Remove(zdh_l.Text.Length - 1), value);
                }
                else
                {
                    MessageBox.Show(zdh_l.Text.Remove(zdh_l.Text.Length - 1) + " 不能为空");
                    return;
                }
                if (tdlylb.Text.Length > 0)
                {
                    object value = getvalue(recordset.GetFieldInfos()[label_tdlylb.Text.Remove(label_tdlylb.Text.Length - 1)].Type, tdlylb.Text);
                    recordset.SetFieldValue(label_tdlylb.Text.Remove(label_tdlylb.Text.Length - 1), value);
                }
                else
                {
                    MessageBox.Show(label_tdlylb.Text.Remove(label_tdlylb.Text.Length - 1) + " 不认为空");
                    return;
                }
                if (qlr.Text.Length > 0)
                {
                    object value = getvalue(recordset.GetFieldInfos()[label_qlr.Text.Remove(label_qlr.Text.Length - 1)].Type, qlr.Text);
                    recordset.SetFieldValue(label_qlr.Text.Remove(label_qlr.Text.Length - 1), value);
                }
                else
                {
                    MessageBox.Show(qlr.Text.Remove(qlr.Text.Length - 1) + " 不能为空");
                    return;
                }
                if (recordset.Update())
                {
                    MessageBox.Show("添加宗地成功");
                }
                tt = true;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }
Beispiel #18
0
        void addBox(DatasetVector dv, string file)
        {
            FileStream   f;
            StreamWriter sw;
            Recordset    rc = dv.GetRecordset(false, CursorType.Dynamic);

            Console.WriteLine(dv.Name + "\t::\t" + dv.Type.ToString() + "\t::\t" + dv.RecordCount);

            Dictionary <int, Feature> feas = rc.GetAllFeatures();

            f  = new FileStream(file, FileMode.OpenOrCreate);
            sw = new StreamWriter(f);

            foreach (Feature item in feas.Values)
            {
                Point3D lower, uper, center;

                if ((item.GetGeometry() as Geometry3D) != null)
                {
                    lower  = (item.GetGeometry() as Geometry3D).BoundingBox.Lower;
                    uper   = (item.GetGeometry() as Geometry3D).BoundingBox.Upper;
                    center = (item.GetGeometry() as Geometry3D).BoundingBox.Center;

                    sw.WriteLine(string.Format("{0},{1},{2},{3},{4},{5},{6}", item.GetID(), lower.X, lower.Y, lower.Z, uper.X, uper.Y, uper.Z));
                    if (!dv.IsOpen)
                    {
                        dv.Open();
                    }

                    Dictionary <string, double> fields = new Dictionary <string, double>();
                    fields.Add("Lx", lower.X);
                    fields.Add("Ly", lower.Y);
                    fields.Add("Lz", lower.Z);
                    fields.Add("Ux", uper.X);
                    fields.Add("Uy", uper.Y);
                    fields.Add("Uz", uper.Z);


                    foreach (KeyValuePair <string, double> field in fields)
                    {
                        if (dv.FieldInfos.IndexOf(field.Key) < 0)
                        {
                            FieldInfo fieldInf = new FieldInfo(field.Key, FieldType.Double);
                            dv.FieldInfos.Add(fieldInf);
                        }

                        string fieldName  = field.Key;
                        double fieldValue = field.Value;
                        try
                        {
                            rc.SeekID(item.GetID());
                            rc.Edit();
                            rc.SetFieldValue(fieldName, fieldValue);
                            rc.Update();
                        }
                        catch
                        {
                            Console.WriteLine("error!");
                        }
                        //Console.WriteLine(string.Format("{0},{1},{2}", item.GetID(), fieldName, fieldValue));
                    }
                    //Console.WriteLine("=="+item.GetID()+"==");
                }
            }
            Console.WriteLine(dv.Name + " done!");
            sw.Close();
            f.Close();
            rc.Close();
            dv.Close();
        }
Beispiel #19
0
        // 通过线性参考 处理数据
        private void DataHandling(Dataset currentDs, DatasetVector routesDataset)
        {
            if (currentDs.Type == DatasetType.Tabular)
            {
                SuperMap.Desktop.Application.ActiveApplication.Output.Output("DatasetType.Tabular");
            }

            DatasetVector datasetVector = currentDs as DatasetVector;
            Recordset     rd            = datasetVector.GetRecordset(false, CursorType.Dynamic);
            Recordset     routeRd       = routesDataset.GetRecordset(false, CursorType.Dynamic);


            rd.MoveFirst();
            while (!rd.IsEOF)
            {
                String _id      = rd.GetFieldValue("ID").ToString();
                String _name    = rd.GetFieldValue("NAME").ToString();
                String _xbh     = rd.GetFieldValue("XBH").ToString();
                String _licheng = rd.GetFieldValue("LICHENG").ToString();
                String _x       = rd.GetFieldValue("X").ToString();
                String _y       = rd.GetFieldValue("Y").ToString();



                //质量差的数据过滤
                if (_id.Trim() == "" || _xbh.Trim() == "" || _licheng.Trim() == "")
                {
                    rd.MoveNext();
                    continue;
                }

                // 如果有xy坐标,使用xy坐标;如果没有,使用线性参考获得坐标
                if (_x.Trim() != "" && _y.Trim() != "")
                {
                    //使用xy
                    try
                    {
                        double x = 0, y = 0;
                        double.TryParse(_x, out x);
                        double.TryParse(_y, out y);

                        //add list
                        Vehicle vehicle = new Vehicle();
                        vehicle.Id   = _id;
                        vehicle.Name = _name;
                        vehicle.X    = x;
                        vehicle.Y    = y;
                        vehicle.Xbh  = _xbh;
                        vehicleList.Add(vehicle);
                    }
                    catch (Exception)
                    {
                        this.MyLog("经纬度坐标格式有误,请使用如下格式:111.67,23.89");
                    }
                }
                else
                {
                    //使用 线性参考
                    GeoLineM geoLineM = new GeoLineM();

                    //游标移到开头
                    routeRd.MoveFirst();
                    while (!routeRd.IsEOF)
                    {
                        String xbh = routeRd.GetFieldValue("线编号").ToString();
                        if (xbh == _xbh)
                        {
                            geoLineM = (GeoLineM)routeRd.GetGeometry();
                            double mValue = 0;
                            //解析里程值
                            mValue = GetMValue(_licheng);
                            Point2D point = geoLineM.GetPointAtM(mValue);
                            this.MyLog("坐标:" + point.X + "," + point.Y);
                            rd.SetFieldValue("X", point.X.ToString());
                            rd.SetFieldValue("Y", point.Y.ToString());

                            //add list
                            Vehicle vehicle = new Vehicle();
                            vehicle.Id   = _id;
                            vehicle.Name = _name;
                            vehicle.X    = point.X;
                            vehicle.Y    = point.Y;
                            vehicle.Xbh  = _xbh;
                            vehicleList.Add(vehicle);
                            break;
                        }
                        //
                        routeRd.MoveNext();
                    }
                }//---else end

                rd.MoveNext();
            }
            //update
            //rd.Update();

            rd.Close();
            rd.Dispose();
            routeRd.Close();
            routeRd.Dispose();

            this.MyLog("rd---------end");

            //creat new dataset
            //处理后的数据 存储在新建要素集
            CopyToNewDataset(vehicleList);
        }