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;
 }
Esempio n. 6
0
 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;
     }
 }
Esempio n. 7
0
 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;
 }
Esempio n. 8
0
        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;
            }
        }