Howto: 在ArcMap版本10中将一个带有经纬度坐标的文件转换成feature class或者shapefile
文章编号 : 37264
软件: ArcGIS - ArcEditor 10 ArcGIS - ArcInfo 10 ArcGIS - ArcView 10
操作系统: N/A
软件: ArcGIS - ArcEditor 10 ArcGIS - ArcInfo 10 ArcGIS - ArcView 10
操作系统: N/A
1 个回复
易智瑞技术支持
赞同来自:
这篇文章中的说明仅限使用在ArcGIS Desktop 10及以后的版本中。在较早版本中同等的操作请参见ESRI技术文章27548.
内容:
1. 更改坐标值的格式,使ArcMap可以正确的读取数据。 A. 文件中度分秒格式的坐标需要使用空格来分开度,分和秒,如下面的例子所示: 80 37 40.86,35 00 48.75 80 37 20.55,35 01 42.35 80 37 55.23,35 01 12.80 B. 对应在北美的数据,经度必须是负数。如例子: -80 37 40.86,35 00 48.75 -80 37 20.55,35 01 42.35 -80 37 55.23,35 01 12.80 C. 表格中的每一列必须有一个标题来说明表格中这一列的数据。 LongDMS,LatDMS -80 37 40.86,35 00 48.75 -80 37 20.55,35 01 42.35 -80 37 55.23,35 01 12.80 可以使用任何字段名,但是字段名的长度必须在10个字节内,并且不能包含空格和特殊字符。 D. 表格中需要有一个字段用来存储每条记录的唯一标识符。 ID,LongDMS,LatDMS 1,-80 37 40.86,35 00 48.75 2,-80 37 20.55,35 01 42.35 3,-80 37 55.23,35 01 12.80 2. 当表格已经按照正确的格式修改好了,启动ArcMap,开始一个新的空白地图文档。使用“Add Data”按钮来添加表格到ArcMap中。要确保这个表格能够在ArcMap中进行编辑,执行以下操作: A. 在表格名字上右键 > Export to DBF. 这个操作将创建一个能在ArcMap中编辑的表格。 B. 添加这个新的DBF表到ArcMap中。 3. 在这个新的DBF表格名字上右键,然后选择Open。 在表格的对话框中,单击Table Options按钮,并且选择Add Field。 添加一个新的字段‘LongDD’,定义字段的数据类型为:Double。使用Precision和Scale的默认值。 添加另外一个新字段’LatDD’, 字段类型也定义为:Double。 这些新的字段包含以度为单位的经度(X)和纬度(Y)坐标。 4. 复制以下的Python脚本到记事本或者其他的文本编辑器中。在记事本的‘另存为…’对话框中,将编码方式更改为‘Unicode’,文件名为“conv_DMS2DD.cal”,点击‘保存’。 def Convert(sField):
sDMS = sField
if len(sDMS.strip())==0:
dDD=0
else:
iDec = 0
iNum= 0
sPre="+"
sDMSNum=""
for i in range(0,len(sDMS)):
sS=sDMS[i:i+1]
if not sS.isalnum():
if sS==".":
if not iDec==0:
bReplace=1
else:
bReplace=0
elif sS=="-":
sPre="-"
bReplace=1
else:
bReplace=1
if bReplace==1:
if iNum<=0:
sDMSNum=sDMS.replace(sDMS,"")
elif iNum>0 and sPre=="+":
sDMSNum=sDMS
else:
iNum=iNum+1
sList=sDMSNum.split(" ")
if len(sList)==0:
sDMSNum=sList[0]
iLen=len[sDMSNum]
if iLen>=4:
dS=float(sDMSNum[iLen-1,iLen+1])
dM=float(sDMSNum[iLen-3,iLen-1])
sDMSNum = sDMSNum[0,iLen - 4]
if (Len(sDMSNum) > 2):
dD = float(sDMSNum[-4, -1])
elif (Len(sDMSNum) == 0):
dD = 0
else:
dD = float(sDMSNum)
else:
dDD=0
dDD=dD+dM/60+dS/3600
else:
j=0
dD=0
dM=0
dS=0
for i in range (0, len(sList)):
if j==0:
dD=float(sList[i])
j=j+1
elif j==1:
dM=float(sList[i])
j=j+1
elif j==2:
dS=float(sList[i])
j=j+1
dDD=dD+dM/60+dS/3600
if dDD<-180 or dDD>180:
dDD=0
if sPre =="-":
dDD=dDD*-1
return dDD
__esri_field_calculator_splitter__
Convert ( "ChangeFieldNameHere" )
5. 在ArcMap中,执行下面的步骤以运行脚本,将度分秒的值转换成度:
A. 开启编辑。
B. 打开一个新的DBF表格,在字段LongDD上右键,选择Field Calculator。
C. 在Field Calculator对话框的上部,选择Python。
D. 点击Load,指向之前存储的conv_DMS2DD.cal文件,然后点击Open。
E. 在下方的窗口中,在出现'Convert("ChangeFieldNameHere")'的地方, 双击括号中的内容来选中。
F. 在Field框中,双击包含度分秒格式的经度的字段。这个字段名将被复制到下方窗口的括号中。
G. 点击OK. 这样LongDD字段中的值将被计算为包含小数的度的格式。
重复步骤B到G,这次选择LatDD字段并且输入原始的纬度字段名。
保存编辑,然后停止编辑。
6. 在DBF表格的名字上右键,并且选择Display XY Data。
7. 在Display XY Data对话框中,选择LongDD作为X字段以及LatDD作为Y字段。
8. 点击Edit按钮,选择坐标对应的地理坐标系。如果需要关于寻找正确的坐标定义的帮助,参考技术文章29280,“我的数据应该使用怎样的地理坐标系以及椭球体?”
9. 应用数据的坐标系定义。一个事件主题(Event Theme)将被加载到ArcMap并且显示表格中记录的点。
10. 在事件主题上右键,选择Data > Export data, 然后将事件主题导出成一个shapefile或者geodatabase中的feature class。
在导出数据为shapefile或者geodatabase中的feature class之后,并没有一个将新导出的数据作为一个图层加载到ArcMap中的选项。
[i]创建时间:2009-10-09
最近更新:2009-10-09
【原文链接】
http://support.esrichina.com.cn/2009/1009/592.html
要回复问题请先登录或注册