2024年测绘程序设计比赛--空间探索性分析(数据为2025年第三次模拟数据)

想要在2026年参加这个比赛的,可以加入小编和其它大佬所建的群242845175一起来备赛,为2026年的比赛打基础,也可以私信小编,为你答疑解惑

在这里插入图片描述

一、读写文件

internal class Read
{public static List<Point> pts = new List<Point>();public static List<Point> Readfile(string filename){string str;StreamReader sr = new StreamReader(filename);sr.ReadLine();while(!sr.EndOfStream){str=sr.ReadLine();string[]Buf=str.Split(new char[]{','},StringSplitOptions.RemoveEmptyEntries);Point pt = new Point(Buf[0], double.Parse(Buf[1]), double.Parse(Buf[2]), double.Parse(Buf[3]));pts.Add(pt);}return pts;}public static void Savefile(string report){SaveFileDialog sf= new SaveFileDialog();sf.Filter = "文本数据|*.txt";sf.Title = "选择保存路径";sf.FileName = "result";if(sf.ShowDialog() == DialogResult.OK){StreamWriter sw=new StreamWriter(sf.FileName);sw.Write(report);sw.Flush();}}
}

二、数据预处理(分组,数据统计)

在这里插入图片描述
在这里插入图片描述

public static List<List<Point>> ptcode = new List<List<Point>>();
public static List<Point> ptt = Read.pts.OrderBy(p => p.area).ToList();//将每个不同区域的点进行分组public static void Classify()
{double n = 0;List<Point> points = new List<Point>();foreach(Point p in ptt){if (p.area != n){n = p.area;points=new List<Point>();ptcode.Add(points);}points.Add(p);}
}//计算平均中心
public static void Averge(out double avx,out double avy)
{double sumx = Read.pts.Sum(p => p.x);double sumy = Read.pts.Sum(p => p.y);avx = sumx / Read.pts.Count;avy = sumy / Read.pts.Count;
}

三、标准差椭圆计算

在这里插入图片描述
在这里插入图片描述

//计算每个点的标准差
public static void Allcha()
{Averge(out double avx, out double avy);foreach(Point p in Read.pts){p.a = p.x - avx;p.b = p.y - avy;}
}//计算辅助量
public static void Helpword(out double A,out double B,out double C)
{A = 0;B = 0;C = 0;double sumab = 0;double sumA = 0;double sumB = 0;foreach(Point p in Read.pts){sumA += p.a * p.a;sumB += p.b * p.b;sumab += p.a * p.b;}A=sumA-sumB;B=Math.Sqrt(A*A+4*sumab*sumab);C=2*sumab;
}//计算椭圆量
public static void Sdsigema(out double sigema,out double SDEx,out double SDEy)
{sigema = 0;SDEx = 0;SDEy = 0;Helpword(out double A, out double B, out double C);sigema = Math.Atan((A + B) / C);double sumn = 0;double summ = 0;foreach(Point p in Read.pts){sumn += (p.a * Math.Cos(sigema) + p.b * Math.Sin(sigema))* (p.a * Math.Cos(sigema) + p.b * Math.Sin(sigema));summ+= (p.a * Math.Sin(sigema) - p.b * Math.Cos(sigema)) * (p.a * Math.Sin(sigema) - p.b * Math.Cos(sigema));}SDEx=Math.Sqrt(2*sumn/Read.pts.Count);SDEy= Math.Sqrt(2 * summ / Read.pts.Count);
}

四、空间矩阵计算

在这里插入图片描述
在这里插入图片描述
注意公式(5)中的公式有些问题,其分子应为1而非1000,否则与下面答案无法对应

//计算各区的平均中心
public static void Avcenter(List<Point> pts,out double X,out double Y)
{double sumx=pts.Sum(p => p.x);double sumy = pts.Sum(p => p.y);X=sumx/pts.Count;Y=sumy/pts.Count;
}//计算各区之间的空间权重矩阵
public static void Weight(int a,int b,out double weight)
{Avcenter(ptcode[a-1], out double Xa, out double Ya);Avcenter(ptcode[b - 1], out double Xb, out double Yb);if (a == b){weight = 0;}else { weight = 1 / Math.Sqrt((Xa - Xb) * (Xa - Xb) + (Ya - Yb) * (Ya - Yb)); }}

五、莫兰指数计算

在这里插入图片描述
在这里插入图片描述

//计算各区之间的空间权重矩阵
public static void Weight(int a,int b,out double weight)
{Avcenter(ptcode[a-1], out double Xa, out double Ya);Avcenter(ptcode[b - 1], out double Xb, out double Yb);if (a == b){weight = 0;}else { weight = 1 / Math.Sqrt((Xa - Xb) * (Xa - Xb) + (Ya - Yb) * (Ya - Yb)); }}//计算全局莫兰指数
public static void Allmoulan(out double avX, out double I, out double S)
{S = 0;I = 0;avX = (double)Read.pts.Count / (double)ptcode.Count;for (int i = 1; i <= ptcode.Count; i++){for (int j = 1; j <= ptcode.Count; j++){Weight(i, j, out double weight);S += weight;}}double suma = 0;for (int i = 0; i < ptcode.Count; i++){suma += (ptcode[i].Count - avX) * (ptcode[i].Count - avX);}double sumb = 0;for (int i = 0; i < ptcode.Count; i++){for(int j=0; j < ptcode.Count; j++){Weight(i+1, j+1, out double weight);sumb += weight * (ptcode[i].Count-avX)* (ptcode[j].Count - avX);}}I = (7.0 / S) * (sumb / suma);}

在这里插入图片描述

//计算局部莫兰指数
public static void Portmolan(int i,out double Ii,out double Si)
{Allmoulan(out double avX, out double I, out double S);double suma = 0;double sumb = 0;for(int j = 0; j < 7; j++){if ((j+1) == i){continue;}Weight(i, j + 1, out double weight);suma += weight * (ptcode[j ].Count - avX);sumb += (ptcode[j].Count - avX) * (ptcode[j ].Count - avX);}Si = sumb / 6.0;Ii = ((ptcode[i - 1].Count - avX) / Si) * suma;
}

在这里插入图片描述

//计算局部莫兰指数Z得分
public static void Portpoint(out double miu,out double sigema)
{double sumi = 0;for(int i=1; i <= 7; i++){Portmolan(i, out double Ii, out double Si);sumi += Ii;}miu = sumi / 7;double sums = 0;for (int i = 1; i <= 7; i++){Portmolan(i, out double Ii, out double Si);sums += (Ii - miu) * (Ii - miu);}sigema=Math.Sqrt(sums/6.0);}//计算莫兰指数得分
public static void Molan(int i,out double Zi)
{Portmolan( i, out double Ii, out double Si);Portpoint(out double miu, out double sigema);Zi = (Ii - miu) / sigema;
}

六、点的属性

public class Point
{public string name;public double x;public double y;public double area;public double a;public double b;public Point(string name, double x, double y, double area){this.name = name;this.x = x;this.y = y;this.area = area;}public override string ToString(){StringBuilder sb = new StringBuilder();sb.Append(name+" "+x.ToString()+" "+y.ToString()+" "+area.ToString());return sb.ToString();}
}

七、页面交互

public Form1()
{InitializeComponent();openFile.FileOk += openFile_FileOk;
}
public static List<Point> before=new List<Point>();
public string report = null;private void toolStripLabel1_Click(object sender, EventArgs e)
{if (openFile.ShowDialog() == DialogResult.OK){string name=openFile.FileName;before=Read.Readfile(name);dataGridView1.RowCount = before.Count;for(int i = 0; i < before.Count; i++){dataGridView1[0, i].Value = before[i].name;dataGridView1[1, i].Value = before[i].x;dataGridView1[2, i].Value = before[i].y;dataGridView1[3, i].Value = before[i].area;}}
}private void openFile_FileOk(object sender, CancelEventArgs e)
{}private void toolStripLabel2_Click(object sender, EventArgs e)
{report += "1 P6 的坐标 x" + before[5].x.ToString("F3") + "\n";report += "2 P6 的坐标 y " + before[5].y.ToString("F3") + "\n";report += "3 P6 的区号" + before[5].area + "\n";Alspace.Classify();report += "4 1 区(区号为 1)的事件数量 n1 " + Alspace.ptcode[0].Count+"\n";report += "5 4 区(区号为 4)的事件数量 n4 " + Alspace.ptcode[3].Count + "\n";report += "6 6 区(区号为 6)的事件数量 n6 " + Alspace.ptcode[5].Count + "\n";report += "7 事件总数 n" + before.Count+"\n";Alspace.Averge(out double avx, out double avy);report += "8 坐标分量 x 的平均值 X" + avx.ToString("F3") + "\n";report += "9 坐标分量 y 的平均值Y " + avy.ToString("F3") + "\n";Alspace.Allcha();report += "10 P6 坐标分量与平均中心之间的偏移量 a6 " + Read.pts[5].a.ToString("F3") + "\n";report += "11 P6 坐标分量与平均中心之间的偏移量 b6 " + Read.pts[5].b.ToString("F3") + "\n";Alspace.Helpword(out double A, out double B, out double C);report += "12 辅助量 A " + A.ToString("F3") + "\n";report += "13 辅助量 B " + B.ToString("F3") + "\n";report += "14 辅助量 C " + C.ToString("F3") + "\n";Alspace.Sdsigema(out double sigema, out double SDEx, out double SDEy);report += "15 标准差椭圆长轴与竖直方向的夹角�" + sigema.ToString("F3") + "\n";report += "16 标准差椭圆的长半轴" + SDEx.ToString("F3") + "\n";report += "17 标准差椭圆的短半轴" + SDEy.ToString("F3") + "\n";Alspace.Avcenter(Alspace.ptcode[0], out double x1, out double y1);Alspace.Avcenter(Alspace.ptcode[3], out double x4, out double y4);report += "18 1 区平均中心的坐标分量 X" + x1.ToString("F3") + "\n";report += "19 1 区平均中心的坐标分量 Y" + y1.ToString("F3") + "\n";report += "20 4 区平均中心的坐标分量 X" + x4.ToString("F3") + "\n";report += "21 4 区平均中心的坐标分量 Y" + y4.ToString("F3") + "\n";Alspace.Weight(1, 4, out double w14);Alspace.Weight(6, 7, out double w67);report += "22 1 区和 4 区的空间权重w1,4  " + w14.ToString("F6") + "\n";report += "23 6 区和 7 区的空间权重w6,7  " + w67.ToString("F6") + "\n";Alspace.Allmoulan(out double avX, out double I, out double S);report += "24 研究区域犯罪事件的平均值�" + avX.ToString("F6") + "\n";report += "25 全局莫兰指数辅助量" + S.ToString("F6") + "\n";report += "26 全局莫兰指数" + I.ToString("F6") + "\n";Alspace.Portmolan(1,out double I1,out double S1);Alspace.Portmolan(3, out double I3, out double S3);Alspace.Portmolan(5, out double I5, out double S5);Alspace.Portmolan(7, out double I7, out double S7);report += "27 1 区的局部莫兰指数" + I1.ToString("F6") + "\n";report += "28 3 区的局部莫兰指数" + I3.ToString("F6") + "\n";report += "29 5 区的局部莫兰指数" + I5.ToString("F6") + "\n";report += "30 7 区的局部莫兰指数" + I7.ToString("F6") + "\n";Alspace.Portpoint(out double miu, out double sigemaa);report += "31 局部莫兰指数的平均数" + miu.ToString("F6") + "\n";report += "32 局部莫兰指数的标准差" + sigema.ToString("F6") + "\n";Alspace.Molan(1, out double Z1);Alspace.Molan(3, out double Z3);Alspace.Molan(5, out double Z5);Alspace.Molan(7, out double Z7);report += "33 1 区局部莫兰指数的 Z 得分" + Z1.ToString("F6") + "\n";report += "34 3 区局部莫兰指数的 Z 得分" + Z3.ToString("F6") + "\n";report += "35 5 区局部莫兰指数的 Z 得分" + Z5.ToString("F6") + "\n";report += "36 7 区局部莫兰指数的 Z 得分" + Z7.ToString("F6") + "\n";richTextBox1.Text = report;}private void toolStripLabel3_Click(object sender, EventArgs e)
{Read.Savefile(report);
}

八、页面布局

在这里插入图片描述

九、结果

1 P6 的坐标 x92295.323
2 P6 的坐标 y 100520.233
3 P6 的区号4
4 1 区(区号为 1)的事件数量 n1 1408
5 4 区(区号为 4)的事件数量 n4 288
6 6 区(区号为 6)的事件数量 n6 744
7 事件总数 n7754
8 坐标分量 x 的平均值 X95635.466
9 坐标分量 y 的平均值Y 97175.589
10 P6 坐标分量与平均中心之间的偏移量 a6 -3340.143
11 P6 坐标分量与平均中心之间的偏移量 b6 3344.644
12 辅助量 A -501728394.420
13 辅助量 B 60614732934.584
14 辅助量 C -60612656412.248
15 标准差椭圆长轴与竖直方向的夹角 -0.781
16 标准差椭圆的长半轴3954.899
17 标准差椭圆的短半轴94.495
18 1 区平均中心的坐标分量 X95577.112
19 1 区平均中心的坐标分量 Y97233.212
20 4 区平均中心的坐标分量 X95554.001
21 4 区平均中心的坐标分量 Y97263.180
22 1 区和 4 区的空间权重w1,4 0.026424
23 6 区和 7 区的空间权重w6,7 0.003706
24 研究区域犯罪事件的平均值 1107.714286
25 全局莫兰指数辅助量1.019281
26 全局莫兰指数-0.031250
27 1 区的局部莫兰指数-0.046333
28 3 区的局部莫兰指数0.016573
29 5 区的局部莫兰指数0.025204
30 7 区的局部莫兰指数0.026354
31 局部莫兰指数的平均数-0.002412
32 局部莫兰指数的标准差-0.781259
33 1 区局部莫兰指数的 Z 得分-1.360401
34 3 区局部莫兰指数的 Z 得分0.588010
35 5 区局部莫兰指数的 Z 得分0.855335
36 7 区局部莫兰指数的 Z 得分0.890957

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/92409.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/92409.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

