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

📄 across.java

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