2025年測繪程序設計模擬賽一--地形圖圖幅編號及圖廓點經緯度計算

想要在2026年參加這個比賽的,可以加入小編和其它大佬所建的群242845175一起來備賽,為2026年的比賽打基礎,也可以私信小編,為你答疑解惑
在這里插入圖片描述

一、讀取文件

這里有兩種文件需要讀取,所以要額外處理

internal class Read
{public static List<Point> Points = new List<Point>();public static List<Point> BLdms = new List<Point>();public static List<Point> Newmap = new List<Point>();public static List<Point> ReadfileBL(string filename){string str;StreamReader sr = new StreamReader(filename);while(!sr.EndOfStream){str = sr.ReadLine();string[]Buf= str.Split(new char[] { ',', '\t', ' ' }, StringSplitOptions.RemoveEmptyEntries);Point pt=new Point(Buf[0], double.Parse(Buf[1]), double.Parse(Buf[2]));Points.Add(pt);BLdms.Add(pt);}return Points;}public static List<Point> ReadfileNewmap(string filename){string str;StreamReader sr = new StreamReader(filename);while (!sr.EndOfStream){str = sr.ReadLine();string[] Buf = str.Split(new char[] { ',', '\t', ' ' }, StringSplitOptions.RemoveEmptyEntries);Point pt = new Point(int.Parse(Buf[0]), Buf[1]);Points.Add(pt);Newmap.Add(pt);}return Points;}
}

二、度與dms之間的轉化

public static double dL_100w = dms_rad(6);
public static double dB_100w = dms_rad(4);
public static double dL_50w=dms_rad(3);
public static double dB_50w=dms_rad(2);
public static double dL_25w = dms_rad(1.30);
public static double dB_25w = dms_rad(1);
public static double dL_10w = dms_rad(0.30);
public static double dB_10w = dms_rad(0.20);
public static double dL_5w = dms_rad(0.15);
public static double dB_5w = dms_rad(0.10);
public static double dL_2d5w = dms_rad(0.073);
public static double dB_2d5w = dms_rad(0.05);
public static double dL_1w = dms_rad(0.0345);
public static double dB_1w = dms_rad(0.0230);
public static double dL_5k = dms_rad(0.01525);
public static double dB_5k = dms_rad(0.0115);
public static double dL_2k = dms_rad(0.00375);
public static double dB_2k = dms_rad(0.0025);
public static double dL_1k = dms_rad(0.001875);
public static double dB_1k = dms_rad(0.00125);
public static double dL_5b = dms_rad(0.0009375);
public static double dB_5b = dms_rad(0.000625);//dms轉化為度進制
public static double dms_rad(double dms)
{int a = (int)dms;double b = (int)((dms - a) * 100) * 60;double c = ((int)(dms * 10000 % 100) + b) / 3600;return (a+c);}
//十進制轉化為dms
public static double rad_dms(double rad)
{double d = (int)rad;double m = (int)((rad - d) * 60);double s = ((rad - d) * 60 - m) * 60;double dms = d + m / 100 + s / 10000;if (s >= 59.999)//出現了 115度30分60秒的結果錯誤{dms = dms - 0.0060 + 0.01;if (m + 1 >= 59.999){dms = dms + 1 - 0.60;}}return dms;
}

三、經緯度轉化為新版圖幅

