public void init(int programID, AxMapControl mc, AxToolbarControl tc, MainWindow mw) { if (inited) return; inited = true; program = new Program(); program.id = programID; program.select(); mapControl = mc; toolbarControl = tc; mainWindow = mw; innerRoadList = program.getAllRelatedInnerRoad(); if (innerRoadList == null) { innerRoadList = new ObservableCollection<InnerRoad>(); ObservableCollection<Village> villageList = program.getAllRelatedVillage(); foreach (Village village in villageList) { if (village.inUse) { InnerRoad innerRoad = new InnerRoad(); innerRoad.programID = program.id; innerRoad.villageID = village.id; innerRoadList.Add(innerRoad); } } } else { foreach (InnerRoad innerRoad in innerRoadList) { GisUtil.DrawPolylineElement(innerRoad.lineElement, mapControl); } } valid = isValid(); dirty = false; mapControlMouseDown = null; InnerRoadListBox.ItemsSource = innerRoadList; }
private void FinishMainRoadButtonClick(object sender, RoutedEventArgs e) { if (isValid()) { if (isDirty()) { if (Ut.C("继续操作会清空之后的数据, 是否继续?")) { dirty = true; valid = true; foreach (MainRoad mainRoad in mainRoadList) { if (mainRoad.needDelete) mainRoad.delete(); else mainRoad.saveOrUpdate(); } //1. 靠主路生成区域. GisUtil.CreateShapefile(C.PROGRAM_FOLDER, SiteSelectorUserControl.MAINROAD_LIST_SHP_NAME, mapControl.SpatialReference, "polyline"); List<IGeometry> mainRoadGeometryList = new List<IGeometry>(); foreach (MainRoad mainRoad in mainRoadList) { IElement element = mainRoad.lineElement as IElement; mainRoadGeometryList.Add(element.Geometry); } GisUtil.AddGeometryListToShpFile(mainRoadGeometryList, C.PROGRAM_FOLDER, SiteSelectorUserControl.MAINROAD_LIST_SHP_NAME); cachedVillageAreaPolygonList = GisUtil.GetPolygonListFromPolylineList( Ut.MakePath(C.PROGRAM_FOLDER, SiteSelectorUserControl.MAINROAD_LIST_SHP_NAME), Ut.MakePath(C.PROGRAM_FOLDER, SiteSelectorUserControl.VILLAGE_AREA_SHP_NAME)); foreach (IPolygon polygon in cachedVillageAreaPolygonList) { GisUtil.drawPolygon(polygon, mapControl); } //2. 检查生成的区域是否符合标准. bool errorFlag = false; if (cachedVillageAreaPolygonList.Count == 0) errorFlag = true; foreach (IPolygon polygon in cachedVillageAreaPolygonList) { IArea area = polygon as IArea; if (area.Area > Village.VILLAGE_MAX_SIZE) { errorFlag = true; break; } } if (errorFlag) Ut.M("生成的图形中包含错误."); //3. 区域形成village对象和相应的内部路对象. villageList = new ObservableCollection<Village>(); foreach (IPolygon polygon in cachedVillageAreaPolygonList) { Village village = new Village(); village.programID = program.id; IPolygonElement polygonElement = new PolygonElementClass(); IElement element = polygonElement as IElement; element.Geometry = polygon; village.polygonElement = polygonElement; village.updateBoundary(); InnerRoad innerRoad = new InnerRoad(); innerRoad.programID = program.id; innerRoad.villageID = village.id; village.innerRoad = innerRoad; villageList.Add(village); } } else { return; } } else { valid = true; return; } } else { Ut.M("请完整填写信息"); return; } }
public bool isDirty() { ObservableCollection<Village> tempVillageList = program.getAllRelatedVillage(); if (villageList.Count != tempVillageList.Count) return true; foreach (Village village in villageList) { int villageID = village.id; Village villageCopy = new Village(); villageCopy.id = villageID; villageCopy.select(); if (!village.compare(villageCopy)) { return true; } int innerRoadID = village.innerRoad.id; InnerRoad innerRoadCopy = new InnerRoad(); innerRoadCopy.id = innerRoadID; innerRoadCopy.select(); if (!village.innerRoad.compare(innerRoadCopy)) { return true; } } return false; }
public void onMapControlMouseDown(object sender, IMapControlEvents2_OnMouseDownEvent e, InnerRoad innerRoad) { IPolyline innerRoadPolyline = mapControl.TrackLine() as IPolyline; //这里是不是要对画好的线做一下检查, 比如保证内部路穿过了小区区域. ILineElement innerRoadLineElement = new LineElementClass(); IElement element = innerRoadLineElement as IElement; element.Geometry = innerRoadPolyline; innerRoad.lineElement = innerRoadLineElement; innerRoad.updatePath(); GisUtil.DrawPolylineElement(innerRoadLineElement, mapControl); mainWindow.unmask(); }
public bool isDirty() { foreach (InnerRoad innerRoad in innerRoadList) { int innerRoadID = innerRoad.id; InnerRoad innerRoadCopy = new InnerRoad(); innerRoadCopy.id = innerRoadID; innerRoadCopy.select(); if (!innerRoad.compare(innerRoadCopy)) { return true; } } return false; }
public InnerRoad getRelatedInnerRoad() { if (!isValid(new List<string>() { "prID", "vName", "vBoundary", "vInUse" })) return null; string sqlCommand = String.Format("select irID from InnerRoad where vID={0}", vID); Sql sql = new Sql(); SqlDataReader reader = sql.selectInnerRoadIDByVillageID(sqlCommand); if (reader.HasRows) { reader.Read(); int innerRoadID = Int32.Parse(reader[0].ToString()); InnerRoad innerRoad = new InnerRoad(); innerRoad.id = innerRoadID; innerRoad.select(); return innerRoad; } else { return null; } }
public bool compare(InnerRoad innerRoad) { if (irID != innerRoad.id) return false; if (prID != innerRoad.programID) return false; if (vID != innerRoad.villageID) return false; if (irName != innerRoad.name) return false; if (irPath != innerRoad.path) return false; return true; }
public ObservableCollection<InnerRoad> getAllRelatedInnerRoad() { if (!isValid(new List<string>() { "prName", "pID" })) return null; ObservableCollection<InnerRoad> innerRoadList = new ObservableCollection<InnerRoad>(); string sqlCommand = String.Format(@"select irID from InnerRoad where prID={0}", prID); Sql sql = new Sql(); SqlDataReader reader = sql.selectAllInnerRoadByPrID(sqlCommand); if (reader.HasRows) { while (reader.Read()) { int irID = Int32.Parse(reader[0].ToString()); InnerRoad innerRoad = new InnerRoad(); innerRoad.id = irID; innerRoad.select(); innerRoadList.Add(innerRoad); } sql.closeConnection(); return innerRoadList; } else { sql.closeConnection(); return null; } }