📄 qyhuafen.java
字号:
package net.aetherial.gis.jiaotongbu.outputJTB.prepare.huafen.quyu;
import org.w3c.dom.Node;
import java.util.Vector;
import java.util.Hashtable;
import java.util.Enumeration;
import net.aetherial.gis.surface.ItemValue;
import java.io.File;
import net.aetherial.gis.our.auto.check.repeattrk.TrackRectangle;
import net.aetherial.gis.publicuse.track.CutByAppointWPT;
import net.aetherial.gis.jiaotongbu.outputJTB.prepare.huafen.AWPTsDepth;
import net.aetherial.gis.publicuse.wpt.WPTsTrack;
import net.aetherial.gis.publicuse.WptTrackDistance;
import net.aetherial.gis.publicuse.wpt.ChuiZu;
import net.aetherial.gis.dataType.WptType;
/**
* <p>标题: 农村公路数据采集与核对工具</p>
*
* <p>描述: </p>
*
* <p>版权: Copyright (c) 2006</p>
*
* <p>公司: 安徽省通途信息技术公司</p>
*
* @author 王爱国
* @version 1.0
*/
public class QYHuafen {
private String fileNumber = "";
/**
* 范围 初步定在500米,待核定
*/
private static final double Fenjiedian_Track_NearDis = TrackRectangle.
NEAR_DISTANCE * 25.0;
public QYHuafen() {
}
/**
* 按 表-8.xls 划分航迹
*
*/
public void huafen() {
CutByAppointWPT cut = null;
Vector fenjiePoint = this.createFenjieWaypoint();
Hashtable ht = this.getFenjiedianGuanxi(fenjiePoint);
Enumeration keys = ht.keys();
Node key = null;
Vector value = null;
while (keys.hasMoreElements()) {
key = (Node) keys.nextElement();
value = (Vector) ht.get(key);
cut = new CutByAppointWPT();
cut.setBeenCutTrack(key);
cut.addWpts(AWPTsDepth.getNewShunxuWpts(value, key));
cut.cut();
}
}
/**
* 按分界点产生新的航点
*/
private Vector createFenjieWaypoint() {
FenjieRow[] frs = Permance.getFenjieRows(this.fileNumber);
Vector temp = new Vector();
Node fjNode = null;
for (int i = 0; i < frs.length; i++) {
frs[i].getLat();
fjNode = ItemValue.createNewWaypoint(frs[i].getFirstXiangzhen() + "-" +
frs[i].getLastXiangzhen(),
frs[i].getLon() + "",
frs[i].getLat() + "",
"0");
ItemValue.setWaypointKP(fjNode,WptType.W16_Xiangjie);
temp.add(fjNode);
}
return temp;
// Node[] fjnodes = new Node[temp.size()];
// temp.copyInto(fjnodes);
// return fjnodes;
}
/**
* 根据分界航点,找出当前最近的航迹,并检查他们之间的距离,如果大于指定的距离,则删除该分界点
*
* 返回Hastable key = "航迹",value = "分界点Vector"
*/
private Hashtable getFenjiedianGuanxi(Vector fenjiedians) {
Node fenjiedian = null;
Node trk = null;
Hashtable ht = new Hashtable();
Node[] allTrks = ItemValue.getTracks();
for (int i = 0; i < fenjiedians.size(); i++) {
fenjiedian = (Node) fenjiedians.get(i);
trk = WPTsTrack.getWptMostNearTrack(fenjiedian, allTrks);
if (trk != null && this.isNear(fenjiedian, trk)) {
this.moveWaypointToTrack(fenjiedian, trk);
ht.put(fenjiedian, trk);
}
}
return this.getNewHashtable(ht);
}
/**
* 是否很相近,范围是
*/
private boolean isNear(Node waypoint, Node track) {
double dis = WptTrackDistance.getWptToTrackDis(waypoint, track);
if (dis > this.Fenjiedian_Track_NearDis) {
return false;
}
else {
return true;
}
}
/**
* 将Hashtable重排,形成新的hashtable
* 将key = "分界点",value = "航迹" 的哈希表转换成
* key = "航迹",value = "分界点Vector"
*/
private Hashtable getNewHashtable(Hashtable oldHashtable) {
Hashtable ht = new Hashtable();
Enumeration keys = oldHashtable.keys();
Node key = null, value = null;
while (keys.hasMoreElements()) {
key = (Node) keys.nextElement();
value = (Node) oldHashtable.get(key);
this.addToHashtable(ht, value, key);
}
return ht;
}
private void addToHashtable(Hashtable ht, Node track, Node waypoint) {
Enumeration keys = ht.keys();
Node key = null;
Vector value = null;
boolean find = false;
while (keys.hasMoreElements()) {
key = (Node) keys.nextElement();
if (key == track) {
find = true;
value = (Vector) ht.get(key);
break;
}
}
if (!find) {
value = new Vector();
value.add(waypoint);
ht.put(track, value);
}
else {
value.add(waypoint);
}
}
/**
* 将分界航点移位至航迹上
*/
private void moveWaypointToTrack(Node waypoint, Node track) {
ChuiZu.moveToChuizu(waypoint, track);
}
public void setFile(File gpsFile) {
this.fileNumber = gpsFile.getName().toUpperCase().trim().replaceAll(".GPS","");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -