交點(diǎn)判斷
          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");

                          //入力座標(biāo)が筆界線上に近いが接していないときの処理です。
                          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["始點(diǎn)X"];
                              double sy = ptInfos["始點(diǎn)Y"];
                              double sAngle = ptInfos["始點(diǎn)角度"];
                              double ex = ptInfos["終點(diǎn)X"];
                              double ey = ptInfos["終點(diǎn)Y"];
                              double eAngle = ptInfos["終點(diǎn)角度"];

                              if (mode == TerraceConst.MODE_LINE_EXTEND_VERTICALINTERSECT)//垂直の交點(diǎn)
                              {

                              }
                              else if (mode == TerraceConst.MODE_LINE_EXTEND_EXTENSION)//延長線
                              {
                                  //終點(diǎn)延長線
                                  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); //ラインをリストに追加

                                  
          //始點(diǎn)延長線
                                  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
          主站蜘蛛池模板: 乐昌市| 焉耆| 永昌县| 洪洞县| 阿瓦提县| 丹江口市| 康平县| 西畴县| 青冈县| 大姚县| 新平| 上思县| 广河县| 汾阳市| 长乐市| 德州市| 炎陵县| 陆河县| 台山市| 孟州市| 禹州市| 闸北区| 横山县| 渝北区| 松阳县| 西藏| 浏阳市| 融水| 麻栗坡县| 濮阳县| 黄大仙区| 深水埗区| 石屏县| 深泽县| 昌邑市| 云南省| 定日县| 贡山| 康乐县| 根河市| 无为县|