【ArcGIS Pro二次开发】(36):度分秒转十进制度

经纬度坐标的表达方式比较常用的一般有2种,【度分秒和十进制度】。

【ArcGIS Pro二次开发】(36):度分秒转十进制度_第1张图片

在成果展示中,以【度分秒】居多,但如果要将坐标导入ArcGIS中,则一般需要用到【十进制度】,这个转换可以在Excel中进行,也可以在ArcGIS中的字段计算里计算,但都有点小麻烦。

为了更方便的转换,就做了这个小工具。


一、要实现的功能

【ArcGIS Pro二次开发】(36):度分秒转十进制度_第2张图片

如上图所示,点击【度分秒转十进制度】按钮,选择要素图层或独立表,再选择度分秒(文本型)和十进制度(浮点型)的字段。

最后选择转换模式,包括【度分秒转十进制度】和【十进制度转度分秒】2种,要注意的是,模式改变时,不需要改变上面2个字段的位置。

生成结果如上图右边的表格。其中有2点需要注意,一是如果输入是空值,则输出也是空值,二是【度、分、秒】这个3个关键字兼容了中文、中文输入法下的符号和英文输入法下的符号,避免输入不规范造成的错误。


二、实现流程

1、度分秒转十进制度

主要流程就是对输入的字符串进行处理,提取出度、分、秒的值,再经过数学计算,得到十进制度的值。

为了兼容多种关键字符,设置字符列表:

List list_degree = new List() { "度", "°" };
List list_minutes = new List() { "分", "′", "'" };
List list_seconds = new List() { "秒", "″", "\"" };

分别找到关键字符的位置:

foreach (var item in list_degree)
{
  if (value_text.ToString().IndexOf(item) != -1)
  {
    index1= value_text.ToString().IndexOf(item);
  }
}
foreach (var item in list_minutes)
{
  if (value_text.ToString().IndexOf(item) != -1)
  {
    index2 = value_text.ToString().IndexOf(item);
  }
}
foreach (var item in list_seconds)
{
  if (value_text.ToString().IndexOf(item) != -1)
  {
    index3 = value_text.ToString().IndexOf(item);
  }
}

计算度分秒数值:

double degree = double.Parse(value_text.ToString().Substring(0,index1));
double minutes = double.Parse(value_text.ToString().Substring(index1+1, index2 - index1 - 1));
double seconds = double.Parse(value_text.ToString().Substring(index2 + 1, index3 - index2 - 1));

计算十进制度的值:

row[field_float] = degree + minutes / 60 + seconds / 3600;

2、十进制度转度分秒

十进制度转度分秒相对简单一些,通过取整和取余方法从浮点型数字中提取出度分秒的值。

double value = double.Parse(value_float.ToString());
// 计算度分秒的值
int degree = (int)(value / 1);
int minutes = (int)(value % 1*60/1);
double seconds = (value % 1 * 60  - minutes) * 60;

最后合并为字符串:

row[field_text] = degree.ToString() + "°" + minutes.ToString() + "′" + seconds.ToString("0.00") + "″";

三、工程文件分享

最后,放上工程文件的链接:

DegreeChangeicon-default.png?t=N4P3https://pan.baidu.com/s/12sRt3TwbSL9Xo3IxPmLxEA?pwd=weu7PS:可以直接点击...bin\Debug\net6.0-windows\下的.esriAddinX文件直接安装。

你可能感兴趣的:(ArcGIS,ArcGIS,Pro,SDK,二次开发,arcgis,pro,c#,arcgis,pro,sdk,度分秒)