So I've been using Notebooks in ArcOnline to do some batch assignments for a Workforce project. Quick run down of the project: Fire Dept needs to do bi annually inspections on every business in the city. I've built a survey in survey123 that'll handle all the questions. They'll use Workforce to dispatch their people to the locations. This is decided by fire station areas. I'd like to automate creating these assignments by the station area polygons so we dont have to do it by hand twice a year.
I have their dispatch polygons hosted on arconline but can't seem to get the script to work. Here's what it looks like, it's 100% modelled off the template on github:
conda install <SPAN class="operator token">-</SPAN>c esri<SPAN class="operator token">/</SPAN>label<SPAN class="operator token">/</SPAN>prerelease <SPAN class="operator token">-</SPAN>c esri arcgis<SPAN class="operator token">==</SPAN><SPAN class="number token">1.8</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="number token">3</SPAN>
conda update <SPAN class="operator token">-</SPAN>n base <SPAN class="operator token">-</SPAN>c defaults conda
<SPAN class="keyword token">from</SPAN> datetime <SPAN class="keyword token">import</SPAN> datetime
<SPAN class="keyword token">from</SPAN> arcgis<SPAN class="punctuation token">.</SPAN>gis <SPAN class="keyword token">import</SPAN> GIS
<SPAN class="keyword token">from</SPAN> arcgis<SPAN class="punctuation token">.</SPAN>geometry <SPAN class="keyword token">import</SPAN> Geometry
<SPAN class="keyword token">from</SPAN> arcgis<SPAN class="punctuation token">.</SPAN>mapping <SPAN class="keyword token">import</SPAN> WebMap
<SPAN class="keyword token">from</SPAN> arcgis<SPAN class="punctuation token">.</SPAN>apps <SPAN class="keyword token">import</SPAN> workforce
<SPAN class="keyword token">from</SPAN> datetime <SPAN class="keyword token">import</SPAN> datetime
gis <SPAN class="operator token">=</SPAN> <SPAN class="token function">GIS</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"home"</SPAN><SPAN class="punctuation token">)</SPAN>
item <SPAN class="operator token">=</SPAN> gis<SPAN class="punctuation token">.</SPAN>content<SPAN class="punctuation token">.</SPAN><SPAN class="keyword token">get</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"afca01f6dda742e69896412da860b924"</SPAN><SPAN class="punctuation token">)</SPAN>
project <SPAN class="operator token">=</SPAN> workforce<SPAN class="punctuation token">.</SPAN><SPAN class="token function">Project</SPAN><SPAN class="punctuation token">(</SPAN>item<SPAN class="punctuation token">)</SPAN>
# Get Layer <SPAN class="keyword token">of</SPAN> City Districts
fireInspectionDistricts_layer <SPAN class="operator token">=</SPAN> gis<SPAN class="punctuation token">.</SPAN>content<SPAN class="punctuation token">.</SPAN><SPAN class="keyword token">get</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"0afccc9e48c3471f8bfc1954f4602c23"</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">.</SPAN>layers<SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN>
fireInspectionDistricts_map <SPAN class="operator token">=</SPAN> gis<SPAN class="punctuation token">.</SPAN><SPAN class="token function">map</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"Thornton, CO"</SPAN><SPAN class="punctuation token">,</SPAN> zoomlevel<SPAN class="operator token">=</SPAN><SPAN class="number token">10</SPAN><SPAN class="punctuation token">)</SPAN>
fireInspectionDistricts_map<SPAN class="punctuation token">.</SPAN><SPAN class="token function">add_layer</SPAN><SPAN class="punctuation token">(</SPAN>fireInspectionDistricts_layer<SPAN class="punctuation token">)</SPAN>
fireInspectionDistricts_map
# Add Assignments to the Map
fireInspectionDistricts_map<SPAN class="punctuation token">.</SPAN><SPAN class="token function">add_layer</SPAN><SPAN class="punctuation token">(</SPAN>project<SPAN class="punctuation token">.</SPAN>assignments_layer<SPAN class="punctuation token">)</SPAN>
# Create a spatially enabled dataframe <SPAN class="keyword token">of</SPAN> the districts
fireInspectionDistricts_df <SPAN class="operator token">=</SPAN> fireInspectionDistricts_layer<SPAN class="punctuation token">.</SPAN><SPAN class="token function">query</SPAN><SPAN class="punctuation token">(</SPAN>as_df<SPAN class="operator token">=</SPAN>True<SPAN class="punctuation token">)</SPAN>
print <SPAN class="punctuation token">(</SPAN>fireInspectionDistricts_df<SPAN class="punctuation token">)</SPAN>
# OBJECTID ZONE UNIT STATION SHAPE_Length SHAPE_Area \
#<SPAN class="number token">0</SPAN> <SPAN class="number token">1</SPAN> <SPAN class="number token">6</SPAN> None None <SPAN class="number token">169552.086294</SPAN> <SPAN class="number token">4.020346e+08</SPAN>
#<SPAN class="number token">1</SPAN> <SPAN class="number token">2</SPAN> <SPAN class="number token">2</SPAN> None None <SPAN class="number token">64910.441381</SPAN> <SPAN class="number token">7.760154e+07</SPAN>
#<SPAN class="number token">2</SPAN> <SPAN class="number token">3</SPAN> <SPAN class="number token">1</SPAN> None None <SPAN class="number token">49842.642184</SPAN> <SPAN class="number token">8.343908e+07</SPAN>
#<SPAN class="number token">3</SPAN> <SPAN class="number token">4</SPAN> <SPAN class="number token">3</SPAN> None None <SPAN class="number token">143750.130571</SPAN> <SPAN class="number token">2.249331e+08</SPAN>
#<SPAN class="number token">4</SPAN> <SPAN class="number token">5</SPAN> <SPAN class="number token">4</SPAN> None None <SPAN class="number token">57284.309928</SPAN> <SPAN class="number token">1.412634e+08</SPAN>
#<SPAN class="number token">5</SPAN> <SPAN class="number token">6</SPAN> <SPAN class="number token">5</SPAN> None None <SPAN class="number token">129542.914257</SPAN> <SPAN class="number token">3.418221e+08</SPAN>
# Get all <SPAN class="keyword token">of</SPAN> the unassigned assignments
assignments <SPAN class="operator token">=</SPAN> project<SPAN class="punctuation token">.</SPAN>assignments<SPAN class="punctuation token">.</SPAN><SPAN class="token function">search</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"status=0"</SPAN><SPAN class="punctuation token">)</SPAN>
# Assign Assignments Based on Which District They Intersect¶
tyler <SPAN class="operator token">=</SPAN> project<SPAN class="punctuation token">.</SPAN>workers<SPAN class="punctuation token">.</SPAN><SPAN class="keyword token">get</SPAN><SPAN class="punctuation token">(</SPAN>user_id<SPAN class="operator token">=</SPAN><SPAN class="string token">"Tyler.Dunn@xyz"</SPAN><SPAN class="punctuation token">)</SPAN>
brandi <SPAN class="operator token">=</SPAN> project<SPAN class="punctuation token">.</SPAN>workers<SPAN class="punctuation token">.</SPAN><SPAN class="keyword token">get</SPAN><SPAN class="punctuation token">(</SPAN>user_id<SPAN class="operator token">=</SPAN><SPAN class="string token">"Brandi.Rank@xyz"</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">for</SPAN> assignment <SPAN class="keyword token">in</SPAN> assignments<SPAN class="punctuation token">:</SPAN>
contains <SPAN class="operator token">=</SPAN> fireInspectionDistricts_df<SPAN class="punctuation token">[</SPAN><SPAN class="string token">"SHAPE"</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN>geom<SPAN class="punctuation token">.</SPAN><SPAN class="token function">contains</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="token function">Geometry</SPAN><SPAN class="punctuation token">(</SPAN>assignment<SPAN class="punctuation token">.</SPAN>geometry<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
print <SPAN class="punctuation token">(</SPAN>contains<SPAN class="punctuation token">)</SPAN>
#<SPAN class="number token">0</SPAN> False
#<SPAN class="number token">1</SPAN> False
#<SPAN class="number token">2</SPAN> False
#<SPAN class="number token">3</SPAN> False
#<SPAN class="number token">4</SPAN> False
#<SPAN class="number token">5</SPAN> False
#Name<SPAN class="punctuation token">:</SPAN> contains<SPAN class="punctuation token">,</SPAN> dtype<SPAN class="punctuation token">:</SPAN> bool
containers <SPAN class="operator token">=</SPAN> fireInspectionDistricts_df<SPAN class="punctuation token">[</SPAN>contains<SPAN class="punctuation token">]</SPAN>
print <SPAN class="punctuation token">(</SPAN>containers<SPAN class="punctuation token">)</SPAN>
#Empty DataFrame
#Columns<SPAN class="punctuation token">:</SPAN> <SPAN class="punctuation token">[</SPAN>OBJECTID<SPAN class="punctuation token">,</SPAN> ZONE<SPAN class="punctuation token">,</SPAN> UNIT<SPAN class="punctuation token">,</SPAN> STATION<SPAN class="punctuation token">,</SPAN> SHAPE_Length<SPAN class="punctuation token">,</SPAN> SHAPE_Area<SPAN class="punctuation token">,</SPAN> SHAPE<SPAN class="punctuation token">]</SPAN>
#Index<SPAN class="punctuation token">:</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="keyword token">if</SPAN> not containers<SPAN class="punctuation token">.</SPAN>empty<SPAN class="punctuation token">:</SPAN>
fireInspectionDistrict <SPAN class="operator token">=</SPAN> containers<SPAN class="punctuation token">[</SPAN><SPAN class="string token">'ZONE'</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN>iloc<SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="keyword token">if</SPAN> fireInspectionDistrict <SPAN class="operator token">==</SPAN> <SPAN class="number token">4</SPAN><SPAN class="punctuation token">:</SPAN>
assignment<SPAN class="punctuation token">.</SPAN>worker <SPAN class="operator token">=</SPAN> tyler
assignment<SPAN class="punctuation token">.</SPAN>status <SPAN class="operator token">=</SPAN> <SPAN class="string token">"assigned"</SPAN>
assignment<SPAN class="punctuation token">.</SPAN>assigned_date <SPAN class="operator token">=</SPAN> datetime<SPAN class="punctuation token">.</SPAN><SPAN class="token function">utcnow</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN>
elif fireInspectionDistrict <SPAN class="operator token">==</SPAN> <SPAN class="number token">2</SPAN><SPAN class="punctuation token">:</SPAN>
assignment<SPAN class="punctuation token">.</SPAN>worker <SPAN class="operator token">=</SPAN> brandi
assignment<SPAN class="punctuation token">.</SPAN>status <SPAN class="operator token">=</SPAN> <SPAN class="string token">"assigned"</SPAN>
assignment<SPAN class="punctuation token">.</SPAN>assigned_date <SPAN class="operator token">=</SPAN> datetime<SPAN class="punctuation token">.</SPAN><SPAN class="token function">utcnow</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN>
assignments <SPAN class="operator token">=</SPAN> project<SPAN class="punctuation token">.</SPAN>assignments<SPAN class="punctuation token">.</SPAN><SPAN class="token function">batch_update</SPAN><SPAN class="punctuation token">(</SPAN>assignments<SPAN class="punctuation token">)</SPAN>
# Verify Assignments are Assigned
webmap <SPAN class="operator token">=</SPAN> gis<SPAN class="punctuation token">.</SPAN><SPAN class="token function">map</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"Thornton, CO"</SPAN><SPAN class="punctuation token">,</SPAN> zoomlevel<SPAN class="operator token">=</SPAN><SPAN class="number token">11</SPAN><SPAN class="punctuation token">)</SPAN>
webmap<SPAN class="punctuation token">.</SPAN><SPAN class="token function">add_layer</SPAN><SPAN class="punctuation token">(</SPAN>project<SPAN class="punctuation token">.</SPAN>assignments_layer<SPAN class="punctuation token">)</SPAN>
webmap
<SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>
One of my concerns is that the results of containers is returning and empty dataframe and empty index.
Not sure if that's part of the issue, but at this point I've hit a brick wall.
Any suggestions?