在這里插入圖片描述

 public static void avg(){double sumb = 0;double suml = 0;for (int i = 0; i < Read.BLdms.Count; i++){sumb += Read.BLdms[i].B_dms;suml += Read.BLdms[i].L_dms;}Point avgpt = new Point("avg", sumb / Read.BLdms.Count, suml / Read.BLdms.Count);Read.BLdms.Add(avgpt);}public static void Selectnumber(double scale,out double dertaB,out double dertaL,out string sc){dertaB = 0;dertaL = 0;sc = null;switch (scale){case 1000000:dertaB = dB_100w;dertaL=dL_100w;sc = "A";break;case 500000:dertaB = dB_50w;dertaL=dL_50w;sc = "B";break;case 250000:dertaB = dB_25w;dertaL=dL_25w;sc = "C";break;case 100000:dertaB = dB_10w;dertaL=dL_10w;sc = "D";break;case 50000:dertaB = dB_5w;dertaL=dL_5w;sc = "E";break;case 25000:dertaB = dB_2d5w;dertaL=dL_2d5w;sc = "F";break;case 10000:dertaB = dB_1w;dertaL=dL_1w;sc = "G";break;case 5000:dertaB = dB_5k;dertaL = dL_5k;sc = "H";break;case 2000:dertaB = dB_2k;dertaL=dL_2k;sc = "I";break;case 1000:dertaB = dB_1k;dertaL=dL_1k;sc = "J";break;case 500:dertaB = dB_5b;dertaL=dL_5b;sc = "K";break;}}//把經緯度轉化為新版圖幅public static void Bl_newmap(Point point){Selectnumber(point.scale, out double dertaB, out double dertaL,out string sc);int a = (int)(point.B_rad / 4) + 1;char c = (char)(a - 'A' + 1);int b = (int)(point.L_rad / 6) + 31;int m = (int)((point.L_rad % 6)/dertaL)+1;string e = m.ToString();string f = null;string h = null;int n =(int) (4/dertaB)-(int)((point.B_rad % 4)/dertaB);string g=n.ToString();if (point.scale == 1000 || point.scale == 500){f = e.PadLeft(4, '0');h = g.PadLeft(4, '0');}else{f = e.PadLeft(3, '0');h = g.PadLeft(3, '0');}point.newmap=a.ToString()+b.ToString()+sc.ToString()+h.ToString()+f.ToString(); }

四、新版圖幅轉化為西南角經緯度

在這里插入圖片描述

public static void Selectid(string id, out double dertaB, out double dertaL, out double scale)
{dertaB = 0;dertaL = 0;scale = 0;switch (id){case "A":dertaB = dB_100w;dertaL = dL_100w;scale = 1000000;break;case "B":dertaB = dB_50w;dertaL = dL_50w;scale = 500000;break;case "C":dertaB = dB_25w;dertaL = dL_25w;scale = 250000;break;case "D":dertaB = dB_10w;dertaL = dL_10w;scale = 10000;break;case "E":dertaB = dB_5w;dertaL = dL_5w;scale=50000;break;case "F":dertaB = dB_2d5w;dertaL = dL_2d5w;scale = 25000;break;case "G":dertaB = dB_1w;dertaL = dL_1w;scale = 10000;break;case "H":dertaB = dB_5k;dertaL = dL_5k;scale = 5000;break;case "I":dertaB = dB_2k;dertaL = dL_2k;scale = 2000;break;case "J":dertaB = dB_1k;dertaL = dL_1k;scale = 1000;break;case "K":dertaB = dB_5b;dertaL = dL_5b;scale = 500;break;}}public static void Nmap_bl(Point point)
{string nem = point.newmap;int line_100 = (int)(nem[0] - 'A' + 1);int up_100=int.Parse(nem.Substring(1,2));point.lin_100=line_100;point.u_100=up_100;point. B_100=(line_100-1) * 4;point. L_100 = (up_100 - 31) * 6;string c = nem[3].ToString();Selectid(c, out double dertaB, out double dertaL, out double scale);point.scale = scale;int n=(int)(4/dertaB);double cc = 0;double d = 0;if (point.scale == 1000 || point.scale == 500){cc=int.Parse(nem.Substring(4,4));d=int.Parse(nem.Substring(8, 4));}else{cc = int.Parse(nem.Substring(4, 3));d = int.Parse(nem.Substring(7, 3));}point.leftdownB=point.B_100+dertaB*(n-cc);point.leftdownL = point.L_100 + dertaL * (d - 1);point.rightdownB = point.leftdownB;point.rightdownL = point.leftdownL + dertaL;point.leftupB = point.leftdownB + dertaB;point.leftupL = point.leftdownL;point.rightupL = point.leftdownL + dertaL;point.rightupB=point.leftdownB + dertaB;
}

五、事件交互

