Select to view content in your preferred language

Reference the Featureset for a geoprocessing task

1499
3
Jump to solution
10-03-2013 07:38 AM
ionarawilson1
Deactivated User
I am calling a geoprocessing service in a web app. The geoprocessing service has one parameter. But I am not sure how to find the parameter in the javascript code to send it to the geoprocessing since I am using an editor widget to first create the polygon and then run the geoprocessing service. Can you guys take a look at my code and tell me how I reference a feature set from the editor widget results? Thank you!

   var stewardship = new FeatureLayer("http://tfsgis-iisd01:6080/arcgis/rest/services/MyMapService2/FeatureServer/2",{           mode: FeatureLayer.MODE_ONDEMAND,            outFields: ['*']         });          map.addLayers([ActivityArea,ActivityPoint,stewardship]);                          function initEditor(evt) {             var templateLayers = arrayUtils.map(evt.layers, function(result){             return result.layer;               });           var templatePicker = new TemplatePicker({             featureLayers: templateLayers,             grouping: true,             rows: "auto",             columns: 3           }, "templateDiv");           templatePicker.startup();            var layers = arrayUtils.map(evt.layers, function(result) {             return { featureLayer: result.layer };           });           var settings = {             map: map,             templatePicker: templatePicker,             layerInfos: layers,             toolbarVisible: true,             createOptions: {               polylineDrawTools:[ Editor.CREATE_TOOL_FREEHAND_POLYLINE ],               polygonDrawTools: [ Editor.CREATE_TOOL_FREEHAND_POLYGON,                 Editor.CREATE_TOOL_CIRCLE,                 Editor.CREATE_TOOL_TRIANGLE,                 Editor.CREATE_TOOL_RECTANGLE               ]             },             toolbarOptions: {               reshapeVisible: true             }                   };            var params = {settings: settings};               var myEditor = new Editor(params,'editorDiv');           //define snapping options           var symbol = new SimpleMarkerSymbol(             SimpleMarkerSymbol.STYLE_CROSS,              15,              new SimpleLineSymbol(               SimpleLineSymbol.STYLE_SOLID,                new Color([255, 0, 0, 0.5]),                5             ),              null           );           map.enableSnapping({             snapPointSymbol: symbol,             tolerance: 20,             snapKey: keys.ALT           });                myEditor.startup();         }            gp = new esri.tasks.Geoprocessor("http://tfsgis-iisd01:6080/arcgis/rest/directories/arcgisoutput/CalcFeaturesStewardshipNoParam4_GPServer/CalcFeaturesStewardshipNoParam4")   gp.setOutSpatialReference({wkid:102100});           on(dom.byId("button"),"click", function() {           alert("TEST")      //    gp.submitJob(params, completeCallback , statusCallback,function(error){ //          alert(error);          });    


The Python

import os, sys, arcpy arcpy.env.workspace = "Database Connections\\sars.sde\\"  value = arcpy.GetParameterAsText(0)   Input_Polygons = "Stewardship"   Input_Polygons_Layer = "SamplePoints_Layer"  arcpy.MakeFeatureLayer_management(Input_Polygons, Input_Polygons_Layer)  with arcpy.da.UpdateCursor(Input_Points_Layer, ("City")) as rows:                  for row in rows:             row[0] = value                         rows.updateRow(row) 
0 Kudos
1 Solution

Accepted Solutions
ionarawilson1
Deactivated User
This worked. Stewardship is the id of the feature layer
var featureSet = new esri.tasks.FeatureSet();         var layer=map.getLayer("stewardship")        featureSet.features = layer.graphics;      featureSet.fields=layer.fields;          featureSet.spatialReference = map.spatialReference;             spatial = featureSet.spatialReference      featureSet.geometryType=layer.geometryType;     geometry = featureSet.geometryType     var count = featureSet.features.length;    alert(count)    alert(geometry)    alert(spatial)         var params = {"Stewardship":featureSet}     gp.submitJob(params, completeCallback , statusCallback)              });      function completeCallback(jobInfo){         console.log("testing")}

View solution in original post

0 Kudos
3 Replies
ionarawilson1
Deactivated User
Hi Guys,

