使用C#运行绘制出一幅兰伯特等角投影下的中国分省图(含完整代码)

本文介绍了使用C#编程语言,通过兰伯特等角投影,从MIF数据文件读取坐标,进行地图绘制的过程。内容包括理解兰伯特投影公式,数据预处理,C#代码实现平面坐标到球面坐标的转换,以及展示不同标准纬线下的地图效果。
摘要由CSDN通过智能技术生成

​​​​​​        实习目的

  1. 掌握地图投影变换的基本原理、公式和方法。
  2. 学习如何读取文本文件中的坐标点数据及利用相关投影变换公式转换直角坐标,并采用合适的画笔和画刷工具绘制成图。
  3. 了解地图投影及其变换在实际制图中的应用。

        实习内容

  1. 查阅相关资料,了解我国现行地图中常用的投影方式。
  2. 查看“地图投影公式”文档,理解兰伯特等角投影公式里各组成要素的含义,熟悉由正解公式得出反解公式的推导过程,学会利用兰伯特等角投影正反解公式进行平面坐标与球面坐标间的转换。
  3. 根据老师给定的省面.MIF数据进行数据处理,选择合适的编程语言读取数据并通过计算转换坐标,运行绘制出一幅兰伯特等角投影下的中华人民共和国分省图。

​​​​​​​​​​​​​​        实习数据

  1. 数据简介
  1. 用到的数据是省面.MIF文件,用记事本打开后如图1所示。MIF文件为文本性质的文件,用户可以通过相应的文件读写方法实现对文件内容的读写。
  2. 省面.MIF文件头的说明有:Version子句,说明所使用的是VERSION 1、VERSION 2、VERSION 300还是VERSION 450格式;Charset子句,指定在表中创建文本时使用的字符集;Delimiter字句,在引号中指定分隔符; CoordSys子句,注明数据不是以经度或纬度形式保存的;Columns子句,指定列数,然后为每列创建一行,设定列名、列类型,指示字段宽度为256。
  3. MIF文件的数据在文件头之后, Region 1子句可作为读取一个区域的循环开端,下一行是平面坐标点数;Pen子句设定两点间线对象的宽度、图案和颜色;Brush 子句设定区域填充对象的图案、前景颜色和背景颜色,Center子句指定区域中心。

图1 省面.MIF数据

  1. 数据处理

为方便读取,将数据进行如下处理:删去Version到Data的文件头内容;通过查找替换,删去Pen子句和Brush子句的内容;删除Center子句的前两个空格。处理完后结果如图2所示。

图2 数据处理结果

​​​​​​​​​​​​​​        实习内容

  1. 实习环境

使用C#编程语言和VS开发平台进行实习操作。

  1. 实习步骤
  1. 设置可供用户输入第一标准纬线和第二标准纬线的运行界面,并对界面大小、布局进行优化;
  2. 查阅相关资料后,编程实现兰伯特投影反解公式的运算过程,以实现平面坐标到球面坐标的转换;
  3. 处理省面.MIF数据后,编程实现文本文件里所有平面坐标的读取;
  4. 不断调试,选择画笔合适的的宽度和颜色,适当缩小、平移和旋转画布。

​​​​​​​​​​​​​​        实习结果

  1. 通过查阅资料了解到,正轴方位投影适用于极地地区,圆锥投影和圆柱投影适用于沿纬线伸展地区,其中正轴圆锥投影最适用于中纬度地区,而正轴圆柱投影最适用于低纬度和赤道地区。由于我国绝大多数地区属于中纬度地区,根据投影位置的选择特点,中国地图和分省地图最适宜采用正轴等角割圆锥投影,即兰伯特投影。但对于个别省区,如广东省,南海诸岛及南中国海域等位于赤道附近的地区,采用正轴圆柱投影更加合适;对于经差展开比较小的区域采用高斯投影,即正轴等角圆锥投影更合适。
  2. 程序源代码如下所示。
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.IO;
  10. using System.Windows.Forms;
  11. using System.Collections;
  12. namespace Grawchina
  13. {
  14.     public partial class Form1 : Form
  15.     {
  16.  
  17.         public Form1()
  18.         {
  19.             InitializeComponent();
  20.         }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值