ArcGIS数据互操作在线处理.docx

上传人:b****5 文档编号:12087165 上传时间:2023-04-17 格式:DOCX 页数:11 大小:573.94KB
下载 相关 举报
ArcGIS数据互操作在线处理.docx_第1页
第1页 / 共11页
ArcGIS数据互操作在线处理.docx_第2页
第2页 / 共11页
ArcGIS数据互操作在线处理.docx_第3页
第3页 / 共11页
ArcGIS数据互操作在线处理.docx_第4页
第4页 / 共11页
ArcGIS数据互操作在线处理.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

ArcGIS数据互操作在线处理.docx

《ArcGIS数据互操作在线处理.docx》由会员分享,可在线阅读,更多相关《ArcGIS数据互操作在线处理.docx(11页珍藏版)》请在冰豆网上搜索。

ArcGIS数据互操作在线处理.docx

ArcGIS数据互操作在线处理

文档编号:

_____________________

版本号:

_____________________

范围:

□内部□公开

 

ArcGISforServer数据互操作模块在线数据转换

 

2014年4月

易智瑞(中国)信息技术有限公司

——制定及修订记录——

版本

修订时间

修订人

修订类型

修订章节

修订内容

V0.1

2014-04-18

刘宇

A

*修订类型分为A-ADDEDM-MODIFIEDD–DELETED

注:

对该文件内容增加、删除或修改均需填写此记录,详细记载变更信息,以保证其可追溯性。

目录

ArcGIS产品支持多种数据格式的转换,这得益于ArcGIS产品的数据互操作模块DataInteroperability。

ArcGIS的数据互操作模块可以在Desktop,ArcGISEngine和ArcGISforServer中运行,在10.2版本的互操作模块可以直接读取150多种数据格式,可以对110多种数据格式进行写操作。

在9.x版本的时候,只要安装了ArcGIS系列的相应产品,数据互操作模块也被同时安装,在10.x系列中数据互操作模块并没有随主程序安装,而是需要单独安装,不过,安装介质和主程序在同一张盘中,如下图所示:

在桌面软件中进行数据的转换,相信很多人已经用过而且熟悉,这次讨论的主要是如何在服务器端进行数据的转换。

 

1软件环境

ArcGISforServer10.2+数据互操作模块

ArcGISforDesktop10.2+数据互操作模块

2目的

实现shp数据到mif数据的转换

3操作过程

3.1建立GP服务

在服务器端进行数据转换,依靠的是ArcGIS的GP服务,所以先要将这个GP模型建立OK。

说明,在数据互操作的模块中,很多GP的工具的输出都是目录,而目录是不能作为GP服务的输出参数(后面分析一下,这个我也纳闷了半天),即便是在建立模型的时候给这个参数设置了”P”标记,如下图:

发布服务后也看不到输出参数,如下:

 

在GP模型中,如果没有输出参数,是不允许的,不然怎么得到这个结果的?

3.2过程分析

要在服务器端进行数据转换,需要以下步骤

1,上传文件,

2,服务器进行文件格式转换操作,

3,处理完了之后返回给目标文件。

前面提到过,在数据互操作的时候,输出的很多都是目录,而这个目录是不能作为服务器端输出参数的,所以需要另辟蹊径,你可能已经知道答案了,没错,可以用Python去写,上传的文件如何处理呢,这个根据情况,如果数据文件是单个的文件,那么直接上传就可以了,如果是shp这样的格式(由好几个文件组成),那么需要上传shp格式的打包文件,传到服务器端,进行解压,Python自带了解压模块,根据这个思路,那么整个流程的步骤应该是:

1.上传文件(打包的)

2.服务器解压文件

3.服务器处理解压后的文件

4.服务器打包处理好的文件

5.服务器将打包后的文件返给客户端

3.3操作演示

整个模型如下:

用的代码如下:

#-*-coding:

utf-8-*-

 

'''

Createdon2014-4-17

@author:

刘宇

'''

 

importos,os.path

importzipfile

importarcpy

 

defzip_dir(dirname,zipfilename):

filelist=[]

ifos.path.isfile(dirname):

filelist.append(dirname)

else:

forroot,dirs,filesinos.walk(dirname):

fornameinfiles:

filelist.append(os.path.join(root,name))

zf=zipfile.ZipFile(zipfilename,"w",zipfile.zlib.DEFLATED)

fortarinfilelist:

arcname=tar[len(dirname):

]

#printarcname

zf.write(tar,arcname)

zf.close()

defunzip_file(zipfilename,unziptodir):

ifnotos.path.exists(unziptodir):

os.mkdir(unziptodir)

zfobj=zipfile.ZipFile(zipfilename)

fornameinzfobj.namelist():

name=name.replace('\\','/')

ifname.endswith('/'):

os.mkdir(os.path.join(unziptodir,name))

else:

ext_filename=os.path.join(unziptodir,name)

ext_dir=os.path.dirname(ext_filename)

ifnotos.path.exists(ext_dir):

os.mkdir(ext_dir,0777)

outfile=open(ext_filename,'wb')

outfile.write(zfobj.read(name))

outfile.close()

defgetFeatureClass(wsdir,desws):

ifos.path.exists(wsdir):

arcpy.env.workspace=wsdir

featureclasses=arcpy.ListFeatureClasses()

forfcinfeatureclasses:

#arcpy.ImportToolbox("D:

/2014/GP/CADToShape/CADToShape/Interoperability.tbx")

#//arcpy.gp.toolbox="D:

/2014/GP/CADToShape/CADToShape/Interoperability.tbx";

Destination_MapInfo_Directory_="C:

\\test\\test9"

#arcpy.gp.SpatialETLTool2(fc,Destination_MapInfo_Directory_)

SX="MIF,"+desws+",\"RUNTIME_MACROS,\"\"QUOTE_OUTPUT_VALUES,No,SEPARATOR,\"\"\"\",\"\"\"\",ENCODING,\"\",META_MACROS,\"\"DestQUOTE_OUTPUT_VALUES,No,DestSEPARATOR,\"\"\"\",\"\"\"\",DestENCODING,\"\",METAFILE,MIF,COORDSYS,,__FME_DATASET_IS_SOURCE__,false\""

Output_Dataset="MIF,C:

\\test\\test5,\"RUNTIME_MACROS,\"\"QUOTE_OUTPUT_VALUES,No,SEPARATOR,\"\"\"\",\"\"\"\",ENCODING,\"\",META_MACROS,\"\"DestQUOTE_OUTPUT_VALUES,No,DestSEPARATOR,\"\"\"\",\"\"\"\",DestENCODING,\"\",METAFILE,MIF,COORDSYS,,__FME_DATASET_IS_SOURCE__,false\""

#Process:

QuickExport

arcpy.QuickExport_interop(fc,SX)

#Scriptarguments

#v2000_hrcn_shp=arcpy.GetParameterAsText(0)

#ifv2000_hrcn_shp=='#'ornotv2000_hrcn_shp:

#v2000_hrcn_shp="C:

\\test\\test2\\2000_hrcn.shp"#provideadefaultvalueifunspecified

#

#Destination_MapInfo_Directory_=arcpy.GetParameterAsText

(1)

#ifDestination_MapInfo_Directory_=='#'ornotDestination_MapInfo_Directory_:

#Destination_MapInfo_Directory_="C:

\\test\\test2"#provideadefaultvalueifunspecified

#

##Localvariables:

#

##Process:

shp2mif

#arcpy.gp.toolbox="D:

/2014/GP/CADToShape/CADToShape/Interoperability.tbx";

##Warning:

thetoolboxD:

/2014/GP/CADToShape/CADToShape/Interoperability.tbxDOESNOThaveanalias.

##Pleaseassignthistoolboxanaliastoavoidtoolnamecollisions

##Andreplacearcpy.gp.SpatialETLTool2(...)witharcpy.SpatialETLTool2_ALIAS(...)

#arcpy.gp.SpatialETLTool2("C:

\\test\\test2\\2000_hrcn.shp",Destination_MapInfo_Directory_)

 

if__name__=='__main__':

dirx="C:

\\test\\test6"

zipfilename=arcpy.GetParameterAsText(0)

#zipfilename="C:

\\test\\test1.zip"

unzipWs=arcpy.GetParameterAsText

(1)

desws=arcpy.GetParameterAsText

(2)

desws3=arcpy.GetParameterAsText(3)

#unzipWs="C:

\\test\\test8"

#desws="C:

\\test\\test8"

unzip_file(str(zipfilename),str(unzipWs))

getFeatureClass(str(unzipWs),str(desws))

zip_dir(str(desws),desws3)

ArcGISforServer从10.1版本开始支持文件上传的这个接口,只需要在服务这个GP服务的时候选中uploads就行,如下图:

在rest的服务目录中,进入这个服务,上传文件成功后,将会返回一个ID,如下图:

上传成功后的文件可以在这里找到,可以看到这个ID表示的是一个文件目录:

在执行GP的时候,按照下面这个格式,这里的itemID,就是刚才返回的ID,服务器通过这个ID,就可以找到上传到的文件,下来就进入到了,数据解压,处理和打包下载这个环节。

返回后的结果

3.4关于文件目录

在建立GP模型的时候,有4个标记了P的参数,但是服务发布成功后,只有2个,凡是类型为folder的都不会出现,这个我分析了半天算是找到,在参数中,有一个是解压目录,就是将上传到的zip文件放到这个目录中,最后可以看到这个解压目录被放到了这里,如下图:

其实Server在这里做了一个偷天换日的工作,只要发现目录,在发布服务的时候自己就会给替换掉,而将目录的最后一段,比如我原先的的目录是C:

\test\test9,server会将test9作为常量,将前面的一段给替换掉。

关于输出目录,在模型中设置ScratchWorkspace为如下地址:

这个输出目录会在arcgisjobs目录下出现,完整的目录如下:

从上分析可以看到,Server其实帮我们做了不少的工作,路径的替换,让我们避免了路径的不存在,而数据目录是在不同的jobid下面,有可以避免重复,这里Server做的的确是不错。

4小结

从上面的分析,演示,可以看出ArcGISforServer的数据互操作模块能很好的实现在线数据的转换工作,对于那些手头有数据,但是没有数据转换工具的的用户来说,这算是一种很好的方案。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1