I changed the script to create a featureset from the featurelayer (function getFeatureSetFromFLayer), but it is not working. I am not even getting an error, which means the parameter (featureSet) is not even being read. Any ideas why? Thank you for any help!

        var stewardship = new FeatureLayer("http://tfsgis-iisd01:6080/arcgis/rest/services/MyMapService2/FeatureServer/2",{
          mode: FeatureLayer.MODE_ONDEMAND, 
          outFields: ['*']
        });

        map.addLayers([ActivityArea,ActivityPoint,stewardship]);
  
          
  
  
        function initEditor(evt) {
 
          var templateLayers = arrayUtils.map(evt.layers, function(result){
            return result.layer;
   
          });
          var templatePicker = new TemplatePicker({
            featureLayers: templateLayers,
            grouping: true,
            rows: "auto",
            columns: 3
          }, "templateDiv");
          templatePicker.startup();

          var layers = arrayUtils.map(evt.layers, function(result) {
            return { featureLayer: result.layer };
          });
          var settings = {
            map: map,
            templatePicker: templatePicker,
            layerInfos: layers,
            toolbarVisible: true,
            createOptions: {
              polylineDrawTools:[ Editor.CREATE_TOOL_FREEHAND_POLYLINE ],
              polygonDrawTools: [ Editor.CREATE_TOOL_FREEHAND_POLYGON,
                Editor.CREATE_TOOL_CIRCLE,
                Editor.CREATE_TOOL_TRIANGLE,
                Editor.CREATE_TOOL_RECTANGLE
              ]
            },
            toolbarOptions: {
              reshapeVisible: true
            }
   
   
          };


   


          var params = {settings: settings};    
          var myEditor = new Editor(params,'editorDiv');
          //define snapping options
          var symbol = new SimpleMarkerSymbol(
            SimpleMarkerSymbol.STYLE_CROSS, 
            15, 
            new SimpleLineSymbol(
              SimpleLineSymbol.STYLE_SOLID, 
              new Color([255, 0, 0, 0.5]), 
              5
            ), 
            null
          );
          map.enableSnapping({
            snapPointSymbol: symbol,
            tolerance: 20,
            snapKey: keys.ALT
          });
    
          myEditor.startup();
        }
  
  

  
 
 
 function getFeatureSetFromFLayer(){
 
  //create featuresets
  var featureSet = new esri.tasks.FeatureSet();
  //get featurelayer from map's featurelayer (ex:myFeatureLayer)
   var layer=map.getLayer("stewardship")
  //get features from featurelayer   
  featureSet.features = layer.graphics;
  featureSet.fields = layer.fields;
  //assign map's spatial reference
  // Assumption: map variable is esri.Map instance in the application
  featureSet.spatialReference = map.spatialReference;
  //assign geometryType
  featureSet.geometryType = layer.geometryType;
  return featureSet;
  
 }
 
 
  gp = new esri.tasks.Geoprocessor("http://tfsgis-iisd01:6080/arcgis/rest/services/CalcFeaturesStewardshipOneParameter3/GPServer/CalcFeaturesStewardshipOneParameter")
  gp.outSpatialReference = map.spatialReference
 
     getFeatureSetFromFLayer()
     on(dom.byId("button"),"click", function() {
          var params = {Stewardship: featureSet}
 
    gp.submitJob(params, completeCallback , statusCallback)
      

  
        });
  
  function completeCallback(jobInfo){
       
      }
   
      function statusCallback(jobInfo) {
        var status = jobInfo.jobStatus;
        if(status === "esriJobFailed"){
          alert(status);
         
        }
        else if (status === "esriJobSucceeded"){
          alert(status);
        }
      }




And the Python

# Import arcpy module
import os, sys, arcpy

# Script arguments
Selecting_Features = arcpy.GetParameterAsText(0)

Input_Polygons = "Stewardship"
#Final_Output = value

# Process: Make Feature Layer
#arcpy.MakeFeatureLayer_management(Input_Polygons, Input_Polygons_Layer)
# Process: Select Layer By Location


with arcpy.da.UpdateCursor(Input_Polygons, ("DateStart", "FFY")) as rows:


       
    for row in rows:


       Datestarstr1 = row[0]

       Datestarstr2 = str(Datestarstr1)
       
   
    
       yearonly = Datestarstr2[0:4]

                 
       row[1] = yearonly


       rows.updateRow(row)   
0 Kudos
ionarawilson1
Deactivated User
I think I am pretty close, I thought I could grab the graphics from the map to act as features to be the input parameter, but no luck so far.


    
  var features= [];
    
       var layer=map.getLayer("stewardship")
   var featureSet = new esri.tasks.FeatureSet();
  featureSet.features = layer.graphics;
  featureSet.fields = layer.fields;
  featureSet.geometryType = layer.geometryType;
  var params = {Stewardship:featureSet}
 
    gp.submitJob(params, completeCallback , statusCallback)
      

0 Kudos
ionarawilson1
Deactivated User
This worked. Stewardship is the id of the feature layer
var featureSet = new esri.tasks.FeatureSet();         var layer=map.getLayer("stewardship")        featureSet.features = layer.graphics;      featureSet.fields=layer.fields;          featureSet.spatialReference = map.spatialReference;             spatial = featureSet.spatialReference      featureSet.geometryType=layer.geometryType;     geometry = featureSet.geometryType     var count = featureSet.features.length;    alert(count)    alert(geometry)    alert(spatial)         var params = {"Stewardship":featureSet}     gp.submitJob(params, completeCallback , statusCallback)              });      function completeCallback(jobInfo){         console.log("testing")}
0 Kudos