力扣 hot100 Day68

84. 柱状图中最大的矩形 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图中&#xff0c;能够勾勒出来的矩形的最大面积。 class Solution { public:int largestRectangleArea(vector<int>&…

生成式AI时代,Data+AI下一代数智平台建设指南

DataAI下一代数智平台建设指南一、生成式AI时代的五大数据挑战二、驱动DataAI平台建设的核心要素主动选择&#xff1a;构建竞争壁垒被动应对&#xff1a;解决现有痛点三、DataAI平台的六大关键能力四、腾讯云DataAI产品方案与实践1. 数据与AI协同层2. 开发与治理层3. 存储与计算…

FPGA学习笔记——SPI通讯协议简介

目录 一、SPI通讯协议简介 二、SPI物理层 三、SPI协议层 1.通讯模式 &#xff08;一&#xff09;模式零 &#xff08;二&#xff09;模式一 &#xff08;三&#xff09;模式二 &#xff08;四&#xff09;模式三 2.通讯流程 一、SPI通讯协议简介 SPI&#xff08;Seria…

JavaScript核心概念解析:从基础语法到对象应用

导语&#xff1a;本文系统梳理JavaScript的核心知识框架&#xff0c;适用于编程入门学习者。内容涵盖基础语法、数据类型、函数应用及内置对象&#xff0c;帮助读者构建清晰的JS知识体系。一、语言基础与执行原理浏览器执行机制渲染引擎&#xff1a;解析HTML/CSS&#xff08;如…

在 Kotlin 中使用函数类型和 lambda 表达式

参考官方文档: https://developer.android.google.cn/codelabs/basic-android-kotlin-compose-function-types-and-lambda?hl=zh-cn#0 1、 将函数存储在变量中 作为一种一级结构,函数也属于数据类型,因此,可以将函数存储在变量中、将函数传递到函数,以及从函数返回函数…

计算机硬件组成原理

&#x1f9e0; 一、计算机的硬件组成&#xff1a;五大核心部件 根据“冯诺依曼体系结构”&#xff0c;现代计算机主要由这 5大部分组成&#xff1a;部件作用通俗解释1️⃣ 运算器&#xff08;ALU&#xff09;负责算术和逻辑运算会加减乘除和做判断的“计算工厂”2️⃣ 控制器&a…

告别 window.open,拥抱全新浮窗体验!

深入了解 Document Picture-in-Picture API&#xff0c;并对比 Modal 的最佳使用场景在前端开发中&#xff0c;我们经常会遇到这样的需求&#xff1a;弹出一个浮动窗口来显示一些实时信息、工具栏或视频内容。过去我们会用 window.open()&#xff0c;后来越来越多的开发者倾向于…

Python爬虫实战:研究weiboSpider技术,构建新浪微博数据采集系统

1. 引言 1.1 研究背景 在信息时代,社交媒体已成为人们获取信息、表达观点的重要渠道。微博作为其中的典型代表,拥有庞大的用户群体和活跃的内容生态。截至 2023 年底,微博月活跃用户数已超过 5.8 亿,日均发博量达数千万条,数据涵盖社会热点、公众情绪、消费偏好等多维度…

HashMap初始化容量为10,还未添加数据时,它的实际容量是多少?

在Java中&#xff0c;当使用 new HashMap<>(10) 初始化一个容量为10的 HashMap 但尚未添加任何数据时&#xff0c;其实际容量&#xff08;底层数组的长度&#xff09;不是10&#xff0c;而是16。原因如下&#xff1a;关键机制解析&#xff1a;容量必须是2的幂HashMap要求…

前端开发:CSS(2)—— 选择器

前面我们初步学习了CSS&#xff0c;对其有了基本的认识。下面我们来具体学习CSS中的选择器。 目录 选择器的种类 1.基础选择器 &#xff08;1&#xff09;标签选择器 &#xff08;2&#xff09;类选择器 &#xff08;3&#xff09;id选择器 &#xff08;4&#xff09;通…

人工智能2.0时代的人才培养和通识教育

目录引言&#xff1a;从"机器模仿"到"智能协同"的时代跨越一、人工智能2.0的技术演进&#xff1a;从规则到大模型的三次跃迁1. 人工智能0.0&#xff08;1956-2006&#xff09;&#xff1a;规则驱动的"专家系统时代"2. 人工智能1.0&#xff08;20…

管理索引常用的API

二.管理索引常用的API 1.查看现有索引信息 查看所有索引信息列表&#xff1a;curl -X GET http://elk101.k8s.com:9200/_cat/indices?v查看某个索引的详细信息:curl -x GET http://elk101.k8s.com:9200/linux-2020-10-2温馨提示: (1)"?v"表示输出表头信息&#xff…

当文档包含表格时,如何结合大模型和OCR提取数据?

在AI应用极速发展的当下&#xff0c;LLM&#xff08;大语言模型&#xff09;与RAG&#xff08;检索增强生成&#xff09;系统已成为构建智能问答、知识管理等高阶应用的核心引擎。 然而&#xff0c;许多团队在项目落地时遭遇了现实的挑战&#xff1a;模型的实际表现——无论是回…

机器学习工程化 3.0:从“实验科学”到“持续交付”的 7 个关卡

一、背景&#xff1a;为什么 90% 的 ML 项目死在了实验台&#xff1f; Gartner 2024 报告显示&#xff0c;87% 的企业机器学习项目未能走出实验室。原因并非算法落后&#xff0c;而是缺少“工程化骨骼”&#xff1a;数据漂移无人发现&#xff0c;模型上线一周就失效&#xff1b…

BGP笔记整理

一、BGP 基础概念1. 产生背景BGP&#xff08;Border Gateway Protocol&#xff09;是自治系统&#xff08;AS&#xff09;间的动态路由协议&#xff0c;属于外部网关协议&#xff08;EGP&#xff09;&#xff0c;用于在不同 AS 之间传递路由信息。2. 自治系统&#xff08;AS&am…

Mysql-MVCC机制

1. MVCC机制详解 在Read Uncommitted级别下&#xff0c;事务总是读取到最新的数据&#xff0c;因此根本用不到历史版本&#xff0c;所以MVCC不在该级别下工作。 在Serializable级别下&#xff0c;事务总是顺序执行。写会加写锁&#xff0c;读会加读锁&#xff0c;完全用不到MVC…

MySQL面试题及详细答案 155道(061-080)

《前后端面试题》专栏集合了前后端各个知识模块的面试题&#xff0c;包括html&#xff0c;javascript&#xff0c;css&#xff0c;vue&#xff0c;react&#xff0c;java&#xff0c;Openlayers&#xff0c;leaflet&#xff0c;cesium&#xff0c;mapboxGL&#xff0c;threejs&…

大数据中需要知道的监控页面端口号都有哪些

以下是一些大数据中常见组件监控页面的端口号&#xff1a;1. Hadoop&#xff1a;HDFS Web UI在Hadoop2.x版本中默认端口为50070&#xff0c;在Hadoop3.x版本中为9870&#xff0c;用于查看集群文件及目录&#xff1b;YARN Web UI端口为8088&#xff0c;可查看MR执行情况&…

时隔六年!OpenAI 首发 GPT-OSS 120B / 20B 开源模型:性能、安全与授权细节全解

为什么这次开放值得关注&#xff1f; OpenAI 时隔六年再次“放权重”&#xff0c;一次性公布 gpt-oss-120b 与 gpt-oss-20b 两个尺寸&#xff0c;并允许商业化二次开发 —— 采用 Apache 2.0 许可且可直接在 Hugging Face 下载(WIRED)。官方表示&#xff0c;开放旨在 降低门槛…

漏洞全讲解之中间件与框架漏洞(数字基础设施的“阿喀琉斯之踵“)

一、中间件漏洞的严峻现状根据Synopsys《2023年开源安全报告》显示&#xff1a;企业应用中平均包含158个中间件依赖高危漏洞年增长率达62%&#xff08;X-Force数据&#xff09;最危险漏洞&#xff1a;Log4j2&#xff08;CVE-2021-44228&#xff09;影响全球83%企业平均修复延迟…