测绘程序设计大赛心得
经验分享
核心要点
测绘程序设计比赛由于是比较新的比赛,比赛难度实际不大,主要就是考察文件的读写、把书面公式转为逻辑代码的能力。
需要把几个部分分开,这样很好分清自己的代码逻辑
- 算法类,专门实现需要翻译的算法部分(Algo.cs)
- 实体类,根据题目需求创建对应的实体,并合理管理其方法和属性(Entity.cs)
- 工具类,存放如文件读写、数学函数、日期函数等辅助方法(Utils.cs)
- 窗体类,主页面部分,实现页面交互功能(Form.cs)
赛题分析
2024年的测绘程序设计比赛的题目是
空间数据探索性分析
,考察计算莫兰指数。代码仓库
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/// <summary>
/// 莫兰指数计算
/// </summary>
/// <param name="data"></param>
public static void MoranIndex(List<Point> data)
{
int N = 7;
//研究区域犯罪事件的平均值
meanX_Moran = (double)data.Count / N;
double over = 0, under = 0;
for (int i = 0; i < N; i++)
{
under += Math.Pow(counts[i] - meanX_Moran, 2);
for (int j = 0; j < N; j++)
{
S0 += weightMartix[i, j];
over += weightMartix[i, j] * (counts[i] - meanX_Moran) * (counts[j] - meanX_Moran);
}
}
I = (N / S0) * (over / under);
}
/// <summary>
/// 局部莫兰指数计算
/// </summary>
/// <param name="code"></param>
public static void MoranIndex_(int code)
{
//局部莫兰指数的计算
int N = 7;
//传入区域号为code 即为i = code-1
double over2 = 0, right = 0;
for (int j = 0; j < N; j++)
{
//j!=i
if (j == (code - 1))
{
continue;
}
else
{
over2 += Math.Pow(counts[j] - meanX_Moran, 2);
right += weightMartix[code - 1, j] * (counts[j] - meanX_Moran);
}
}
Si = over2 / (N - 1);
Ii[code - 1] = right * (counts[code - 1] - meanX_Moran) / Si / 1000;
}
/// <summary>
/// 计算局部莫兰指数的Z得分
/// </summary>
/// <param name="Ii"></param>
public static void CalculateZScore(double[] I)
{
int N = 7;
double over = 0;
double over2 = 0;
foreach(var i in I)
{
over += i;
}
u = over / N;
foreach(var i in I)
{
over2 += Math.Pow(i - u, 2);
}
o = Math.Sqrt(over2 / (N - 1));
for (int i = 0; i < N; i++)
{
Zi[i] = (I[i] - u) / o;
}
}
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Hanxian's Blog!
评论