在此信息页面上查看esri.com上托管的数据集:http://fema-services2.esri.com/arcgis/rest/services/2012_Sandy/ImageCat_NLT/MapServer/layers

了解如何获取原始数据(原始纬度/经度坐标或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端点。

评论


+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

#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)