📄 across.java
字号:
package net.aetherial.gis.our.search.across;
import net.aetherial.gis.surface.ItemValue;
import org.w3c.dom.Node;
import net.aetherial.gis.publicuse.track.ConcatenatedTrack;
import java.util.Vector;
import net.aetherial.gis.publicuse.track.ConcatenatedTrackRectangle;
import net.aetherial.gis.jiaotongbu.outputJTB.txtOutput.module.gpsdata.lxld.lx.
LXNodeManager;
import java.util.Enumeration;
import net.aetherial.gis.publicuse.track.ConcatenatedTrackDecussate;
import net.aetherial.gis.our.auto.check.repeattrk.TrackRectangle;
import net.aetherial.gis.publicuse.track.ConTrkOper;
/**
* <p>Title: </p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2004</p>
*
* <p>Company: </p>
*
* @author not attributable
* @version 1.0
*/
public class Across {
private Vector allAcrossTrks = new Vector();
private Vector allDuantouTrks = new Vector();
public Across() {
}
/**
* initAcrossTrks
*
* @param sameNumberTrks Node[]
*/
public void initAcrossTrks() {
allAcrossTrks.clear();
allDuantouTrks.clear();
Vector contrks = ConcatenatedTrack.addTracks(ItemValue.getTracks());
if (contrks.size()>1) {
System.out.println("有异型路:" + contrks.size());
}else{
System.out.println("无异型路:" + contrks.size());
}
if (contrks.size() == 2) {
if (this.isConTrksDuantou( (ConcatenatedTrack) contrks.get(0),
(ConcatenatedTrack) contrks.get(1))) {
this.allDuantouTrks.addAll( ( (ConcatenatedTrack) contrks.get(0)).
getConcatenatedVectorTrack());
this.allDuantouTrks.addAll( ( (ConcatenatedTrack) contrks.get(1)).
getConcatenatedVectorTrack());
}
else {
this.allAcrossTrks.addAll( ( (ConcatenatedTrack) contrks.get(0)).
getConcatenatedVectorTrack());
this.allAcrossTrks.addAll( ( (ConcatenatedTrack) contrks.get(1)).
getConcatenatedVectorTrack());
}
}
else if (contrks.size() >= 2) {
for (int i = 0; i < contrks.size(); i++) {
for (int j = 0; j < contrks.size(); j++) {
if (i != j) {
if (this.isConTrksDuantou( (ConcatenatedTrack) contrks.get(0),
(ConcatenatedTrack) contrks.get(1))) {
this.allDuantouTrks.addAll( ( (ConcatenatedTrack) contrks.get(0)).
getConcatenatedVectorTrack());
this.allDuantouTrks.addAll( ( (ConcatenatedTrack) contrks.get(1)).
getConcatenatedVectorTrack());
}
else {
this.allAcrossTrks.addAll( ( (ConcatenatedTrack) contrks.get(0)).
getConcatenatedVectorTrack());
this.allAcrossTrks.addAll( ( (ConcatenatedTrack) contrks.get(1)).
getConcatenatedVectorTrack());
}
}
}
}
}
// ItemValue.namedTracks.clear();
// ItemValue.numberedTracks.clear();
// new LXNodeManager();
// Vector trks;
// Enumeration keys = ItemValue.namedTracks.keys();
// while (keys.hasMoreElements()) {
// trks = ConcatenatedTrack.addTracks( (Vector) ItemValue.namedTracks.get(
// keys.nextElement()));
// System.out.println(" ConcatenatedTrack.size = " + trks.size());
// if (trks.size() <= 1) {
// return;
// }
// else {
// this.initTrackIsXOrT(trks);
// this.initTrackDuantou(trks);
// }
//
// }
// System.out.println(" ItemValue.namedTracks.size()" +
// ItemValue.namedTracks.size());
// System.out.println(" ItemValue.namedTracks.size()" + ItemValue.namedTracks.size());
}
/**
* isConcatedTrackIsloat
*
* @param trks 指定的连续路线是否独立
* @return boolean
*/
private void initTrackDuantou(Vector trks) {
boolean flag = false;
for (int i = 0; i < trks.size(); i++) {
flag = false;
for (int j = 0; j < trks.size(); j++) {
if (i == j) {
break;
}
if (!this.isTwoRoadT( (ConcatenatedTrack) trks.get(i),
(ConcatenatedTrack) trks.get(j))) {
flag = true;
System.out.println(" Duantou true!");
}
else {
flag = false;
System.out.println(" Duantou false!");
break;
}
}
if (flag) {
System.out.println(" Duantou addAll!");
allDuantouTrks.add( ( (ConcatenatedTrack) trks.get(i)).getFirstTrack());
allDuantouTrks.add( ( (ConcatenatedTrack) trks.get(i)).getLastTrack());
}
}
}
/**
* isConcatedTrackIsloat
*
* @param trks 指定的连续路线是否交叉
* @return boolean
*/
private void initTrackIsXOrT(Vector trks) {
for (int i = 0; i < trks.size(); i++) {
for (int j = i + 1; j < trks.size(); j++) {
if (this.isTwoRoadT( (ConcatenatedTrack) trks.get(i),
(ConcatenatedTrack) trks.get(j))) {
System.out.println(" XOrT true!");
allAcrossTrks.addAll( ( (ConcatenatedTrack) trks.get(i)).
getConcatenatedVectorTrack());
allAcrossTrks.addAll( ( (ConcatenatedTrack) trks.get(j)).
getConcatenatedVectorTrack());
}
else {
System.out.println(" XOrT false!");
}
}
}
}
/**
* isTrkInit
*
* @param trk 指定的航迹是否在所有的T型路线航迹中
* @return boolean
*/
public boolean isTrkInXOrT(Node trk) {
for (int i = 0; allAcrossTrks != null && i < allAcrossTrks.size(); i++) {
if ( ( (Node) allAcrossTrks.get(i)) == trk) {
return true;
}
}
return false;
}
/**
* isTrkInit
*
* @param trk 指定的航迹是否在所有的T型路线航迹中
* @return boolean
*/
public boolean isTrkInDuantou(Node trk) {
for (int i = 0; allDuantouTrks != null && i < allDuantouTrks.size(); i++) {
if ( ( (Node) allDuantouTrks.get(i)) == trk) {
return true;
}
}
return false;
}
public boolean isConTrksDuantou(ConcatenatedTrack A, ConcatenatedTrack B) {
String gradeA = A.getGrade().trim();
String gradeB = B.getGrade().trim();
boolean isRoadT = this.isTwoRoadT(A, B);
if (!isRoadT) {
return true;
}
else {
if (gradeA.equals(gradeB) && gradeA.endsWith("乡道")) {
if (ConTrkOper.getConTrksDis(A, B) < TrackRectangle.NEAR_DISTANCE * 5) {
return true;
}
else {
return false;
}
}
else if (gradeA.equals(gradeB) && gradeA.endsWith("县道")) {
if (ConTrkOper.getConTrksDis(A, B) < TrackRectangle.NEAR_DISTANCE * 50) {
return true;
}
else {
return false;
}
}
else {
return false;
}
}
}
/**
* isTwoRoadT
*
* @param A ConcatenatedTrack
* @param B ConcatenatedTrack
* @return boolean
*/
private boolean isTwoRoadT(ConcatenatedTrack A, ConcatenatedTrack B) {
if (A.equals(B)) {
return false;
}
System.out.println(" A:" + A.getConcatenatedName());
System.out.println(" B:" + B.getConcatenatedName());
ConcatenatedTrackRectangle a1 = new ConcatenatedTrackRectangle(A);
ConcatenatedTrackRectangle b2 = new ConcatenatedTrackRectangle(B);
if (a1.isIntersect(b2)) {
return isJiaocha(A, B);
}
else if (b2.isIntersect(a1)) {
return isJiaocha(A, B);
}
else {
return false;
}
}
/**
* 判断端点之间最小是否小于1000米
*/
private boolean isDuandianLess1000Meter(ConcatenatedTrack A,
ConcatenatedTrack B) {
Node a1 = A.getFirstTrackPoint();
Node a2 = A.getLastTrackPoint();
Node b1 = B.getFirstTrackPoint();
Node b2 = B.getLastTrackPoint();
double minDis = Double.MAX_VALUE;
try {
minDis = Math.min(minDis, this.getDisOfTp(a1, b1));
}
catch (Exception ex) {
}
try {
minDis = Math.min(minDis, this.getDisOfTp(a1, b2));
}
catch (Exception ex1) {
}
try {
minDis = Math.min(minDis, this.getDisOfTp(a2, b1));
}
catch (Exception ex2) {
}
try {
minDis = Math.min(minDis, this.getDisOfTp(a2, b2));
}
catch (Exception ex3) {
}
if (minDis < (TrackRectangle.NEAR_DISTANCE * 50)) {
return true;
}
else {
return false;
}
}
private double getDisOfTp(Node trackpoint1, Node trackpoint2) throws
Exception {
double wpt_x = Double.parseDouble(ItemValue.getTracksPointX(trackpoint1));
double wpt_y = Double.parseDouble(ItemValue.getTracksPointY(trackpoint1));
double tp_x = Double.parseDouble(ItemValue.getTracksPointX(trackpoint2));
double tp_y = Double.parseDouble(ItemValue.getTracksPointY(trackpoint2));
return Math.sqrt( (wpt_x - tp_x) * (wpt_x - tp_x) +
(wpt_y - tp_y) * (wpt_y - tp_y));
}
private boolean isJiaocha(ConcatenatedTrack A, ConcatenatedTrack B) {
ConcatenatedTrackDecussate trkdec = new ConcatenatedTrackDecussate();
trkdec.setTrack1(A);
trkdec.setTrack2(B);
return trkdec.isTLink();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -