Tôi đã phải làm điều này gần đây và đây là nỗ lực tốt nhất của tôi cho đến nay. Ban đầu tôi đã cố gắng thực hiện một "objectid non in {}".format(ids)
id nơi sẽ là một bộ các đối tượng được thu thập nhưng url sẽ không trả về bất kỳ dữ liệu nào, phải có giới hạn về thời gian của chuỗi mệnh đề. một số mã này được mã hóa cứng và nếu các id không tuần tự hơn kịch bản này thì rất có thể sẽ không hoạt động. nhưng dù sao tôi hy vọng điều này sẽ giúp hướng dẫn
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
trả về tất cả 58919 id.