📄 duantouroad.java
字号:
/*
* 创建日期 2006-9-8
* 作 者 朱 闰
* TODO 要更改此生成的文件的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
package net.aetherial.gis.baobu.DuanTouLu;
import java.io.File;
import java.util.Vector;
import net.aetherial.gis.our.FrameOur;
import net.aetherial.gis.output.toLd.OpenDirectory;
import net.aetherial.gis.publicuse.WptTrackDistance;
import net.aetherial.gis.surface.ItemValue;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class DuanTouRoad {
// 获取所有县乡道GPS文件
public File[] getAllGPSFiles(String filePath) {
OpenDirectory od = new OpenDirectory();
od.setGradeStr("县道"); // 县乡道
File[] allFiles = od.getOpenFile(filePath);// 读取所有县乡道GPS文件
return allFiles;
}
// 判断是否为断头路
public int judgeDuanTouRoad(Node trackNode) {
String keyName = ""; // 航点上的关键点名称
String pointName = ""; // 航点名称
Node[] wayPointNode = ItemValue.getTracksWaypoint(trackNode); // 获取航迹上的所有航点
String trackName = ItemValue.getTracks_ld_original_number(trackNode);// 获取航迹上的描述字符串
String trackId = ItemValue.getTracksID(trackNode);
if (trackName.indexOf("Rupture") != -1) {
for (int i = 0; wayPointNode != null && i < wayPointNode.length; i++) {
keyName = ItemValue.getWaypointKP(wayPointNode[i]);
pointName = ItemValue.getWaypointName(wayPointNode[i]);
if (keyName.equals("渡口")) {
trackName = trackName.substring(0, trackName.length() - 7)
+ "ShiJiDuanTou";
ItemValue.setTracks_ld_Number(trackNode, trackName);
return 1; // 实际断头(是渡口引起的断头路,返回1)
}
}
trackName = trackName.substring(0, trackName.length() - 7)
+ "XuNiDuanTou";
ItemValue.setTracks_ld_Number(trackNode, trackName);
return 2; // 虚拟断头(返回2)
}
return 0; // 不是断头路(返回0)
}
// 查找断头路并做相应修改
public void scanDuanTouRoad(String filePath) {
FrameOur fo = new FrameOur();
File file = null;
Node[] allTrack = null;
String leiXing = "";
String luMian = "";
File[] allFiles = getAllGPSFiles(filePath);
double luMianWidth = 0.0;
double liCheng = 0.0;
int duanTouType = 0;
String[] backTrackProperty = null;
String[] nextTrackProperty = null;
for (int i = 0; allFiles != null && i < allFiles.length; i++) {
file = allFiles[i];
fo.openFile(file);
allTrack = ItemValue.getTracks();
for (int k = 0; allTrack != null && k < allTrack.length; k++) {
leiXing = ItemValue.getTracksType(allTrack[k]); // 路面类型
luMian = ItemValue.getTracksWidth(allTrack[k]); // 路面宽度
duanTouType = judgeDuanTouRoad(allTrack[k]); // 判断是否为断头路
if (duanTouType == 1) {
// 实际断头路处理
} else if (duanTouType == 2) {
// 虚拟断头路处理
NodeList nl = ItemValue.getTracksPoint(allTrack[k]);
Node tempTrackNode1 = getNearTrackNode(allTrack,
nl.item(0), k, 0);
Node tempTrackNode2 = getNearTrackNode(allTrack,
nl.item(1), k, 1);
System.err.println("==========最近航迹1=========="
+ ItemValue.getTracksName(tempTrackNode1));
System.err.println("==========最近航迹2=========="
+ ItemValue.getTracksName(tempTrackNode2));
backTrackProperty = getTrackProperty(tempTrackNode1);
nextTrackProperty = getTrackProperty(tempTrackNode2);
// fo.saveFile(file);
} else {
// 不是断头路处理
}
}
fo.reset();
}
}
// 获取与航点最近距离的航迹
public Node getNearTrackNode(Node[] trackNodes, Node trackPointNode,
int item, int trackType) {
Node tempTrackNode = null;
double jiWeiDu = Double.parseDouble(ItemValue
.getTracksPointX(trackPointNode));
double minValue = 9999.0;
WptTrackDistance wd = new WptTrackDistance();
NodeList allPointNode = null;
double firstNodeX = 0.0;
double lastNodeX = 0.0;
String firstNodeXStr = "";
String lastNodeXStr = "";
for (int i = 0; trackNodes != null && i < trackNodes.length; i++) {
allPointNode = ItemValue.getTracksPoint(trackNodes[i]);
if (item != i && allPointNode != null) {
firstNodeXStr = ItemValue.getTracksPointX(allPointNode.item(0));
firstNodeX = Double.parseDouble(firstNodeXStr);
lastNodeXStr = ItemValue.getTracksPointX(allPointNode.item(allPointNode.getLength() - 1));
lastNodeX = Double.parseDouble(lastNodeXStr);
if (jiWeiDu == lastNodeX || jiWeiDu == firstNodeX) {
tempTrackNode = trackNodes[i];
return tempTrackNode;
}
if (minValue > firstNodeX - jiWeiDu) {
minValue = firstNodeX - jiWeiDu;
tempTrackNode = trackNodes[i];
}
}
}
return tempTrackNode;
}
// 根据航迹点获取相关属性
public String[] getTrackProperty(Node trackNode) {
String[] nodeProperty = new String[5];
String xingZhengType = "";
String jiShuType = "";
String luMianType = "";
String luMianWidth = "";
String luJiWidth = "";
xingZhengType = ItemValue.getTracksGrade(trackNode); // 行政等级
luMianType = ItemValue.getTracksType(trackNode); // 路面类型
luMianWidth = ItemValue.getTracksWidth(trackNode); // 路面宽度
jiShuType = ItemValue.getTracksT5(trackNode); // 技术等级
luJiWidth = ItemValue.getTracks_jitongbu_luji_With(trackNode); // 路基宽度
nodeProperty[0] = xingZhengType; // 行政等级
nodeProperty[1] = luMianType; // 路面类型
nodeProperty[2] = luMianWidth; // 路面宽度
nodeProperty[3] = jiShuType; // 技术等级
nodeProperty[4] = luJiWidth; // 路基宽度
// System.err.println("==========xingZheng===========" + xingZhengType);
// System.err.println("==========luMianType==========" + luMianType);
// System.err.println("==========luMianWidth=========" + luMianWidth);
// System.err.println("==========jiShuType===========" + jiShuType);
// System.err.println("==========luJiWidth===========" + luJiWidth);
return nodeProperty;
}
public static void main(String msg[]) {
ItemValue.setShowDialogMessage(false);
DuanTouRoad dtr = new DuanTouRoad();
dtr.scanDuanTouRoad("D:\\测试用数据\\合肥市\\长丰县");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -