Example #1
0
        //在view中加载图形,和同步图形
        void SyncToView()
        {
            IView view = InputCB.SelectedItem as IView;

            //为图形赋值“Name”属性,以便图形和数据关联
            foreach (int slID in _slsGraphics.Keys)
            {
                SegmentLining      sl = _allSLs[slID] as SegmentLining;
                IGraphicCollection gc = _slsGraphics[slID];
                foreach (IGraphic g in gc)
                {
                    g.Attributes["Name"] = sl.name;
                }
            }

            //将图形添加到view中
            string         layerID = "DemoLayer";                 //图层ID
            IGraphicsLayer gLayer  = getDemoLayer(view, layerID); //获取图层函数

            foreach (int id in _slsGraphics.Keys)
            {
                IGraphicCollection gc = _slsGraphics[id];
                gLayer.addGraphics(gc);
            }

            //使数据与图形关联
            List <DGObject> sls = _allSLs.merge();

            gLayer.syncObjects(sls);

            //计算新建图形范围,并在地图中显示该范围
            IEnvelope ext = null;

            foreach (IGraphicCollection gc in _slsGraphics.Values)
            {
                IEnvelope itemExt = GraphicsUtil.GetGraphicsEnvelope(gc);
                if (ext == null)
                {
                    ext = itemExt;
                }
                else
                {
                    ext = ext.Union(itemExt);
                }
            }
            _mainFrame.activeView = view;
            view.zoomTo(ext);
        }
Example #2
0
        void StartAnalysis()
        {
            //获取输入的view和复制坐标系
            IView view = InputCB.SelectedItem as IView;

            _spatialRef = view.spatialReference;

            //开始分析
            foreach (string SLLayerID in _selectedSLsDict.Keys)
            {
                //获取衬砌选中列表
                IEnumerable <DGObject> sls    = _selectedSLsDict[SLLayerID];
                List <DGObject>        slList = sls.ToList();
                IGraphicsLayer         gLayer = _inputView.getLayer(SLLayerID);
                foreach (DGObject dg in slList)
                {
                    //获取单个衬砌对象,计算评估等级
                    SegmentLining           sl = dg as SegmentLining;
                    SLConvergenceRecordType slConvergenceRecordType = sl.ConstructionRecord.SLConvergenceRecords;
                    if (slConvergenceRecordType.SLConvergenceItems.Count == 0)
                    {
                        continue;
                    }

                    SLConvergenceItem slConvergenceItem = slConvergenceRecordType.SLConvergenceItems[0];
                    if (slConvergenceItem.HorizontalDev == double.NaN)
                    {
                        continue;
                    }
                    double raduis    = (double)slConvergenceItem.HorizontalRad;
                    double deviation = (double)slConvergenceItem.HorizontalDev;
                    double ratio     = deviation / (raduis - deviation) * 1000;

                    int grade;
                    if (ratio <= 3)
                    {
                        grade = 5;
                    }
                    else if (ratio <= 5)
                    {
                        grade = 4;
                    }
                    else if (ratio <= 8)
                    {
                        grade = 3;
                    }
                    else if (ratio <= 10)
                    {
                        grade = 2;
                    }
                    else
                    {
                        grade = 1;
                    }

                    //根据评估等级获取图形样式
                    ISymbol symbol = GetSymbol(grade);

                    //为了演示,采用了较复杂的方法
                    //<简便方法 可替换下面代码>
                    //IGraphicCollection gcollection = gLayer.getGraphics(sl);
                    //IGraphic g = gcollection[0];
                    //g.Symbol = symbol;
                    //IGraphicCollection gc = Runtime.graphicEngine.newGraphicCollection();
                    //gc.Add(g);
                    //_slsGraphics[sl.id] = gc;
                    //</简便方法>

                    //获取衬砌图形
                    IGraphicCollection gcollection     = gLayer.getGraphics(sl);
                    IGraphic           g               = gcollection[0];
                    IPolygon           polygon         = g.Geometry as IPolygon;
                    IPointCollection   pointCollection = polygon.GetPoints(); //获取端点
                    //衬砌为长方形,故有四个点
                    IMapPoint p1_temp = pointCollection[0];
                    IMapPoint p2_temp = pointCollection[1];
                    IMapPoint p3_temp = pointCollection[2];
                    IMapPoint p4_temp = pointCollection[3];
                    //新建新的点,注意复制坐标系
                    IMapPoint p1 = Runtime.geometryEngine.newMapPoint(p1_temp.X, p1_temp.Y, _spatialRef);
                    IMapPoint p2 = Runtime.geometryEngine.newMapPoint(p2_temp.X, p2_temp.Y, _spatialRef);
                    IMapPoint p3 = Runtime.geometryEngine.newMapPoint(p3_temp.X, p3_temp.Y, _spatialRef);
                    IMapPoint p4 = Runtime.geometryEngine.newMapPoint(p4_temp.X, p4_temp.Y, _spatialRef);
                    //生成新的图形
                    g        = Runtime.graphicEngine.newQuadrilateral(p1, p2, p3, p4);
                    g.Symbol = symbol;
                    IGraphicCollection gc = Runtime.graphicEngine.newGraphicCollection();
                    gc.Add(g);
                    _slsGraphics[sl.id] = gc; //保存结果
                }
            }
        }