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

📄 qyhuafen.java

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