ArcGIS中python实现地图服务的自动发布

项目的具体需求是,每天下载几张tiff图片,放在mxd文件里,然后将其发布到ArcGISServer,后来 参照网上有一篇文章,可以自动发布地图服务,但是,后来发现,现在使用的ArcGIS版本10.2.2已经放弃了原来的方式发布服务,根据ArcMap里的帮助文档,发现里面的例子还是挺多的,自己又修改了实现的代码,遇到的问题是,

 con = 'C:/Users/IBM_ADMIN/AppData/Roaming/ESRI/Desktop10.2/ArcCatalog/arcgis on localhost_6080 (publisher).ags'
这个参数是ags文件的地址,默认这个文件是存在c盘的隐藏文件夹里,这个文件,是ArcCatolog里创建ArcGISServer连接的时候创建的。

实现方式是创建一个模板的mxd文件,每次,修改其数据源,这样图层的渲染方式不会改变,曾经想着将模板文件里的图层删掉,再添加新的图层,但,发现默认添加的tiff图层的渲染方式竟然不是ArcMap里自动添加tiff图层的渲染方式(rgb),添加出来的图层是灰色图,python的symbol控制又比较弱,所以,改成修改数据源的方式,实现了最终的效果

下载tiff文件的代码downLoadTiff.py:

import urllib 
import urllib2
import os,time
ftime=time.strftime("%Y_%m_%d", time.localtime())#2015_12_01 tiffFonderName
ftime1=time.strftime("%Y-%m-%d", time.localtime())#2015-12-01 tiffNametime
ftime='2015_12_07'
ftime1='2015-12-07'
tiffFolder='..\\..\\'+ftime
tiffNameStart='nasa-worldview-'
os.mkdir(tiffFolder)
url = 'http://9.186.62.26/weather/satellite/'#nasa-worldview-2015-11-30.tiff'  
print "downloading start from http://9.186.62.26/weather/satellite/"
tiffName=tiffNameStart+ftime1+'-2.tiff'
urllib.urlretrieve(url+tiffName, tiffFolder+'\\'+tiffName)
print "downloading with urllib from "+url+tiffName
tiffName=tiffNameStart+ftime1+'-3.tiff'
urllib.urlretrieve(url+tiffName, tiffFolder+'\\'+tiffName)
print "downloading with urllib from "+url+tiffName
tiffName=tiffNameStart+ftime1+'-4.tiff'
urllib.urlretrieve(url+tiffName, tiffFolder+'\\'+tiffName)
print "downloading with urllib from "+url+tiffName
tiffName=tiffNameStart+ftime1+'.tiff'
urllib.urlretrieve(url+tiffName, tiffFolder+'\\'+tiffName)
print "downloading with urllib from "+url+tiffName

构造mxd文件,并发布服务的代码publishHelper.py:

# -*- coding: utf-8 -*-
import arcpy, os,time

__name__ = 'publishHelper'

# 将指定目录下所有的.mxd文档发布为地图服务
# folder:包含mxd文档的文件夹路径
# serviceDir:服务目录URL,例如http://localhost/arcgis/rest/services
# serviceFolder:服务所在文件夹,如果为空,则表示根目录
def PublishAll(folder,serviceDir,serviceFolder):
    print "检查文件夹路径……"
    if os.path.isdir(folder) == False:
        print "输入的文件夹路径无效!"
        return
    print "遍历文件夹……"
    files = os.listdir(folder)
    for f in files:
        if f.endswith(".mxd"):
            mxdPath = os.path.join(folder, f)
            print "publishing: " + f
            PublishMxd(f,mxdPath, serviceDir, serviceFolder)
        else:
            continue
#将mxd文档发布为服务:1.将mxd转为msd;2.分析msd;3.发布msd
def PublishMxd(mxdName,mxdPath, serviceDir, serviceFolder):
    #检查mxd文件是否存在
    print "检查文件路径……"
    if os.path.exists(mxdPath) == False:
        print "指定路径的mxd文档不存在!"
        return
    
    # 打开mxd文档
    try:
        print "正在打开mxd文档……"
        mxd = arcpy.mapping.MapDocument(mxdPath)
    except Exception, e:
        print "open mxd error: ", e
        return
    else:
        print "mxd文档打开成功……"

    # 获取默认的数据框
 

    # 构造sddraft文档名称   
    sddraft = mxdPath.replace(".mxd", ".sddraft")
    service=mxdName.replace(".mxd", "")
    sd=mxdPath.replace(".mxd", ".sd")
    con = 'C:/Users/IBM_ADMIN/AppData/Roaming/ESRI/Desktop10.2/ArcCatalog/arcgis on localhost_6080 (publisher).ags'
    copy_data_to_server=True
    #正在将mxd文档转换为sddraft文档……"
    # Create service definition draft
    arcpy.mapping.CreateMapSDDraft(mxd, sddraft, service,'ARCGIS_SERVER',con,copy_data_to_server, serviceFolder)
    # Analyze the service definition draft
    analysis = arcpy.mapping.AnalyzeForSD(sddraft)
    
    # Print errors, warnings, and messages returned from the analysis
    print "The following information was returned during analysis of the MXD:"
    for key in ('messages', 'warnings', 'errors'):
      print '----' + key.upper() + '---'
      vars = analysis[key]
      for ((message, code), layerlist) in vars.iteritems():
        print '    ', message, ' (CODE %i)' % code
        print '       applies to:',
        for layer in layerlist:
            print layer.name,
        print

    # Stage and upload the service if the sddraft analysis did not contain errors
    if analysis['errors'] == {}:
        # Execute StageService. This creates the service definition.
        arcpy.StageService_server(sddraft, sd)
    #Execute UploadServiceDefinition. This uploads the service definition and publishes the service.
        arcpy.UploadServiceDefinition_server(sd, con)
        print "Service successfully published"
    else: 
        print "Service could not be published because errors were found during analysis."

    print arcpy.GetMessages()

# demoMXDPath:包含mxd文档名称
# folder:包含新建的mxd文档以及tiff文件的文件夹路径
def createMxdDocument(demoMXDPath,folder):
     if os.path.exists(demoMXDPath) == False:
        print "mxd document it's not exist!"
     else:
        try:
            print "opening mxd document……"
            mxd = arcpy.mapping.MapDocument(demoMXDPath)
            print "repair layer source"
            if os.path.isdir(folder) == False:
                print "invalid document path!"
                return
            print "reading layer document one by one......"
            files = os.listdir(folder)
            i=0
            layerName=""
            for f in files:
                if f.endswith(".tiff"):
                    if layerName="":
                        name1=f.replace("nasa-worldview-", "")
                        layerName=name1[0:9]
                    if i>3:
                        continue
                    if f.index(layerName)>=0:
                        print layerName+";"+f
                        df = arcpy.mapping.ListDataFrames(mxd, "Layers")[0]
                        print arcpy.mapping.ListLayers(mxd, "", df)[i].name
                        lyr = arcpy.mapping.ListLayers(mxd, "", df)[i]
                        lyr.replaceDataSource(folder,"RASTER_WORKSPACE",f)
                        lyr.name=f.replace(".tiff", "")
                        i=i+1
                else:
                    continue
            mxdName=time.strftime("%Y_%m_%d", time.localtime())+".mxd" #2015_11_24样式文件名
            newMXD=folder+"\\"+mxdName
            mxd.saveACopy(newMXD)
            del mxd
        except Exception, e:
            print "open mxd error: ", e
            return

执行过程的代码 doPublishHelper.py :

import sys,time
sys.path.append(r"D:\ly\hb\script\v2") # python文件路径
from publishHelper import PublishAll # 必须要有正确的许可,否则导入失败
from publishHelper import createMxdDocument # 必须要有正确的许可,否则导入失败
tiffFolder=time.strftime("%Y_%m_%d", time.localtime())
tiffFolder="nasadata"
folderPath=r"D:\ly"+"\\"+tiffFolder
createMxdDocument(r"D:\ly\hb\20151124demo.mxd",folderPath)
PublishAll(folderPath, "http://localhost/ArcGIS/rest/services", "ly")


  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: ArcGISPython脚本可以用于自动化地执行地理处理任务、数据管理和地图制作等操作。通过Python脚本,用户可以快速地批量处理数据、生成地图和报告等,提高工作效率。 在ArcGIS,用户可以使用Python窗口或Python IDE来编写和运行Python脚本。Python窗口是ArcGIS自带的一个交互式Python环境,用户可以在其输入Python代码并直接执行。Python IDE则是一个独立的Python开发环境,用户可以在其编写、调试和运行Python脚本。 在编写Python脚本时,用户需要了解ArcPy模块,它是ArcGISPython库,提供了许多与地理处理相关的函数和类。用户可以使用ArcPy模块的函数和类来完成各种地理处理任务,如数据导入、空间分析、地图制作等。 总之,ArcGISPython脚本是一个非常强大的工具,可以帮助用户快速地完成各种地理处理任务,提高工作效率和数据分析能力。 ### 回答2: ArcGIS是一款常用的地理信息系统软件,而Python是一种具有简单易学、高效率、优美易读等特点的计算机编程语言。在ArcGISPython脚本可以被用来操作和自动化地理数据的处理、分析和可视化,大大提高了处理数据的效率和精度,因此Python的应用在ArcGIS变得越来越广泛。接下来,我将探讨ArcGISPython脚本的使用方法。 首先,在ArcGIS软件使用Python脚本需要先打开Python窗口,可以通过“自定义工具栏”的“Python”来打开。在Python窗口,可以输入各种Python脚本语句,来完成各种处理和分析工作。 其次,Python脚本在ArcGIS的应用范围非常广泛,可以用来进行地图绘制、数据处理、空间分析等多种应用。例如,可以利用Python脚本自动化地对地图进行布局与标注,自动对数据进行分析、统计,并将处理结果输出到不同的文件,并用Python脚本进行计算和空间分析,以支持更高级的空间决策。 另外,Python脚本在ArcGIS还可以通过调用ArcPy库来使用更多的ArcGIS工具和函数,比如数据转换工具、批量处理工具、模型工具和地理处理工具,等等。可以通过掌握Python脚本和ArcPy库的使用,来更好地利用ArcGIS进行各种地理数据分析与处理。 总的来说,Python脚本在ArcGIS的运用可以大大节约时间和精力,提高数据分析的精度和效率,同时还可以实现复杂的数据分析与处理。但是需要注意的是,在使用Python脚本的过程要注意脚本的正确性和稳定性,以此来保证程序的正确性和运行的稳定性,从而更好地进行各项工作。 ### 回答3: Python是一种非常流行的编程语言,可用于编写ArcGIS软件的脚本。这些脚本可以减少处理地理空间数据的时间和工作量,使工作人员能够更快地完成工作。那么,ArcGIS软件Python脚本的使用是如何实现的呢? 首先,ArcGIS软件Python脚本可以在ArcToolbox使用。在ArcToolbox,可以选择“Python脚本工具”,打开Python脚本编辑器,输入Python代码并执行脚本。这些脚本可以用于处理数据、执行地理处理和创建地理数据。此外,在Python脚本编辑器,还可以查看脚本的执行结果和错误信息。 其次,ArcGIS软件Python脚本还可以直接在ArcMap使用。在ArcMap,可以打开Python窗口,输入Python代码并执行脚本。这些脚本可以用于执行各种操作,如更改地图显示、添加图层、查询和选择要素等。 最后,ArcGIS软件Python脚本还可以与其他软件集成使用。例如,可以使用Python脚本连接到数据库,从网络上下载数据,将数据导入到ArcGIS等等。这些脚本可以大大简化数据处理工作,提高效率。 总之,ArcGIS软件Python脚本的使用提供了一个方便、快捷、高效的地理处理工具,可以帮助工作人员更好地管理和分析地理数据。它不仅可以自动化各种操作,还可以扩展ArcGIS功能,通过与其他软件集成,使地理处理变得更加灵活和丰富。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liyan_gis

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值