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

📄 lianxuxiangcun.java

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