मुझे हाल ही में ऐसा करना पड़ा और यह मेरा अब तक का सर्वश्रेष्ठ प्रयास था। मैं मूल रूप से यह करने की कोशिश कर रहा था "objectid non in {}".format(ids)
कि आईडी कहां एकत्रित ऑब्जेक्ट का टपल होगा लेकिन url कोई डेटा वापस नहीं करेगा, इस बात की सीमा होनी चाहिए कि क्लॉज स्ट्रिंग कितनी देर तक हो सकती है। इस कोड में से कुछ को हार्ड कोडित किया गया है और यदि आईडी इस स्क्रिप्ट की तुलना में गैर-अनुक्रमिक हैं तो सबसे अधिक संभावना नहीं है। लेकिन वैसे भी मुझे आशा है कि यह मार्गदर्शन में मदद करता है
import os, arcpy, json, requests
arcpy.env.workspace=r'C:\path'
arcpy.env.overwriteOutput=True
def non_esri_extract(url,where,idlist):
dic={"where": where,"outFields": "*","returnGeometry": "true","f":"json"}
resp=requests.get(url, params=dic)
data=resp.json()
for i in data['features']:
idlist.append(int(i['attributes']['OBJECTID']))
maximum=max(idlist)
minimum=min(idlist)
return maximum,minimum
def esri_extract(url,e_w):
fields="*"
esri_param="?where={}&outFields={}&returnGeometry=true&f=json".format(e_w, fields)
fsURL=url+esri_param
fs = arcpy.FeatureSet()
fs.load(fsURL)
outname="interm"+str(x)
arcpy.CopyFeatures_management(fs, outname)
x=0
maximum=0
minimum=1
baseURL="http://gismaps.vita.virginia.gov/arcgis/rest/services/VA_Base_layers/VA_Parcels/FeatureServer/0/query"
while maximum!=minimum:
print "number of loops = {}".format(str(x))
if x==0:
ids=[]
maximum,minimum=non_esri_extract(baseURL,"LOCALITY = 'Franklin County'",ids)
esri_where="objectid >={} and objectid <={} and LOCALITY = 'Franklin County'".format(minimum,maximum)
esri_extract(baseURL,esri_where)
x+=1
else:
ids=[]
interm_where="objectid >={} and objectid <={} and LOCALITY = 'Franklin County'".format(maximum,maximum+999)
maximum,minimum=non_esri_extract(baseURL,interm_where,ids)
esri_where="objectid >={} and objectid <={} and LOCALITY = 'Franklin County'".format(minimum,maximum)
esri_extract(baseURL,esri_where)
x+=1
fcs = arcpy.ListFeatureClasses()
arcpy.Merge_management(fcs, "Merged")
return IDs only
जो सभी 58919 आईडी को लौटाता है।