了解如何获取原始数据(原始纬度/经度坐标或SHP)。
数据似乎可用,我只是想不通如何从中获取数据界面。
#1 楼
该地图服务是ArcGIS Server动态地图服务,通常仅返回图像和特定的查询结果,就像WMS。一些ArcGIS Server图像服务允许数据下载,但这不是其中之一。您可以通过查询操作获取所需的信息,但是它将多个查询作为此服务的最大记录返回限制为1000,并且仅在v14层中就有超过58000条记录。
要提交查询,请转到层端点并滚动到底部以获取支持的操作,然后单击查询。要查找记录总数,请在“位置”字段中输入1 = 1,然后将“仅返回计数”选择为True,看起来像58919条记录。它一次只会返回1000条记录,因此您将必须发出59条查询才能获取所有记录。似乎最容易通过OBJECTID进行过滤,因此第一个查询将是WHERE OBJECTID <1000,Out Fields = *,Return Geometry = TRUE,Return Count = False和Format为HTML。该服务返回所有功能1-999及其属性。您可以将输出格式更改为KMZ,然后再转换为所需的格式,进行迭代,然后将拥有所有数据。
另一种可行的方法是使用特征端点以编程方式获取单个特征信息。在上面的HTML格式响应中,OBJECTID属性实际上是指向该功能的属性的超链接。 REST URL以OBJECTID结尾,因此您可以对其进行递增并获取JSON中的每个响应以使其更易于解析。
注意-其中一些功能/链接仅适用于ArcGIS Server 10.1。 REST端点。
#2 楼
我总是遇到需要将所有数据从Map Service导出到shapefile的情况。这是一个非常易于使用的实用程序,它将从服务中导出每个要素,并在需要时将其另存为shapefile和geojson。您将需要拥有或安装node.js。https://github.com/tannerjt/AGStoShapefile
将文件放置到系统上之后,导航到该文件夹,将地图服务添加到services.txt文件,然后从命令行运行该服务:
node AGStoSHP.txt services.txt ./output/
确保将管道(|)放入您的services.txt文件,为您的服务添加名称。
评论
此答案与gis.stackexchange.com/questions/98485/上发布的答案相同。相同的答案通常意味着所应用的问题应该重复。如果是这种情况,请这样标记他们。
– PolyGeo♦
2015年9月12日下午5:57
谢谢,我将另一个问题标记为重复。他们的询问方式不同,但基本相同。
– jOshT
2015年9月15日在21:08
#3 楼
使用命令行和Python包pyesridump一次一次下载存储在ArcGIS REST MapServer上的数据。示例命令:
esri2geojson http://gis.naperville.il.us/arcgis/rest/services/OpenData/OpenDataMapService/MapServer/4 naperville_parking_lots_122417.geojson
#4 楼
您正在寻找的功能是Web功能服务(WFS)的功能,而不是Web Map Service(WMS)的功能。这是更多信息... http://blog.geoserver.org/2006/11/27/the-wfs-and-wms-services/#5 楼
我最近不得不这样做,这是迄今为止我最好的尝试。我最初尝试做一个"objectid non in {}".format(ids)
,其中id将是收集的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")
#6 楼
我知道这很旧,但是我发现了使用ArcGIS Arcpy Python网站包的简便方法。如果您不需要GeoJSON / JSON,而是希望将整个要素类作为结果(或使用where子句的子集),则只需要素类对其进行要素分类。import arcpy
OutputLocation = "PATH_TO_OUTPUT_LOCATION"
Features = {
"USFS_ROADS_CLOSED" : "https://services1.arcgis.com/gGHDlz6USftL5Pau/ArcGIS/rest/services/R03_Roads_Data/FeatureServer/1",
"USFS_ROADS" : "https://services1.arcgis.com/gGHDlz6USftL5Pau/ArcGIS/rest/services/R03_Roads_Data/FeatureServer/0"
}
def Download_Feature(outfileName, url, outLocation):
arcpy.FeatureClassToFeatureClass_conversion(url, OutputLocation, outfileName)
if __name__ == '__main__':
for key, value in Features.items():
print("Downloading: " + key)
outfileName, url = key, value
Download_Feature(outfileName, url, OutputLocation)
任何可以将大量项目放入此词典中,然后可以对它进行迭代,以免下载每个词典。或者,您可以仅下载感兴趣的单个要素类,如下所示:
import arcpy
OutputLocation = "PATH_TO_OUTPUT_LOCATION"
OutputName = "USFS_ROADS"
URL = "https://services1.arcgis.com/gGHDlz6USftL5Pau/ArcGIS/rest/services/R03_Roads_Data/FeatureServer/0"
arcpy.FeatureClassToFeatureClass_conversion(URL, OutputLocation, OutputName)
评论
+1有时,ObjectID并不是连续的(与ArcSDE一样),所以也许更通用的解决方案是仅返回ID,该ID返回所有58919 ID。
– Kirk Kuykendall
2012年11月7日,下午2:56
很好,也请注意,平铺地图服务的公开方式不同。
– wwnick
2012年11月7日4:01
@wwnick,您说过尝试通过对象ID获取数据时“抓住JSON中的每个响应”。但是在这种情况下,数据格式为“ pjson”或“ json”,但是如何将这两种格式转换为shapefil或其他常见的地理数据格式,最简单的方法是什么?
– SIslam
2015年5月24日13:05
我将使用OGR将json转换为所需的任何格式。
– wwnick
15年5月26日在2:02