首页 > 解决方案 > arcgis 附加托管要素图层。“作业失败”错误

问题描述

我正在尝试获取我生成的这个 zip 文件以更新数据-> 将数据附加到图层。如果我手动下载我生成的 zip 文件并手动进入并将数据附加到图层,它会完全按照我想要的方式工作。问题是我的python代码,我承认我是新手。

我想确保将数据附加到我的层,也就是我在 python 上手动执行的操作。我尝试根据我看过的教程编写代码,但我遇到了一个我无法弄清楚的错误。我不确定我所拥有的是否会完全替换图层或只是添加新数据(这是我想要完成的)

附件是我的代码和我得到的错误照片:

from arcgis.gis import GIS
from arcgis.features import FeatureLayerCollection 
import requests
import urllib.request
from zipfile import ZipFile
import xarray as xr
import matplotlib
import matplotlib.pyplot as plt
import metpy.calc as mpcalc
from metpy.units import units
from shapely import geometry
import numpy as np
import fiona

#Load data 
#urllib.request.urlretrieve('rap.t00z.awp130pgrbf00.grib2', 'a.grib2')

# Open data file & read data
ds = xr.open_dataset('rap.t23z.awp252pgrbf00.grib2', engine='cfgrib')
lon, lat = ds.longitude.values-360., ds.latitude.values
t2m = mpcalc.smooth_gaussian((ds.variables['t2m'].values*units('K')).to('degF').magnitude, 4)

# Plot
fig = plt.figure(figsize=(12,10))
ax = fig.add_subplot(111)
cs = ax.contourf(lon, lat, t2m, levels=[10,20,30,32,36]) ## EDIT CONTOUR LEVELS HERE
#plt.close()
#plt.show()

# Write contours to shapefile
lvl_lookup = dict(zip(cs.collections, cs.levels))
PolyList=[]
for col in cs.collections:
    z = lvl_lookup[col] # the value of this level
    for contour_path in col.get_paths():
        # create the polygon for this level
        for ncp,cp in enumerate(contour_path.to_polygons()):
            lons = cp[:,0]
            lats = cp[:,1]
            new_shape = geometry.Polygon([(i[0], i[1]) for i in zip(lons,lats)])
            if ncp == 0:                
                poly = new_shape # first shape
            else:
                poly = poly.difference(new_shape) # Remove the holes
            
            PolyList.append({'poly':poly,'props':{'z': z}})
schema = {'geometry': 'Polygon','properties': {'z': 'float'}}
crs = {'no_defs': True, 'ellps': 'WGS84', 'datum': 'WGS84', 'proj': 'longlat'}
with fiona.collection('rap_temp.shp', 'w', driver='ESRI Shapefile',  crs=crs, schema=schema) as output:
    for p in PolyList:
        output.write({'properties': p['props'],
            'geometry': geometry.mapping(p['poly'])})
        
# create a ZipFile object
rap_temp = ZipFile('rap_temp2.zip', 'w')
# Add multiple files to the zip
rap_temp.write('rap_temp.cpg')
rap_temp.write('rap_temp.dbf')
rap_temp.write('rap_temp.prj')
rap_temp.write('rap_temp.shp')
rap_temp.write('rap_temp.shx')
#Close the zip file
rap_temp.close()

# ARC GIS

#Login
user = '****'
password = '****'
gis = GIS('https://rvhlcps.maps.arcgis.com', user, password)
un = gis.properties.user.username
print('Logged in as: {}'.format(un))

#overwrite layer with new data
itemid = '41b06ab534504b388c17b89c04bc0eef'
dataitem = gis.content.get(itemid)
print('1')
flayercol = FeatureLayerCollection.fromitem(dataitem)
print('2')
flayercol.manager.overwrite('rap_temp2.zip')
print('Layer Updated')

这是错误:


---------------------------------------------------------------------------
Exception                                 Traceback (most recent call last)
<ipython-input-2-2dc8c4b4cf39> in <module>
     14 flayercol = FeatureLayerCollection.fromitem(dataitem)
     15 print('2')
---> 16 flayercol.manager.overwrite('rap_temp2.zip')
     17 print('Layer Updated')

/opt/tljh/user/lib/python3.7/site-packages/arcgis/features/managers.py in overwrite(self, data_file)
   2269         if related_data_item.update(item_properties=params, data=data_file):
   2270             published_item = related_data_item.publish(
-> 2271                 publish_parameters, overwrite=True
   2272             )
   2273             if published_item is not None:

/opt/tljh/user/lib/python3.7/site-packages/arcgis/gis/__init__.py in publish(self, publish_parameters, address_fields, output_type, overwrite, file_type, build_initial_cache, item_id, geocode_service)
  12741             return Item(self._gis, ret[0]["serviceItemId"])
  12742         else:
> 12743             serviceitem_id = self._check_publish_status(ret, folder)
  12744         return Item(self._gis, serviceitem_id)
  12745 

/opt/tljh/user/lib/python3.7/site-packages/arcgis/gis/__init__.py in _check_publish_status(self, ret, folder)
  13091                     # print(str(job_response))
  13092                     if job_response.get("status") in ("esriJobFailed", "failed"):
> 13093                         raise Exception("Job failed.")
  13094                     elif job_response.get("status") == "esriJobCancelled":
  13095                         raise Exception("Job cancelled.")

Exception: Job failed.

标签: pythonarcgis

解决方案


推荐阅读