-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDraft.java
More file actions
186 lines (157 loc) · 8.59 KB
/
Copy pathDraft.java
File metadata and controls
186 lines (157 loc) · 8.59 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
package heyingzhe;
import java.io.*;
import java.sql.*;
import java.util.Arrays;
import java.util.Date;
import java.awt.Color;
import java.text.SimpleDateFormat;
//一些必要的库
import java.nio.file.Path;
import java.nio.file.Paths;
//自己编写的插值函数
import static heyingzhe.IDWInterpolation.idwInterpolation;
import static heyingzhe.KrigingInterpolation.krigingInterpolation;
import static heyingzhe.SplineInterpolation.splineInterpolation;
public class Draft {
public static void processing(String mainDirectory, String outPutDirectory, String dbUserName, String dbPassword,
String startDate, String endDate) throws SQLException, ClassNotFoundException, IOException {
/**
* 文件目录结构:
*
* ├── mainDirectory/
* │ ├── dem.tif // dem影像
* │ |── rainFlow.txt // 各站点各日期降雨量数据
* │ |── stationProperty.txt // 各站点的编码、经纬度、名字等基本信息
* │ └── dem.asc // dem影像生成的asc文件
* ├── outPutDiretory/
* │ └──
*
* 注意:
* 1. 请确保文件路径正确,避免配置错误。
* 2. 在运行程序前,请检查相关文件是否存在并符合格式要求。
*/
String demTifPath = "dem.tif";
String rainFallDataPath = "rainFlow.txt";
String stationsDataPath = "stationProperty.txt";
String demASCIIPath = "dem.asc";
// 输出文件,不用配置,仅配置上方文件即可
String outputImageFormat = ".png";
String outputASCFormat = ".asc";
String outputDemPath = "outputDem";
String outputFilledDemPath = "outputFilledDem";
String outputSlopePath = "outputSlope";
String outputAccFlowPath = "outputAccFlow";
String outputWaterAreaPath = "outputWaterArea";
String outputFlowDirectionPath = "outputFlowDirection";
String outputRiverLinePath = "outputRiverLine";
String outputIDWImage = "outputIDW";
String outputKrigImage = "outputKriging";
String outputSplineImage = "outputSpline";
// 完整的文件输入路径
demTifPath = Paths.get(mainDirectory, demTifPath).toAbsolutePath().toString();
rainFallDataPath = Paths.get(mainDirectory, rainFallDataPath).toAbsolutePath().toString();
stationsDataPath = Paths.get(mainDirectory, stationsDataPath).toAbsolutePath().toString();
demASCIIPath = Paths.get(mainDirectory, demASCIIPath).toAbsolutePath().toString();
//读取dem
ReadDEM demReader = new ReadDEM(demASCIIPath);
int[][] dem = demReader.getData();
//读取站点降水数据为二维数组
GetGrid gridReader = new GetGrid(dem, demASCIIPath, stationsDataPath, rainFallDataPath);
// 初始化日期格式
String[] DateArray1 = new DateProcessing().createDateArray1(startDate, endDate); // 格式 "2023-07-08"
String[] DateArray2 = new DateProcessing().createDateArray2(startDate, endDate); // 格式 "20230708"
String[] example = {"2023-07-01"};
/**
* 项目运算框架前准备
* 1 输出图像类预定义
* 2 云储存(Mysql数据库)预定义
*/
// 图像输出
ImageVisualizer imageVision = new ImageVisualizer();
Color startColor = Color.decode("#ffd89b"); //数值低为蓝色
Color endColor = Color.decode("#19547b"); //数值高为红色
// 配置数据库
SaveResult saveProcessing = new SaveResult();
saveProcessing.setMySQLProperty("heyingzhe", "1234");
System.out.println("你已确认数据库用户名和密码!");
saveProcessing.createDatabase("result");
System.out.println("数据库result创建成功!");
for (String oneDay: example) {
/**
* 项目运算框架
* 本程序的目标是通过分析给定的输入地理数据,执行相关的水文计算和数据插值处理,
* 最终输出处理结果。
*
* 主要步骤:
* 1. 初始化系统环境,包括配置文件和依赖的资源。
* 2. 从输入源加载数据。
* 3. 执行数据处理算法。
* 4. 输出结果并结束程序。
*/
// 插值运算
double[][] originGridData = gridReader.createSitesArray(oneDay); //初始站点网格数据
new IDWThread(originGridData, outPutDirectory, outputIDWImage + outputImageFormat, startColor, endColor, dbUserName,
dbPassword).start();
// 水文分析计算
System.out.println("正在进行填洼计算……");
DepressionFilling depressionFilling = new DepressionFilling(); //填洼
int[][] filledDem = depressionFilling.fillDepressions(dem);
System.out.println("填洼计算完成");
// dem图像输出
imageVision.convertArrayToImage(dem); //保存dem
imageVision.saveImage(Paths.get(outPutDirectory, outputDemPath + outputImageFormat).toString(), "png");
imageVision.convertArrayToImage(filledDem); //保存填洼dem
imageVision.saveImage(Paths.get(outPutDirectory, outputFilledDemPath + outputImageFormat).toString(), "png");
//流向计算
System.out.println("正在进行流向计算……");
FlowDirection flowDirection = new FlowDirection(); //流向计算
int[][] flowDirectionArray = flowDirection.calculateFlowDirection(filledDem);
//FlowDirectionUpdater updater = new FlowDirectionUpdater(); //流向更新
//int[][] flowDirectionArray = updater.updateFlowDirection(filledDem, flow);
System.out.println("流向计算完成");
//流向图输出
imageVision.createFlowDirectionImage(flowDirectionArray);
imageVision.saveImage(Paths.get(outPutDirectory, outputFlowDirectionPath + outputImageFormat).toString(), "png");
//河流线提取
imageVision.extractRiverLines(filledDem, flowDirectionArray, 150);
imageVision.saveImage(Paths.get(outPutDirectory, outputRiverLinePath + outputImageFormat).toString(), "png");
//储存数据到数据库
System.out.println("正在将水文计算结果上传至数据库……");
saveProcessing.createTable("result", "flowdirection"); //创建流向表格
saveProcessing.saveArrayToMySQL(flowDirectionArray, "flowdirection");
System.out.println("flowdirection数据已经添加到数据库里面");
/**
int height1 = originGridData.length;
int width1 = originGridData[0].length;
double[][] array = new double[height1][width1];
// 遍历二维数组,修改小于等于0的数值为1
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[0].length; j++) {
array[i][j] = 1;
}
}
*/
double[][] idwInterpolationResult = idwInterpolation(originGridData, 2); //IDW插值的结果
// 遍历二维数组,修改小于等于0的数值为1
for (int i = 0; i < idwInterpolationResult.length; i++) {
for (int j = 0; j < idwInterpolationResult[0].length; j++) {
if (idwInterpolationResult[i][j] <= 0) {
idwInterpolationResult[i][j] = 1.0;
}
}
}
new AccFlowThread(dem, filledDem, flowDirectionArray, idwInterpolationResult, outPutDirectory,
outputAccFlowPath + outputImageFormat, outputWaterAreaPath + outputImageFormat, dbUserName,
dbPassword).start();
}
}
public static void main(String[] args) throws SQLException, ClassNotFoundException, IOException {
String allFilesDir = "D:\\FILE\\User\\English_Dir\\Icity";
String allFilesOutputDir = "D:\\FILE\\User\\English_Dir\\IcityOutput";
String databaseUserName = "heyingzhe";
String databasePassword = "1234";
String startDate = "2023-07-01";
String endDate = "2023-07-31";
processing(allFilesDir, allFilesOutputDir, databaseUserName, databasePassword, startDate, endDate);
}
}