Answers:
该地图服务是ArcGIS Server动态地图服务,通常仅返回图像和特定的查询结果,就像WMS。一些ArcGIS Server图像服务允许数据下载,但这不是其中之一。
您可以通过查询操作获取所需的信息,但是由于此服务的最大记录返回限制为1000,并且仅在v14层中就有58000多个记录,因此它将需要多个查询。
要提交查询,请转到图层端点并滚动到底部以查看受支持的操作,然后单击“ 查询”。要查找记录总数,请在“位置”字段中输入1 = 1,然后将“仅返回计数”选择为True,看起来像58919条记录。它一次只会返回1000条记录,因此您将必须发出59条查询才能获取所有记录。似乎最容易通过OBJECTID进行过滤,因此第一个查询将是WHERE OBJECTID <1000,输出字段= *,返回几何= TRUE,返回计数= False,格式为HTML。该服务返回所有功能1-999及其属性。您可以将输出格式更改为KMZ,稍后再转换为所需的格式,进行遍历,您将拥有所有数据。
另一种可行的方法是使用特征端点以编程方式获取单个特征信息。在上面的HTML格式的响应中,OBJECTID属性实际上是指向该功能的属性的超链接。REST URL以OBJECTID结尾,因此您可以对其进行递增并获取JSON中的每个响应以使其更易于解析。
注意-其中某些功能/链接仅适用于ArcGIS Server 10.1 REST端点。
我总是处于需要将所有数据从Map Service导出到shapefile的情况下。这是一个非常易于使用的实用程序,它将从服务中导出每个要素并将其保存为shapefile和geojson(如果需要)。您将需要拥有或安装node.js。
https://github.com/tannerjt/AGStoShapefile
将文件放到系统上后,只需导航到该文件夹,将地图服务添加到services.txt文件,然后从命令行运行即可:
node AGStoSHP.txt services.txt ./output/
确保在您的services.txt文件中放置一个管道(|),以为您的服务添加名称。
希望这对需要此功能的其他人有所帮助。
使用命令行和Python包pyesridump一次一次下载存储在ArcGIS REST MapServer上的数据。
示例命令:
esri2geojson http://gis.naperville.il.us/arcgis/rest/services/OpenData/OpenDataMapService/MapServer/4 naperville_parking_lots_122417.geojson
我最近不得不这样做,这是迄今为止我最好的尝试。我最初试图将"objectid non in {}".format(ids)
where ids作为收集的objectid的元组,但是url不会返回任何数据,where子句字符串可以有多长时间必须有一个限制。其中一些代码是硬编码的,并且如果id是非顺序的,则此脚本很可能无法工作。但无论如何,我希望这对指导有帮助
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 ID。