/// <summary> /// 向数据库添加点数据 /// </summary> public static bool ImportSFCLSData(DataTable dataTable, string className) { DataBase gdb = DataBase.OpenByURL("GDBP://MapGisLocal/Templates"); //打开简单要素类 SFeatureCls sfcls = gdb.GetXClass(XClsType.SFCls) as SFeatureCls; bool op = sfcls.Open(className, 0); GeoPoints pnts = null; Dot3D newdot = new Dot3D(); //PntInfo pntInfo = new PntInfo(); int i = 0; foreach (DataRow dr in dataTable.Rows) { double.TryParse(dr["x 坐标"].ToString(), out double x); double.TryParse(dr["y 坐标"].ToString(), out double y); //点要素坐标 newdot.X = y; newdot.Y = x; newdot.Z = 0; pnts = new GeoPoints(); pnts.Append(newdot); Record rcd = new Record(); Fields Flds = sfcls.Fields; if (Flds == null) { return(false); } PntInfo pntInfo = new PntInfo(); //点参数 pntInfo.LibID = 0; pntInfo.SymID = 1; pntInfo.Width = 10; pntInfo.Height = 10; rcd.Fields = Flds; //设置属性字段的值 rcd.set_FldVal(1, (i++).ToString()); rcd.set_FldVal(2, dr["车牌"].ToString()); string time = dr["时间"].ToString().Replace('T', ' '); rcd.set_FldVal(3, time); rcd.set_FldVal(4, time); rcd.set_FldVal(5, x); rcd.set_FldVal(6, y); //添加点要素 long oid = sfcls.Append(pnts, rcd, pntInfo); } Debug.WriteLine("Done."); return(true); }
/// <summary> /// 导入数据后显示地图 /// </summary> private void ShowMaps() { MapGrid.Visibility = Visibility.Visible; BackgroundGrid.Visibility = Visibility.Collapsed; MapGIS.UI.Controls.MapWorkSpaceTree _Tree = new MapGIS.UI.Controls.MapWorkSpaceTree(); //地图文档 Document doc = _Tree.Document; if (doc.Close(false)) { OpenFileDialog mapxDialog = new OpenFileDialog(); mapxDialog.Filter = ".mapx(地图文档)|*.mapx|.map(地图文档)|*.map|.mbag(地图包)|*.mbag"; if (mapxDialog.ShowDialog() != DialogResult.OK) { return; } string mapUrl = mapxDialog.FileName; //打开地图文档 doc.Open(mapUrl); } Maps maps = doc.GetMaps(); if (maps.Count > 0) { //获取当前第一个地图 Map map = maps.GetMap(0); //设置地图的第一个图层为激活状态 map.get_Layer(0).State = LayerState.Active; this.WuhanMapControl.ActiveMap = map; this.WuhanMapControl.Restore(); } else { return; } disp = WuhanMapControl.Display; userDrawGeoInfo = disp.GetUserDrawGeoInfo(); pntInfo = userDrawGeoInfo.GetPntInfo(); EditGeomInfoForm pntInfoForm = new EditGeomInfoForm((VectorLayer)null, pntInfo); if (pntInfoForm.ShowDialog() == DialogResult.OK) { } pntInfoForm.Dispose(); //画点 Fields Flds = null; Field Fld = null; long ID = 0; Record Rcd = null; //变量初始化 Rcd = new Record(); Flds = new Fields(); Server svr = new Server(); //连接数据源 svr.Connect("MapGISLocal", "", ""); DataBase GDB = svr.OpenGDB("Templates"); SFeatureCls SFCls = new SFeatureCls(GDB); SFCls.Open("BikePnts", 0); //获取属性结构 Flds = SFCls.Fields; if (Flds == null) { SFCls.Close(); return; } int num = Flds.Count; //目的类对象的个数 int objnum = SFCls.Count; //获取所有对象的ID,思想是根据对象的个数进行循环,若OID不存在,则OID自加继续循环直到循环objnum次 int n = 0; ID = 1; string[] listItem = new string[8]; while (n < objnum) { //取得ID=ID.Int的简单要素的属性 Rcd = SFCls.GetAtt(ID); //取得属性结构对象中的字段数目 if (Rcd != null) { Flds = Rcd.Fields; listItem[0] = ID.ToString(); //获取对应属性字段的值 for (int i = 0; i < num; i++) { object val = null; Fld = Flds.GetItem(i); string name = Fld.FieldName; val = Rcd.get_FldVal(name); listItem[i + 1] = ((val != null) ? val.ToString() : ""); } n++; Dot dot = new Dot(); dot.X = Convert.ToDouble(listItem[6]); dot.Y = Convert.ToDouble(listItem[7]); DrawPoint(dot); } ID++; } SFCls.Close(); }