交点判断
private bool isAllLineCrossed()
        {
            bool isCrossed = true;

            //map.DeselectAll();
            
//map.SelectList(TerraceConst.LIST_DIVIDE_AREA);
            
//map.OpenList(TerraceConst.LIST_DIVIDE_AREA, 0);
            
//int numLineCross   = map.ScanGeometry("TMP_List", Constants.SIS_GT_CROSS  , Constants.SIS_GM_GEOMETRY, "", "");
            
//int numLineCrossby = map.ScanGeometry("TMP_List", Constants.SIS_GT_CROSSBY, Constants.SIS_GM_GEOMETRY, "", "");
            
//int numLine        = numLineCross + numLineCrossby;

            
//if (numLine != map.GetListSize(TerraceConst.LIST_DIVIDE_LINE))
            
//    isCrossed = false;

            
//map.CloseItem();
            
//map.DeselectAll();

            map.EmptyList("TMP_LIST_LINE");
            map.EmptyList("TMP_LIST_AREA");
            map.EmptyList("TMP_LIST_CROSS");

            //分筆用ラインの外形線を作成して、TMP_LIST_LINEに登録
            map.DeselectAll();
            map.SelectList(TerraceConst.LIST_DIVIDE_LINE);
            map.CreateListFromSelection("TMP_LIST_LINE");
            map.CopyListItems("TMP_LIST_LINE");
            map.DeselectAll();
            map.SelectList("TMP_LIST_LINE");
            map.DoCommand("AComBoundary");
            map.CreateListFromSelection("TMP_LIST_LINE");

            //分筆用エリアの外形線を作成して、TMP_LIST_AREAに登録
            map.DeselectAll();
            map.SelectList(TerraceConst.LIST_DIVIDE_AREA);
            map.CreateListFromSelection("TMP_LIST_AREA");
            map.CopyListItems("TMP_LIST_AREA");
            map.DeselectAll();
            map.SelectList("TMP_LIST_AREA");
            map.DoCommand("AComBoundary");
            map.CreateListFromSelection("TMP_LIST_AREA");

            //入力Lineが筆界線上にかどうか判断します
            for (int i = 0; i < map.GetListSize("TMP_LIST_LINE"); i++)
            {
                map.DeselectAll();

                map.CombineLists("TMP_LIST_CROSS", "TMP_LIST_LINE", "TMP_LIST_AREA", Constants.SIS_BOOLEAN_OR);
                map.CreateBoolean("TMP_LIST_CROSS", Constants.SIS_BOOLEAN_AND);
                map.DeselectAll();
                map.SelectItem();
                map.DoCommand("AComDecompose");
                map.CreateListFromSelection("TMP_LIST_CROSS");

                if (map.GetListSize("TMP_LIST_CROSS") < 2)
                {
                    isCrossed = false;
                    break;
                }
            }
            
            map.EmptyList("TMP_LIST_LINE");
            map.EmptyList("TMP_LIST_AREA");
            map.EmptyList("TMP_LIST_CROSS");

            return isCrossed;
        }

int lineCnt = map.GetListSize(TerraceConst.LIST_DIVIDE_LINE);
            double extendR = 50;
            Dictionary<stringdouble> ptInfos = new Dictionary<stringdouble>();

            map.EmptyList("TMP_LIST_LINE");
            map.EmptyList("TMP_LIST_AREA");
            map.EmptyList("TMP_LIST_CROSS");

            //分筆用ラインの外形線を作成して、TMP_LIST_LINEに登録します
            map.DeselectAll();
            map.SelectList(TerraceConst.LIST_DIVIDE_LINE);
            map.CreateListFromSelection("TMP_LIST_LINE");
            map.CopyListItems("TMP_LIST_LINE");
            map.DeselectAll();
            map.SelectList("TMP_LIST_LINE");
            map.DoCommand("AComBoundary");
            map.CreateListFromSelection("TMP_LIST_LINE");

            //分筆用エリアの外形線を作成して、TMP_LIST_AREAに登録します
            map.DeselectAll();
            map.SelectList(TerraceConst.LIST_DIVIDE_AREA);
            map.CreateListFromSelection("TMP_LIST_AREA");
            map.CopyListItems("TMP_LIST_AREA");
            map.DeselectAll();
            map.SelectList("TMP_LIST_AREA");
            map.DoCommand("AComBoundary");
            map.CreateListFromSelection("TMP_LIST_AREA");

            //入力Lineが筆界線上にかどうか判断します
            for (int i = 0; i < map.GetListSize("TMP_LIST_LINE"); i++)
            {
                map.DeselectAll();
                map.CombineLists("TMP_LIST_CROSS", "TMP_LIST_LINE", "TMP_LIST_AREA", Constants.SIS_BOOLEAN_OR);
                map.CreateBoolean("TMP_LIST_CROSS", Constants.SIS_BOOLEAN_AND);
                map.DeselectAll();
                map.SelectItem();
                map.DoCommand("AComDecompose");
                map.CreateListFromSelection("TMP_LIST_CROSS");

                //入力座標が筆界線上に近いが接していないときの処理です。
                if (map.GetListSize("TMP_LIST_CROSS") < 2)
                {
                    map.DeselectAll();
                    map.OpenList(TerraceConst.LIST_DIVIDE_LINE, i);
                    map.SelectItem();
                    ptInfos = SisCommon.GetCurItemPointInfos(map);
                    double sx = ptInfos["始点X"];
                    double sy = ptInfos["始点Y"];
                    double sAngle = ptInfos["始点角度"];
                    double ex = ptInfos["終点X"];
                    double ey = ptInfos["終点Y"];
                    double eAngle = ptInfos["終点角度"];

                    if (mode == TerraceConst.MODE_LINE_EXTEND_VERTICALINTERSECT)//垂直の交点
                    {

                    }
                    else if (mode == TerraceConst.MODE_LINE_EXTEND_EXTENSION)//延長線
                    {
                        //終点延長線
                        double tx = ex + extendR * Math.Cos(Math.Abs(eAngle + 180) * Math.PI / 180);
                        double ty = ey + extendR * Math.Sin(Math.Abs(eAngle + 180) * Math.PI / 180);
                        map.DeselectAll();
                        map.MoveTo(ex, ey, 0);
                        map.LineTo(tx, ty, 0);
                        map.StoreAsLine();
                        map.GetExtent();
                        map.AddToList(TerraceConst.LIST_DIVIDE_LINE); //ラインをリストに追加

                        
//始点延長線
                        tx = sx + extendR * Math.Cos(Math.Abs(sAngle + 180) * Math.PI / 180);
                        ty = sy + extendR * Math.Sin(Math.Abs(sAngle + 180) * Math.PI / 180);
                        map.DeselectAll();
                        map.MoveTo(sx, sy, 0);
                        map.LineTo(tx, ty, 0);
                        map.StoreAsLine();
                        map.GetExtent();
                        map.AddToList(TerraceConst.LIST_DIVIDE_LINE); //ラインをリストに追加
                    }
                }
            }
            
            map.EmptyList("TMP_LIST_LINE");
            map.EmptyList("TMP_LIST_AREA");
            map.EmptyList("TMP_LIST_CROSS");
posted on 2017-01-10 14:57 Ying-er 阅读(27) 评论(0)  编辑  收藏 所属分类: C#GIS/GPS

只有注册用户登录后才能发表评论。


网站导航: