交點判斷
          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 閱讀(293) 評論(0)  編輯  收藏 所屬分類: GIS/GPS.Net
          主站蜘蛛池模板: 弥勒县| 赤峰市| 新干县| 铁力市| 利辛县| 玉树县| 阜南县| 墨竹工卡县| 乐陵市| 资源县| 石阡县| 易门县| 米泉市| 昌吉市| 固安县| 唐海县| 伊金霍洛旗| 沁水县| 陵川县| 山阳县| 巫山县| 东辽县| 临潭县| 冀州市| 邛崃市| 偏关县| 余庆县| 普陀区| 保山市| 鄂伦春自治旗| 东乡族自治县| 铜陵市| 恭城| 雷州市| 呼和浩特市| 宁远县| 大关县| 太白县| 昌吉市| 视频| 杭锦后旗|