中文

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

摘要

注:
以下过程适用于 ArcGIS 9.3.1 或更早版本。 从 ArcGIS 10.0 开始,仅使用 VBScript 或标准 Python 格式创建计算器中的表达式。 有关 ArcGIS Desktop 10 中的等效进程,请参阅操作方法:使用 10 版本的 ArcMap 将具有度、分和秒坐标的文件转换为要素类或 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
'=============================
'更改以下源字段名称
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”的项目添加到表中,将它们定义为 Double、Precision 18 和 Scale 13。
    4. 通过将 conv_DMS2DD.cal 脚本加载到字段计算器来计算“longDD”和“latDD”的字段值。
注:
将脚本中的字段名称更改为原始 DMS 字段的名称:

'更改以下源字段名称
sField = [Long]
  1. 在将坐标从 DMS 转换为 DD 后,右键单击 DBF 表并选择显示 XY 数据

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

相关信息