public partial class Form1 : Form
{public Form1(){InitializeComponent();openFile.FileOk += openFile_FileOk;}public static List<Point> bBLdms= new List<Point>();public static List<Point> bNewmap= new List<Point>();public string report = null;private void openFile_FileOk(object sender, CancelEventArgs e){}private void toolStripLabel1_Click(object sender, EventArgs e){if(openFile.ShowDialog() == DialogResult.OK){string file=openFile.FileName;Read.ReadfileBL(file);bBLdms=Read.BLdms;dataGridView1.RowCount = bBLdms.Count;for(int i=0;i<bBLdms.Count;i++) {dataGridView1[0, i].Value = bBLdms[i].name;dataGridView1[2, i].Value = bBLdms[i].B_dms;dataGridView1[3, i].Value = bBLdms[i].L_dms;}}}private void toolStripLabel2_Click(object sender, EventArgs e){if (openFile.ShowDialog() == DialogResult.OK){string file = openFile.FileName;Read.ReadfileNewmap(file);bNewmap = Read.Newmap;dataGridView2.RowCount = bNewmap.Count;for (int i = 0; i < bNewmap.Count; i++){dataGridView2[1, i].Value = bNewmap[i].ID;dataGridView2[4, i].Value = bNewmap[i].newmap;}}}private void toolStripLabel3_Click(object sender, EventArgs e){Alth.avg();report +=  Read.BLdms[0].L_dms.ToString("F5")+"\n";report += Read.BLdms[2].B_dms.ToString("F5")+"\n";report += Read.BLdms[2].L_rad.ToString("F6")+"\n";report += Read.BLdms[2].B_rad.ToString("F6") + "\n";report += Alth.rad_dms(Read.BLdms[3].B_rad).ToString("F6") + "\n";report += Alth.rad_dms(Read.BLdms[3].L_rad).ToString("F6") + "\n";report += Read.BLdms[3].B_rad.ToString("F6") + "\n";report += Read.BLdms[3].L_rad.ToString("F6") + "\n";Read.BLdms[3].scale = 250000;Alth.Bl_newmap(Read.BLdms[3]);report += Read.BLdms[3].newmap.Substring(4, 3)+"\n";report += Read.BLdms[3].newmap.Substring(7, 3)+"\n";Read.BLdms[3].scale = 500;Alth.Bl_newmap(Read.BLdms[3]);report += Read.BLdms[3].newmap.Substring(4, 4) + "\n";report += Read.BLdms[3].newmap.Substring(8, 4) + "\n";richTextBox1.Text = report;}private void toolStripLabel5_Click(object sender, EventArgs e){Alth.Nmap_bl(Read.Newmap[0]);report += Read.Newmap[0].lin_100 + "\n";report += Read.Newmap[0].u_100 + "\n";Alth.Nmap_bl(Read.Newmap[1]);report += Read.Newmap[1].lin_100 + "\n";report += Read.Newmap[1].u_100 + "\n";report += Read.Newmap[0].scale + "\n";report += Read.Newmap[1].scale + "\n";report += Alth.rad_dms(Read.Newmap[0].leftdownL).ToString("F5")+ "\n";report += Alth.rad_dms(Read.Newmap[0].leftdownB).ToString("F5") + "\n";report += Alth.rad_dms(Read.Newmap[1].leftdownL).ToString("F5") + "\n";report += Alth.rad_dms(Read.Newmap[1].leftdownB).ToString("F5") + "\n";report += Alth.rad_dms(Read.Newmap[0].rightdownL).ToString("F5") + "\n";report += Alth.rad_dms(Read.Newmap[0].rightdownB).ToString("F5") + "\n";report += Alth.rad_dms(Read.Newmap[0].rightupL).ToString("F5") + "\n";report += Alth.rad_dms(Read.Newmap[0].rightupB).ToString("F5") + "\n";report += Alth.rad_dms(Read.Newmap[0].leftupL).ToString("F5") + "\n";report += Alth.rad_dms(Read.Newmap[0].leftupB).ToString("F5") + "\n";report += Alth.rad_dms(Read.Newmap[1].rightdownL).ToString("F5") + "\n";report += Alth.rad_dms(Read.Newmap[1].rightdownB).ToString("F5") + "\n";report += Alth.rad_dms(Read.Newmap[1].rightupL).ToString("F5") + "\n";report += Alth.rad_dms(Read.Newmap[1].rightupB).ToString("F5") + "\n";report += Alth.rad_dms(Read.Newmap[1].leftupL).ToString("F5") + "\n";report += Alth.rad_dms(Read.Newmap[1].leftupB).ToString("F5") + "\n";richTextBox1.Text = report;}private void toolStripLabel4_Click(object sender, EventArgs e){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();}}
}

六、頁面布局

在這里插入圖片描述

七、結果

114.12353
35.30250
116.483333
35.506944
34.103300
116.022600
34.175833
116.040556
002
002
1095
0817
10
50
9
50
50000
10000
116.00000
39.50000
119.52300
32.40000
116.15000
39.50000
116.15000
40.00000
116.00000
40.00000
119.56150
32.40000
119.56150
32.42300
119.52300
32.42300

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/92432.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/92432.shtml
英文地址,請注明出處:http://en.pswp.cn/web/92432.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【C++基礎】名字空間與 inline 命名空間:面試高頻考點與真題解析

想象一下,你正在開發一個大型項目,團隊中有10名程序員同時工作。當你們分別定義了calculate()函數時,編譯器會陷入混亂:它不知道應該調用哪個版本的calculate。這就是C++引入名字空間(Namespace)的根本原因! 一、名字空間(Namespace)基礎概念 1.1 為什么需要名字空間…

Pytest項目_day08(setup、teardown前置后置操作)

setup模塊級setup_module&#xff1a;運行于模塊開始之前&#xff0c;生效一次 一個py文件&#xff08;測試文件&#xff09;就是一個模塊函數級setup_function&#xff1a;對于每條&#xff08;不在類中的&#xff09;函數用例生效&#xff0c;如果函數在類中&#xff0c;那么…

trae開發c#

安裝插件C# Dev Kit&#xff0c;使用的版本是1.41.11 .NET Install Tool一般會自動安裝&#xff0c;安裝C# dev kit的時候&#xff0c;版本2.3.7 C# 插件&#xff0c;版本2.87.31 https://marketplace.visualstudio.com/items?itemNamems-dotnettools.vscode-dotnet-runtim…

Modstart 請求出現 Access to XMLHttpRequest at ‘xx‘

在 uniapp 前端頁面請求時出現類似如下錯誤Access to XMLHttpRequest at https://example.com/api/mtiku/config from origin http://localhost:20000 has been blocked by CORS policy: Response to preflight request doesnt pass access control check: No Access-Control…

計算機視覺CS231n學習(5)

循環神經網絡 RNN recurrent neural networksRNN序列處理能力&#xff08;RNN核心作用&#xff09; RNN處理序列數據&#xff0c;相比“Vanilla”神經網絡&#xff08;僅支持一對一映射&#xff09;&#xff0c;RNN支持多種序列映射模式&#xff1a; 一對一&#xff1a;傳統分類…

Spring Boot Redis 緩存完全指南

Spring Boot Redis 緩存完全指南 1. 項目依賴配置 1.1 Maven依賴 <dependencies><!-- Spring Boot Redis --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><…

八股——WebSocket

文章目錄1、 什么是 WebSocket&#xff1f;與 Http 協議的區別是什么&#xff1f;2、 Http 是如何升級為 WebSocket 的&#xff1f;3、 為什么 WebSocket 可以進行全雙工模式的消息傳輸&#xff0c;而 Http 不可以&#xff1f;4、 什么是 TCP 的沾包和拆包&#xff1f;5、 WebS…

Mysql 如何使用 binlog 日志回滾操作失誤的數據

文章目錄一、背景二、準備測試數據1. 創建測試表2. 創建測試數據三、模擬誤操作四、數據回滾&#xff08;一&#xff09;方案一&#xff1a;云數據庫恢復&#xff08;二&#xff09;方案二&#xff1a;手動恢復1. 查詢 binlog 日志2. 找到刪除語句&#xff0c;手動還原為插入語…

wodpress結構化數據對SEO的作用

在 WordPress 網站中&#xff0c;結構化數據對 SEO 的作用主要體現在以下幾個方面&#xff1a; 1. 提升搜索結果的可見性 結構化數據能夠幫助搜索引擎更好地理解網頁內容&#xff0c;從而以更精準的方式展示搜索結果。通過添加結構化數據&#xff0c;網頁可以在搜索結果中顯示…

講一講@ImportResource

題目詳細答案ImportResource是 Spring 框架中的一個注解&#xff0c;用于將傳統的 XML 配置文件導入到基于 Java 配置的 Spring 應用程序中。它允許開發者在使用 Java 配置的同時&#xff0c;繼續利用現有的 XML 配置文件。這樣可以逐步遷移舊的 XML 配置&#xff0c;或者在某些…

解決 Nginx 反代中 proxy_ssl_name 環境變量失效問題:網頁能打開但登錄失敗

前言&#xff1a;在現代企業架構中&#xff0c;多域名反向代理是實現業務隔離、品牌獨立的常見方案。然而&#xff0c;看似簡單的Nginx配置背后&#xff0c;隱藏著與TLS協議、后端認證邏輯深度綁定的細節陷阱。本文將從原理到實踐&#xff0c;詳解為何在多域名場景下&#xff0…

三步完成,A100本地vLLM部署gpt-oss,并啟動遠程可訪問api

A100本地vLLM部署gpt-oss&#xff0c;并啟動遠程可訪問api GPT-oss試用 gpt-oss有兩個原生配置是目前&#xff08;2025-8-8&#xff09;Ampere系列顯卡不支持的&#xff0c;分別是默認的MXFP4量化&#xff0c;以及Flash-attn V3。官方給出的vllm教程也是默認使用的是H系列顯卡…

【華為機試】63. 不同路徑 II

文章目錄63. 不同路徑 II題目描述示例 1&#xff1a;示例 2&#xff1a;提示&#xff1a;解題思路核心思想&#xff1a;動態規劃&#xff08;避開障礙&#xff09;算法流程復雜度分析邊界與細節方法對比代碼實現Go 實現&#xff08;含二維DP / 一維DP / 記憶化&#xff09;測試…

C++ 模擬實現 map 和 set:掌握核心數據結構

C 模擬實現 map 和 set&#xff1a;掌握核心數據結構 文章目錄C 模擬實現 map 和 set&#xff1a;掌握核心數據結構一、set 和 map 的結構1.1 set的結構1.2 map的結構二、對紅黑樹的改造2.1 改造紅黑樹的節點2.2 改造紅黑樹2.2.1 仿函數的使用2.2.2 插入函數的改造2.2.3 刪除函…

根據ASTM D4169-23e1標準,如何選擇合適的流通周期進行測試?

根據ASTM D4169-23e1標準及行業實踐&#xff0c;選擇流通周期&#xff08;DC&#xff09;需綜合以下因素&#xff1a;一、核心選擇依據?產品屬性與包裝形式??重量體積?&#xff1a;輕小包裹&#xff08;<4.53kg且<0.056m&#xff09;適用DC2/3/4/6/9/13-17等周期&…

MySQL的觸發器:

目錄 觸發器的概念&#xff1a; 創建觸發器&#xff1a; 查看觸發器&#xff1a; 查看當前數據庫的所有觸發器的定義&#xff1a; 查看當前數據中某個觸發器的定義&#xff1a; 從系統information_schema的TRIGGERS表中查詢"salary_check_trigger"觸發器的信息…

基于ubuntu搭建gitlab

原文地址&#xff1a;基于ubuntu搭建gitlab – 無敵牛 歡迎參觀我的網站&#xff1a;無敵牛 – 技術/著作/典籍/分享等 之前介紹了一個使用 git openssh-server 搭建一個極簡 git 庫的方法&#xff0c;感興趣可以查看往期文章&#xff1a;手搓一個極簡遠端git庫 – 無敵牛 。…

測試GO前沿實驗室:為水系電池研究提供多維度表征解決方案

測試GO前沿實驗室&#xff1a;為水系電池研究提供多維度表征解決方案隨著全球能源轉型加速&#xff0c;水系電池因其高安全性、低成本和環境友好特性&#xff0c;成為下一代儲能技術的重要發展方向。測試狗前沿實驗室針對水系電池研發中的關鍵科學問題&#xff0c;整合先進表征…

Spring Boot 中 YAML 配置文件詳解

Spring Boot 中 YAML 配置文件詳解 在 Spring Boot 項目中&#xff0c;配置文件是不可或缺的一部分&#xff0c;用于自定義應用行為、覆蓋默認設置。除了傳統的 properties 文件&#xff0c;Spring Boot 對 YAML&#xff08;YAML Ain’t Markup Language&#xff09;格式提供了…

Milvus安裝可視化工具,attu,保姆級

安裝包鏈接&#xff1a;GitHub - zilliztech/attu: Web UI for Milvus Vector Databasehttps://github.com/zilliztech/attu?tabreadme-ov-file 下滑 舉例&#xff1a;windows&#xff1a;下載安裝&#xff0c;然后就可以連接了&#xff08;安裝完打開后如果需要輸入用戶名密碼…