If ESRI will update the geoprocessing widget so it will take a local file, I, and many other users will be very happy!
Hy,I'm trying to build a simple geoprocessing service which should buffer an uploaded shapefile.This is the scenario: 1) uploading shapefile to geoprocessing service 2) buffering the shapefile with a given parameter 3) returning the buffered shapefile The buffering is not the problem, but the handling of the upload and reusing it in the model or python part.As far as I read, I should have to use a Datafile parameter for upload, but I'm always getting this error while running it: ExecuteError: Failed to execute. Parameters are not valid. ERROR 000735: input: Value is required Failed to executeCan anybody help me to use uploads on geoprocessing services?Thanks, Tom
The datafile parameter input for the geoprocessing widget in the Viewer for Flex does not allow the user to upload a file to the server from their local machine. It only accepts paths that begin with http:// or https://I was under the impression that this was going to be fixed at the 3.1 release, but the widget still won't accept a local file.This thread indicates all the pieces are available if you have the capability of creating your own custom widget:http://forums.arcgis.com/threads/64114-Uploads-capability-on-GeoprocessorThere are many of us that cannot create custom widgets. If ESRI will update the geoprocessing widget so it will take a local file, I, and many other users will be very happy!http://forums.arcgis.com/threads/54441-Uploading-to-SDE-from-Flex-Viewerhttp://forums.arcgis.com/threads/41089-datafile-input-broken-in-Geoprocessing-widgethttp://forums.arcgis.com/threads/36560-Geoprocessing-widget-has-me-stumpedhttp://forums.arcgis.com/threads/60510-Geoprocessing-with-File-Input
import arcpy import zipfile import os inFile = arcpy.GetParameterAsText(0) # Create a folder in the scratch directory to extract zip to zipFolder = os.path.join(arcpy.env.scratchFolder, "zipContents") os.mkdir(zipFolder) # Extract the zip contents zip2Extract = zipfile.ZipFile(inFile, 'r') zip2Extract.extractall(zipFolder) zip2Extract.close() # Create a folder in the scratch directory to hold the fgdb which will be downloaded fgdbFolder = os.path.join(arcpy.env.scratchFolder, "fgdbOutput") os.mkdir(fgdbFolder) # Work through all the FeatureClasses inside the extracted zip folder for dirpath, dirnames, filenames in arcpy.da.Walk(zipFolder, datatype="FeatureClass"): for filename in filenames: # You could replace the code below here with your own code to do what you want.... arcpy.AddMessage("Copying: {}".format(filename)) # Strip .shp from the filename when merging shapefiles if filename.endswith("shp"): outFilename = filename[:-4] else: outFilename = filename # Copy each featureclass into the output.gdb arcpy.CopyFeatures_management(os.path.join(dirpath, filename), os.path.join(fgdbFolder, "output.gdb", outFilename))
The following code (10.1 + only) walks through a directory and finds FeatureClasses (this example assumes a folder of "zip" files).It then copies each one into a fGDB. You can change what it does, but the logic in it should start you off.You'll notice that a directory is created inside the scratchFolder (the variable "ZipFolder") - this is where the uploaded ZipFile is extracted to. Then the code looks in there. import arcpy import zipfile import os inFile = arcpy.GetParameterAsText(0) # Create a folder in the scratch directory to extract zip to zipFolder = os.path.join(arcpy.env.scratchFolder, "zipContents") os.mkdir(zipFolder) # Extract the zip contents zip2Extract = zipfile.ZipFile(inFile, 'r') zip2Extract.extractall(zipFolder) zip2Extract.close() # Create a folder in the scratch directory to hold the fgdb which will be downloaded fgdbFolder = os.path.join(arcpy.env.scratchFolder, "fgdbOutput") os.mkdir(fgdbFolder) # Work through all the FeatureClasses inside the extracted zip folder for dirpath, dirnames, filenames in arcpy.da.Walk(zipFolder, datatype="FeatureClass"): for filename in filenames: # You could replace the code below here with your own code to do what you want.... arcpy.AddMessage("Copying: {}".format(filename)) # Strip .shp from the filename when merging shapefiles if filename.endswith("shp"): outFilename = filename[:-4] else: outFilename = filename # Copy each featureclass into the output.gdb arcpy.CopyFeatures_management(os.path.join(dirpath, filename), os.path.join(fgdbFolder, "output.gdb", outFilename))
You have to use a script tool. Theres no tool in the toolbox (to put into modelbuilder) to extract a zipfile.You can wrap the above script as a script tool and put that into a model if it serves your purpose.
You have to use a script tool. Theres no tool in the toolbox (to put into modelbuilder) to extract a zipfile. You can wrap the above script as a script tool and put that into a model if it serves your purpose.
My apologies, the da.Walk command was added at 10.1 Service Pack 1. Based on the message I'm guessing you have 10.1 final (no service packs). If you're able to install the service pack it'll fix that.
Hi, Have you resolved your problem? If not, try to change your scratch folder to a different place on Desktop when running your script tool. sometimes the default folder in the User directory has permission issue. You can also use model tool, but I am not 100% sure if it works if you are using web app as Client. Give it a try anyway. You can use Calculate Value with absolute path (String data type) of the shape file as the input. Then use Copy Feature to copy the input file so Server will save the uploaded input shape file in the scratch gdb, and finally do the Buffer or any other Analysis with the uploaded file. I attached two gpk files for your reference - calcbuffer100.gpk (for 10.0 Server) and calcbuffer101.gpk (For 10.1 Server). Both models are almost the same, except in 10.1 model you have to set the output of Calculate Value as an output parameter, otherwise you won't get the input shape on the server. I have to figured out if this is a bug or as design. Let me know if this helps. Best,Shing
Hy,I didn't yet used it in the FlexViewer but only manually over rest.But it should point you to the right direction: enable "upload" on your geoprocessing service upload your file to the gp-service and remember the upload-id call your gp-service with the datafile paramater as the text below:For GPDatafile parameter, you have to indicate this full json representation of the upload item: parameter = {"itemID":"i80dfa12f-52ed-4841-94ff-37f9c3f5dd6f"}Tom
Hello, how can I access to this file in Geoprocessing script? I uploaded the .zip file and passed this object like parameter and I want to unzip it in, but what is the step between pass the parameter and unzip? how do we get access to .zip file? thank you
サインインしたメンバーは投稿、更新のフォローなどができます。初めてですか?無料アカウントを登録してください。
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.