交点判断
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<string, double> ptInfos = new Dictionary<string, double>();
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 阅读(277)
评论(0) 编辑 收藏 所属分类:
GIS/GPS 、
.Net