⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 duantouroad.java

📁 基于Java的地图数据管理软件。使用MySQL数据库管理系统。
💻 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 + -