📄 toshape.java
字号:
package net.aetherial.gis.our;
import net.aetherial.gis.dataType.filter.WptTrkFilter;
import javax.swing.*;
import java.io.File;
import net.aetherial.gis.excel.ExcelFilter;
import net.aetherial.gis.surface.ItemValue;
import org.w3c.dom.Node;
import net.aetherial.gis.dataType.ElementToWpt;
import net.aetherial.gis.surface.CreateFile;
import net.aetherial.gis.dataType.ElementToTrk;
import org.w3c.dom.NodeList;
import net.launchtech.util.file.arcgis.shape.*;
import net.launchtech.util.jdbf.*;
import java.util.Date;
import java.io.*;
import java.text.DateFormat;
import java.text.*;
import java.util.*;
/**
* <p>Title: </p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2004</p>
*
* <p>Company: </p>
*
* @author not attributable
* @version 1.0
*/
public class ToShape {
private File wpt = null, trk = null, shp = null;
private static String path = "D:\\GIS\\GPS测量数据\\";
private String fileName = "fileName";
private String errorString = "";
private String addWpt = "";
private String addWptDbf = "";
private String addTrk = "";
private String addTrkDbf = "";
private SimpleDateFormat formatter = new SimpleDateFormat(
"EEE MMM dd HH:mm:ss zzz yyyy",
Locale.US);
private ShapeFileHandler sh_trk = null; //new ShapeFileHandler(ShapeTypes.POLYLINE);
private ShapeFileHandler sh_wpt = null; //new ShapeFileHandler(ShapeTypes.POLYLINE);
private String[] wayPointTypes = {
"", "其他关键点", "起点", "终点", "桥梁", "涵洞", "隧道", "渡口", "行政村", "学校", "自然村",
"道路交汇点"};
private String[] wptFileSuffix = {
"_qit", "_qit", "_qid", "_zhongd", "_qiaol", "_hand", "_suid", "_duk",
"_xinzc", "_xuex", "_zirc", "_jiaochk"};
Hashtable namePairs = new Hashtable();
Hashtable nameSuffix = new Hashtable();
ShapeFileHandler[] shp_wpt_files = new ShapeFileHandler[11];
public ToShape() {
this.fileName = (new File(ItemValue.fileChoosePath)).getName();
try {
JDBField[] fields_wpt = {
new JDBField("ID", 'C', 8, 0),
new JDBField("NAME", 'C', 100, 0),
new JDBField("KP", 'C', 32, 0), //第三个参数值一定不大于20
new JDBField("RWA", 'C', 32, 0), //F类型与N类型同,且第四个参数值有小数位数,否则会截短
new JDBField("RWB", 'C', 32, 0), //F类型与N类型同,且第四个参数值有小数位数,否则会截短
new JDBField("RS", 'C', 32, 0)
};
JDBField[] fields_trk = {
new JDBField("ID", 'C', 8, 0),
new JDBField("RID", 'C', 20, 0),
new JDBField("NAME", 'C', 100, 0),
new JDBField("CITY", 'C', 20, 0), //第三个参数值一定不大于20
new JDBField("COUNTY", 'C', 20, 0), //F类型与N类型同,且第四个参数值有小数位数,否则会截短
new JDBField("TOWN", 'C', 20, 0),
new JDBField("VILLAGE", 'C', 50, 0),
new JDBField("LEVEL", 'C', 10, 0),
new JDBField("TYPE", 'C', 20, 0),
new JDBField("WIDTH", 'C', 20, 0),
new JDBField("STRUCTURE", 'C', 100, 0),
new JDBField("STATUS", 'C', 100, 0),
new JDBField("SDATE", 'D', 8, 0),
new JDBField("EDATE", 'D', 8, 0),
new JDBField("LENGTH", 'N', 20, 6),
new JDBField("STANDARD", 'C', 20, 0)
};
sh_trk = new ShapeFileHandler(fileName + "_trk", ShapeTypes.POLYLINE);
sh_trk.setFields(fields_trk);
//sh_wpt = new ShapeFileHandler(fileName + "_wpt", ShapeTypes.POINT);
//sh_wpt.setFields(fields_wpt);
for (int i = 0; i < shp_wpt_files.length; i++) {
shp_wpt_files[i] = new ShapeFileHandler(fileName + "_wpt",
ShapeTypes.POINT);
shp_wpt_files[i].setFields(fields_wpt);
namePairs.put(wayPointTypes[i + 1], shp_wpt_files[i]);
}
namePairs.put(wayPointTypes[0], shp_wpt_files[0]);
//namePairs.put(wayPointTypes[1],shp_wpt_files[0]);
//namePairs.put(wayPointTypes[2],shp_wpt_files[0]);
for (int i = 0; i < wptFileSuffix.length; i++) {
nameSuffix.put(wayPointTypes[i], wptFileSuffix[i]);
}
}
catch (Exception ex) {
ex.printStackTrace();
}
}
public void save(JFrame jf) {
JFileChooser fileDialog = new JFileChooser();
//WptTrkFilter filter = new WptTrkFilter();
//fileDialog.setFileFilter(filter);
fileDialog.setCurrentDirectory(new File(path));
fileDialog.setSelectedFile(new File(path + "\\" + this.fileName));
int result = fileDialog.showSaveDialog(jf);
if (result == JFileChooser.APPROVE_OPTION) {
File f = fileDialog.getSelectedFile();
//this.path = f.getAbsolutePath();
String path = f.getAbsolutePath();
this.path = f.getParent();
this.fileName = f.getName();
String rex = path.substring(path.length() - 4, path.length());
if (rex.startsWith(".")) {
path = path.substring(0, path.length() - 4);
}
this.path = new File(path).getParent();
getWptString();
getTrkString();
try {
sh_trk.setPath(this.path);
sh_trk.setFileName(this.fileName + "_trk");
sh_trk.save();
for (int i = 0; i < shp_wpt_files.length; i++) {
shp_wpt_files[i].setPath(this.path);
shp_wpt_files[i].setFileName(this.fileName +
(String) nameSuffix.get(wayPointTypes[i +
1]) + "_wpt");
shp_wpt_files[i].save();
}
JOptionPane.showMessageDialog(jf,
"Shape file has been exported successfully!\n");
}
catch (IOException ex) {
ex.printStackTrace();
}
}
}
public void save(File f) {
//this.path = f.getAbsolutePath();
String path = f.getAbsolutePath();
this.path = f.getParent();
this.fileName = f.getName();
String rex = path.substring(path.length() - 4, path.length());
if (rex.startsWith(".")) {
path = path.substring(0, path.length() - 4);
}
this.path = new File(path).getParent();
getWptString();
getTrkString();
try {
sh_trk.setPath(this.path);
sh_trk.setFileName(this.fileName + "_trk");
sh_trk.save();
for (int i = 0; i < shp_wpt_files.length; i++) {
shp_wpt_files[i].setPath(this.path);
shp_wpt_files[i].setFileName(this.fileName +
(String) nameSuffix.get(wayPointTypes[i +
1]) + "_wpt");
shp_wpt_files[i].save();
}
}
catch (IOException ex) {
System.err.println(ex.getMessage());
//ex.printStackTrace();
}
}
public void saveWptTrk(File f) {
String path = f.getAbsolutePath();
String rex = path.substring(path.length() - 4, path.length());
if (rex.startsWith(".")) {
path = path.substring(0, path.length() - 4);
}
wpt = new File(path + ".wpt");
trk = new File(path + ".trk");
CreateFile cfWpt = new CreateFile(wpt);
cfWpt.setEncode("GB2312");
cfWpt.memoryToFile(this.getWptString());
CreateFile cfTrk = new CreateFile(trk);
cfTrk.setEncode("GB2312");
cfTrk.memoryToFile(this.getTrkString());
System.out.println("File saved OK!\n" + wpt.getName() + "\n" + trk.getName());
}
private String getWptString() {
// ElementToWpt etw = new ElementToWpt();
// etw.setHead();
Node[] wpts = ItemValue.getWaypoint();
// int[] pos = ItemValue.getPosition("waypoint");
addWptDbf = "\n.\\dbfcreate " + fileName + "_wpt.dbf " +
"-s ID 16 0, -n NAME 100";
addWpt = "\n.\\shpcreate " + fileName + "_wpt point";
if (wpts != null) {
for (int i = 0; i < wpts.length; i++) {
System.out.println("正在将航点["+ItemValue.getWaypointName(wpts[i])+"]生成SHP.");
// Node node = ItemValue.getWaypointByWaypointPos(pos[i]);
addWpt += "\n.\\shpadd " + fileName + "_wpt " +
ItemValue.getWaypointX(wpts[i]) + " " + ItemValue.getWaypointY(wpts[i]);
PointShp point = new PointShp(Double.parseDouble(ItemValue.getWaypointX(
wpts[i])), Double.parseDouble(ItemValue.getWaypointY(wpts[i])));
sh_wpt = (ShapeFileHandler) namePairs.get(ItemValue.getWaypointKP(wpts[i]));
try {
sh_wpt.addNewShape(point);
}
catch (Exception ex) {
}
Object[] record = {
"" + i, ItemValue.getWaypointName(wpts[i]),
ItemValue.getWaypointKP(wpts[i]),
ItemValue.getWaypointRWa(wpts[i]), ItemValue.getWaypointRWb(wpts[i]),
ItemValue.getWaypointRS(wpts[i])};
try {
sh_wpt.addNewDBFRecord(record);
}
catch (Exception ex1) {
}
addWptDbf += "\n.\\dbfadd " + fileName + "_wpt.dbf " + i + " \"" +
ItemValue.getWaypointName(wpts[i]) + "\"";
//System.out.println(addWpt + "\n" + addWptDbf);
// etw.appendWpt(ItemValue.getWaypointName(wpts[i]),
// ItemValue.getWaypointY(wpts[i]),
// ItemValue.getWaypointX(wpts[i]),
// ItemValue.getWaypointZ(wpts[i]), "");
}
}
// return etw.getResult();
return "";
}
private String getTrkString() {
// ElementToTrk ett = null;
try {
// ett = new ElementToTrk();
// ett.setHead();
Node[] trks = ItemValue.getTracks();
// int[] pos = ItemValue.getPosition("track");
addTrkDbf = "\n.\\dbfcreate " + fileName + "_trk.dbf " +
"-s ID 16 0, -n NAME 100";
addTrk = "\n.\\shpcreate " + fileName + "_trk arc";
for (int i = 0; i < trks.length; i++) {
// Node node = ItemValue.getTracksByPos(i);
System.out.println("正在将航迹["+ItemValue.getTracksName(trks[i])+"]生成SHP.");
NodeList nl = ItemValue.getTracksPoint(trks[i]);
int length = nl.getLength();
if (length > 0) {
// ett.appendTrk(ItemValue.getTracksName(trks[i]), length);
addTrkDbf += "\n.\\dbfadd " + fileName + "_trk.dbf " + i + " \"" +
ItemValue.getTracksName(trks[i]) + "\"";
addTrk += "\n.\\shpadd " + fileName + "_trk ";
PolylineShp track = new PolylineShp();
Object[] record = {
"" + i, //new JDBField("ID", 'C', 8, 0),
ItemValue.getTracksNumber(trks[i]), //new JDBField("RID", 'C', 100, 0),
ItemValue.getTracksName(trks[i]), //new JDBField("NAME", 'C', 100, 0),
ItemValue.getTracksT1(trks[i]), //new JDBField("CITY", 'C', 100, 0), //第三个参数值一定不大于20
ItemValue.getTracksT2(trks[i]), //new JDBField("COUNTY", 'C', 100, 6), //F类型与N类型同,且第四个参数值有小数位数,否则会截短
ItemValue.getTracksT3(trks[i]), //new JDBField("TOWN", 'C', 100, 0),
ItemValue.getTracksT4(trks[i]), //new JDBField("VILLAGE", 'C', 100, 0),
ItemValue.getTracksGrade(trks[i]), //new JDBField("LEVEL", 'C', 100, 0),
ItemValue.getTracksType(trks[i]), //new JDBField("TYPE", 'C', 100, 0),
"".equals(ItemValue.getTracksWidth(trks[i])) ? null :
ItemValue.getTracksWidth(trks[i]), //new JDBField("WEIGHT", 'N', 20, 6),
ItemValue.getTracksStructure(trks[i]), //new JDBField("STRUCTURE", 'C', 100, 0),
ItemValue.getTracksStatus(trks[i]), //new JDBField("STATUS", 'C', 100, 0),
"".equals(ItemValue.
getTracksT6(trks[i])) ? null :
formatter.parse(ItemValue.
getTracksT6(trks[i])), //new JDBField("SDATE", 'D', 8, 0),
"".equals(ItemValue.
getTracksT7(trks[i])) ? null :
formatter.parse(ItemValue.
getTracksT7(trks[i])), //new JDBField("EDATE", 'D', 8, 0)
new Double(ItemValue.getTracksDistance(trks[i])), //new JDBField("LENGTH", 'C', 100, 0),
ItemValue.getTracksT5(trks[i]) //new JDBField("STANDARD", 'C', 100, 0)
};
/*
*/
Node point = null;
String X = "", Y = "", Z = "", Time = "";
for (int j = 0; j < length; j++) {
point = nl.item(j);
X = ItemValue.getTracksPointX(point);
Y = ItemValue.getTracksPointY(point);
// Z = ItemValue.getTracksPointZ(point);
// Time = ItemValue.getTracksPointTime(point);
// System.out.print(" Class ToShape: ");
// ett.appendPoint(Y,X,Z,Time);
track.addPoint(Double.parseDouble(X),
Double.parseDouble(Y));
addTrk += " " + Y + " " +
X;
track.addPoint(Double.parseDouble(X), Double.parseDouble(Y));
}
sh_trk.addNewShape(track);
sh_trk.addNewDBFRecord(record);
//System.out.println(addTrk);
}
else {
this.addErrorString("track point = " + nl.getLength() + " At " +
ItemValue.getTracksName(trks[i]));
}
}
}
catch (NumberFormatException ex) {
ex.printStackTrace();
}
catch (ParseException ex) {
ex.printStackTrace();
}
catch (NullPointerException ex) {
}
return "";
// return ett.getResult();
}
public void addErrorString(String error) {
this.errorString = this.errorString + error + "\r\n";
}
public String getErrorString() {
return this.errorString;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -