操作方法

操作方法:在 ArcMap 9.x 中,将使用度、分和秒格式的坐标文件转换为 shapefile

Last Published: May 11, 2021

摘要

注: 以下过程适用于 ArcGIS 9.3.1 或更低版本。 自 ArcGIS 10.0 起,仅使用 VBScript 或标准 Python 格式创建计算器中的表达式。 有关 ArcGIS Desktop 10 中的等效进程,请参阅操作方法:使用 ArcMap 10.x 将具有度、分和秒坐标的文件转换为要素类或 shapefile

过程

请执行以下步骤。

  1. 格式化 ArcGIS 的坐标值以正确解释数据。
    1. 文件中的 DMS 坐标必须使用空格来分隔度、分和秒的值,如以下示例所示:
      80 37 40,35 00 48
    2. 对于北美洲数据,经度值必须为负数。 请记录以下示例:
      -80 37 40,35 00 48
    3. 表中的每一列都必须有一个标题,用于描述输入到表中该列的数据:
      Longitude,Latitude
      -80 37 40,35 00 48
    4. 该表必须包含一个字段,该字段包含表中每个记录的唯一标识号(主键)。
      ID,Longitude,Latitude
      1,-80 37 59,35 00 38
  1. 在表格格式正确后,使用新的空地图启动 ArcMap。
  2. 使用以下步骤将下面的脚本保存为 ArcMap 中的“conv_DMS2DD.cal”:
代码: Dim sField Dim sDMS As String, sS As String, sSuf As String, sPre as string Dim sList Dim i As Integer, j As Integer Dim iDec As Integer, iNum As Integer Dim dD As Double, dM As Double, dS As Double, dDD As Double Dim bReplace As Boolean '============================= 'Change the source field name bellow sField = [dms] '============================= sDMS = sField If Len(Trim(sDMS)) = 0 Then dDD = 0 Else iDec = 0 iNum = 0 For i = 1 To Len(sDMS) sS = Mid(sDMS, i, 1) If Not IsNumeric(sS) Then If sS = "." Then If Not iDec = 0 Then bReplace = True Else bReplace = False End If iDec = iDec + 1 ElseIf sS = "-" Then sPre = "-" bReplace = True Else bReplace = True End If If bReplace Then If iNum > 0 Then Mid(sDMS, i, 1) = "," Else Mid(sDMS, i, 1) = " " End If End If Else iNum = iNum + 1 End If Next i sList = Split(sDMS, ",") Dim iLen As Integer If UBound(sList) = 0 Then sDMS = sList(0) iLen = Len(sDMS) If iLen >= 4 Then dS = CDbl(Mid(sDMS, iLen - 1, 2)) dM = CDbl(Mid(sDMS, iLen - 3, 2)) sDMS = Left(sDMS, (iLen - 4)) If (Len(sDMS) > 2) Then dD = CDbl(Right(sDMS, 3)) ElseIf (Len(sDMS) = 0) Then dD = 0# Else dD = CDbl(sDMS) End If Else dDD = 0 End If dDD = dD + dM / 60# + dS / 3600# Else j = 0 dD = 0# dM = 0# dS = 0# For i = 0 To UBound(sList) If IsNumeric(sList(i)) Then If j = 0 Then dD = CDbl(sList(i)) j = j + 1 ElseIf j = 1 Then dM = CDbl(sList(i)) j = j + 1 ElseIf j = 2 Then dS = CDbl(sList(i)) j = j + 1 End If End If Next i dDD = dD + dM / 60# + dS / 3600# End If If dDD < -180# Or dDD > 180# Then dDD = 0# End If If sPre = "-" Then dDD = dDD * -1# End If End If
  1. 在 ArcMap 中打开一个表。
  2. 右键单击一个字段,然后选择计算值
  3. 选中高级复选框。
  4. 将上面的代码复制到字段计算器预逻辑 VBA 脚本代码部分。
  5. 字段计算器的底部输入 dDD
  6. 单击保存以将脚本保存到 .cal 文件并将文件命名为 conv_DMS2DD.cal。
  1. 请按照以下步骤在字段计算器中运行上面的代码:
    1. 通过添加数据按钮将包含 DMS 坐标的表添加到 ArcMap。
    2. 右键单击表名并单击数据 > 导出,然后将表导出到 DBF 文件。
    3. 打开 DBF 表并将名为“longDD”和“latDD”的项目添加到表中,将它们定义为 DoublePrecision 18Scale 13
    4. 通过将 conv_DMS2DD.cal 脚本加载到字段计算器来计算“longDD”和“latDD”的字段值。
注: 将脚本中的字段名称更改为原始 DMS 字段的名称。 将源字段名更改为: sField = [Long]
  1. 将坐标从 DMS 转换为 DD 后,右键单击 DBF 表并选择显示 XY 数据

    通过单击对话框的输入坐标空间参考部分中的编辑按钮,定义事件图层的投影。
注: 定义投影允许数据在 ArcMap 中作为事件图层显示在正确的位置。
  1. 将事件图层转换为 shapefile。
    1. 右键单击事件图层,然后选择数据 >导出
    2. 选择 shapefile 的输出位置并输入名称。
    3. 单击导出数据对话框中的保存确定以创建 shapefile。

文章 ID:000012735

从 ArcGIS 专家处获得帮助

联系技术支持部门

下载 Esri 支持应用程序

转至下载选项

相关信息

发现关于本主题的更多内容