📄 lianxuxiangcun.java
字号:
package net.aetherial.gis.jiaotongbu.outputJTB.prepare.lianxu;
import org.w3c.dom.Node;
import java.util.Vector;
import java.util.Hashtable;
import java.util.Enumeration;
import net.aetherial.gis.surface.ItemValue;
import org.w3c.dom.NodeList;
import net.aetherial.gis.our.FrameOur;
import net.aetherial.gis.garmin.GarminGMLDoc;
import org.w3c.dom.Element;
import java.io.File;
import net.aetherial.gis.output.toLd.OpenDirectory;
import net.aetherial.gis.jiaotongbu.input.publicuse.ReFangxiang;
import net.aetherial.gis.jiaotongbu.input.jxl.ReadFangxiang;
import net.aetherial.gis.jiaotongbu.input.publicuse.Permanence;
import net.aetherial.gis.publicuse.StringOper;
/**
* <p>标题: 农村公路数据采集与核对工具</p>
*
* <p>描述:根据调整方向之后的合并路线,重新按照原有的航迹划分路线 </p>
*
* <p>版权: Copyright (c) 2006</p>
*
* <p>公司: 安徽省通途信息技术公司</p>
*
* @author 王爱国
* @version 1.0
*/
public class LianxuXiangcun {
public LianxuXiangcun() {
}
/**
* 根据调整方向之后的合并路线,重新按照原有的航迹划分路线
*
*/
public void Concate(Node newHebingLuxian) {
Node[] allTrks = ItemValue.getTracks();
/**
* ht存储结构是:
* key value
* | 第1个航迹点 |--| 航迹 |
*/
Hashtable ht = new Hashtable();
NodeList nl = null;
for (int i = 0; allTrks != null && i < allTrks.length; i++) {
if (allTrks[i] != newHebingLuxian) {
nl = ItemValue.getTracksPoint(allTrks[i]);
if (nl != null) {
ht.put(nl.item(0), allTrks[i]);
}
}
}
Node hashKey = null, valueNode = null;
int startLength = 0; //分段开始的位置
nl = ItemValue.getTracksPoint(newHebingLuxian);
for (int i = 0; nl != null && i < nl.getLength(); i++) {
hashKey = this.getHashTableKey(ht, nl.item(i));
if (hashKey != null && i > 0) {
/**
* 开始分段
*/
if (startLength != 0) {
this.createTrack( valueNode, newHebingLuxian,
startLength,
i);
}
valueNode = (Node) ht.get(hashKey);
startLength = i;
}
}
if (valueNode != null) {
this.createTrack( valueNode, newHebingLuxian, startLength,
nl.getLength());
}
this.deletePrimalTracks(ht);
}
private void deletePrimalTracks(Hashtable ht) {
Enumeration keys = ht.keys();
Node key = null;
while (keys.hasMoreElements()) {
key = (Node) keys.nextElement();
ItemValue.removeTrack( (Node) ht.get(key));
}
}
/**
* 根据指定的合并航迹,以及开始和结束位置,生成新航迹
* 新航迹采用例子航迹属性信息
*/
private Node createTrack(Node sampleTrack, Node newHebingLuxian,
int startLength, int endLength) {
Vector tps = new Vector();
NodeList nl = ItemValue.getTracksPoint(newHebingLuxian);
for (int i = 0; nl != null && i < nl.getLength(); i++) {
if (i >= startLength && i <= endLength) {
tps.add(nl.item(i));
}
}
return ItemValue.createNewTrack(tps, sampleTrack);
}
private Node getHashTableKey(Hashtable ht, Node trackpoint) {
Node key = null;
Enumeration keys = ht.keys();
while (keys.hasMoreElements()) {
key = (Node) keys.nextElement();
if (this.isEquals(trackpoint, key)) {
return key;
}
}
return null;
}
/**
* 比较两个航迹点经纬度是否完全相同
*/
private boolean isEquals(Node trackpoint1, Node trackpoint2) {
if (trackpoint1 == null || trackpoint2 == null) {
return false;
}
if (ItemValue.getTracksPointX(trackpoint1).equals(ItemValue.
getTracksPointX(trackpoint2))
&&
ItemValue.getTracksPointY(trackpoint1).equals(ItemValue.
getTracksPointY(trackpoint2))
&&
ItemValue.getTracksPointZ(trackpoint1).equals(ItemValue.
getTracksPointZ(trackpoint2))
) {
return true;
}
else {
return false;
}
}
public static void main(String args[]) {
String input = "E:\\test\\12\\1\\",output = "E:\\test\\12\\2\\";
FrameOur fo = new FrameOur();
ItemValue.setShowDialogMessage(false);
OpenDirectory od = new OpenDirectory();
// ReadFangxiang rf = new ReadFangxiang(od.getZouxiangBiao(input).getAbsolutePath());
// rf.read();
od.setGradeStr("县道|乡道");
File[] gpsFiles = od.getOpenFile(input);
ReFangxiang fangxiang = new ReFangxiang();
// LianxuByConcatedTrack luxians = new LianxuByConcatedTrack();
LianxuByTracks lianxu = new LianxuByTracks();
Vector conTrks = new Vector();
for (int i = 0; i < gpsFiles.length; i++) {
fo.openFile(gpsFiles[i]);
// conTrks = fangxiang.shunxuAFileTrack(gpsFiles[i]);
// ShunxuTracks.shunxuConcatenatedTrack(conTrks);
// luxians.connectedConcatenatedTrack(conTrks);
// fangxiang.shunxuAFile(gpsFiles[i]);
lianxu.connectedTrack(ItemValue.getTracks());
fo.saveFile(StringOper.getReplacePathFile(input,output,gpsFiles[i]));
fo.reset();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -