POST
|
I'm trying to use a geoprocessing script to clip some data and return to the user (via url) the path to a zip file with the results of the clip. I also need to connect to an sde database. I can get a url to show up if I use shapefiles and but it seems to loose the plot when i use the sde connection (probably because i have to set the workspace to the sde connection and then the server doesn't have a place to write temp files to?!). It runs okay but doesn't produce any output on the server folders and i do not get a url. I have pasted the code below (hopefully it shows up ok). Thanks. ps: I copied a lot of the code from esri's ship and clip example. Also i registered "D:\arcgisserver\directories\service_output" on the server as a folder so it is able to see it. import arcpy import sys import os import traceback import zipfile arcpy.env.overwriteOutput = True def zipUpFolder(folder, outZipFile): # zip the data try: zip = zipfile.ZipFile(outZipFile, 'w', zipfile.ZIP_DEFLATED) zipws(unicode(folder), zip, "CONTENTS_ONLY") zip.close() except RuntimeError: # Delete zip file if exists if os.path.exists(outZipFile): os.unlink(outZipFile) zip = zipfile.ZipFile(outZipFile, 'w', zipfile.ZIP_STORED) zipws(unicode(folder), zip, "CONTENTS_ONLY") zip.close() #Message" Unable to compress zip file contents." gp.AddWarning(get_ID_message(86133)) def zipws(path, zip, keep): path = os.path.normpath(path) # os.walk visits every subdirectory, returning a 3-tuple # of directory name, subdirectories in it, and filenames # in it. for (dirpath, dirnames, filenames) in os.walk(path): # Iterate over every filename for file in filenames: # Ignore .lock files if not file.endswith('.lock'): #gp.AddMessage("Adding %s..." % os.path.join(path, dirpath, file)) try: if keep: zip.write(os.path.join(dirpath, file), os.path.join(os.path.basename(path), os.path.join(dirpath, file)[len(path)+len(os.sep):])) else: zip.write(os.path.join(dirpath, file), os.path.join(dirpath[len(path):], file)) except Exception as e: #Message " Error adding %s: %s" arcpy.AddWarning(get_ID_message(86134) % (file, e[0])) return None if __name__ == '__main__': try: arcpy.env.workspace = os.path.join(r"D:\arcgisserver\directories\service_scripts", u'PUBLISH_MERCATOR_GISPublish.sde') ws = "D:\\arcgisserver\\directories\\service_output" arcpy.env.scratchWorkspace = "D:\\arcgisserver\\directories\\service_output" outputZipFile = "D:\\arcgisserver\\directories\\service_output\\out.zip" zipFolderPath = "D:\\arcgisserver\\directories\\service_output\\output" aoi = "455719.332353, 6300257.134719, 499534.419983,6269598.547920" dsList = arcpy.ListDatasets("*","Feature") for ds in dsList: fcList = arcpy.ListFeatureClasses("*","",ds) for fc in fcList: featureclass = fc.split(".")[2] arcpy.AddMessage(fc) exts = [] exts = aoi.split(",") extent = arcpy.Extent(exts[0],exts[1],exts[2],exts[3]) pts = [arcpy.Point(extent.XMin, extent.YMin), arcpy.Point(extent.XMax, extent.YMin), arcpy.Point(extent.XMax, extent.YMax), arcpy.Point(extent.XMin, extent.YMax)] array = arcpy.Array(items=pts) poly = arcpy.Polygon(array) sr = arcpy.SpatialReference() sr.factoryCode = 26912 sr.create() poly = arcpy.Polygon(array,sr) tmp_poly = os.path.join(ws, "polygon.shp") tmp_orig = os.path.join(ws, "to_clip.shp") outputpath = os.path.join(zipFolderPath, featureclass+".shp") arcpy.CopyFeatures_management(poly, "D:\\arcgisserver\\directories\\service_output\\tmp_poly.shp")#tmp_poly) arcpy.Clip_analysis(fc, "D:\\arcgisserver\\directories\\service_output\\tmp_poly.shp", outputpath) zipUpFolder(zipFolderPath, outputZipFile) arcpy.SetParameterAsText(0, outputZipFile) arcpy.SetParameterAsText(1, arcpy.env.scratchWorkspace) except: tb = sys.exc_info()[2] tbinfo = traceback.format_tb(tb)[0] pymsg = "ERRORS:\nTraceback Info:\n" + tbinfo + "\nError Info:\n " + \ unicode(sys.exc_type)+ ": " + unicode(sys.exc_value) + "\n"
... View more
09-04-2014
08:34 AM
|
0
|
0
|
2463
|
POST
|
I had this problem as well. If you want to fix your original python script (instead of the one that the server creates), you can also pass in the name of the sde filename as a parameter. I've pasted my script below. I am using Server 10.22 and it seems to me that the variable substitution is still messed up. Hope this helps import arcpy, os #This next line ensures that your .sde file gets copied from whereever you have it #to D:\arcgisserver\directories\arcgissystem\arcgisinput\service_folder\servicename.GPServer\extracted\v101 dbconn = os.path.join(r"D:\arcgisserver\directories\service_scripts", u'DB_NAME.sde') conn = arcpy.GetParameterAsText(0) #here you pass in your DB_NAME.sde again #this line will use arcpy.env.packageWorkspace (copied .sde) and the .sde filename arcpy.env.workspace = os.path.join(r"D:\arcgisserver\directories\service_scripts", conn) try: datasets = arcpy.ListDatasets("*", "Feature") for ds in datasets: print ds except arcpy.ExecuteError, ex: arcpy.AddMessage("An error occurred : " + str(ex)) arcpy.SetParameterAsText(1, "output")
... View more
08-15-2014
10:59 AM
|
0
|
0
|
775
|
POST
|
I have an sde geodatabase with datasets and feature classes within the datasets. I am restricted with cpu's so I am trying to publish 5 map services which will be the datasets and each dataset will have 6 feature classes within it. The issue now is getting access to the feature classes themseslves. I need to access them via a rest endpoint and can access the shape, but cannot get metadata to come through on the feature class level (the summary and tags do not carry through) as well as the thumbnail. Currently the service groups all of my 6 feature classes into one thumbnail and I want to be able to see them individually. Is there a way to access the thumbnail for each feature class (child service) somewhere on the server? Cheers.
... View more
08-14-2014
06:44 AM
|
0
|
0
|
2818
|
POST
|
I did resolve it though I can't point it to a specific thing that I changed. My code looks pretty much the same but with a lot of testing I realized that somewhere along the line I lost the ability to run this in debug mode (as in it fails right away when it hits gp.execute). When I deploy it and run it as a tool it seems to work fine. I also had some issues working with scripts off a network drive (versus the C drive). The one thing that I can recommend is to be meticulous about the number of parameters being passed in and the amount that the script expects. If all fails try to re-write the script from a new empty file and to make sure that the script runs fine on its own. Oh yah and I noticed that instead of using GeoProcessor I later used Geoprocessor (with a small p). One is geoprocessing and one is geoprocessor. Good luck. I am having the same problem. Did you ever solve it? Thanks, Didi
... View more
04-03-2013
11:35 AM
|
0
|
0
|
401
|
POST
|
Hi, I have searched a lot of forums looking for answers but none have helped so far. I am trying to run my own script ( a dummy empty one for now) with geoprocessing in Visual studio 2010 using c# and ArcDesktop 10. When I ran this with the "Buffer_analysis" built in tool and some different parameters it worked fine. When I run my own script (which i know it sees as i print the tools out) i can't even get gp.GetMessage(0) error messages, they just come up blank. Here is my c#.net code: using ESRI.ArcGIS.Geoprocessing; GeoProcessor gp = new GeoProcessor(); ESRI.ArcGIS.esriSystem.AoInitialize ao = null; try { RuntimeManager.Bind(ProductCode.Desktop); ao = new AoInitializeClass(); esriLicenseStatus licStatus = ao.Initialize(esriLicenseProductCode.esriLicenseProductCodeEngine); //Ive also tried arcEditor liscence ao.CheckOutExtension(esriLicenseExtensionCode.esriLicenseExtensionCode3DAnalyst); Debug.WriteLine("License Checkout successful."); gp.OverwriteOutput = true; gp.AddToolbox(@"C:\MyToolbox.tbx"); IGpEnumList tools = gp.ListTools("*"); string tool = tools.Next(); while (tool != "") { Debug.WriteLine(tool); tool = tools.Next(); } IVariantArray parameters = new VarArrayClass(); parameters.Add(@"C:\Custom_Menu\shape.shp"); gp.Execute("test", parameters, null);//*********************************this gives the error*************************************** ... } catch... Debug.WriteLine(gp.GetMessage(0)) Here is my "test.py" script: # Import arcpy module import arcpy, os from arcpy import env arcpy.AddMessage( "\nDone") I don't get it. Please help...
... View more
07-04-2012
11:12 AM
|
0
|
3
|
842
|
Online Status |
Offline
|
Date Last Visited |
11-11-2020
02:23 AM
|