esri.com에 호스팅 된 데이터 세트에 대한이 정보 페이지를 참조하십시오.
http://fema-services2.esri.com/arcgis/rest/services/2012_Sandy/ImageCat_NLT/MapServer/layers
원시 데이터 (원시 위도 / 경도 좌표 또는 SHP)에 액세스하는 방법을 알아 내려고합니다.
데이터가 사용 가능한 것 같습니다.이 인터페이스에서 데이터를 가져 오는 방법을 알 수 없습니다.
esri.com에 호스팅 된 데이터 세트에 대한이 정보 페이지를 참조하십시오.
http://fema-services2.esri.com/arcgis/rest/services/2012_Sandy/ImageCat_NLT/MapServer/layers
원시 데이터 (원시 위도 / 경도 좌표 또는 SHP)에 액세스하는 방법을 알아 내려고합니다.
데이터가 사용 가능한 것 같습니다.이 인터페이스에서 데이터를 가져 오는 방법을 알 수 없습니다.
답변:
이 맵 서비스는 일반적으로 WMS와 같이 이미지와 특정 쿼리 결과 만 반환하는 ArcGIS Server 동적 맵 서비스입니다. 일부 ArcGIS Server 이미지 서비스는 데이터 다운로드를 허용하지만 그 중 하나는 아닙니다.
쿼리 작업을 통해 원하는 정보를 얻을 수 있지만이 서비스의 최대 레코드 반환 제한이 1000이고 v14 계층에만 58000 개가 넘는 레코드가 있으므로 여러 쿼리가 필요합니다.
쿼리를 제출하려면 레이어 엔드 포인트 로 이동하여 지원되는 작업을 위해 맨 아래로 스크롤 한 다음 쿼리 를 클릭하십시오 . 총 레코드 수를 찾으려면 위치 필드에 1 = 1을 입력하고 리턴 계수 전용으로 True를 선택하십시오 ( 58919 레코드와 유사 함). 한 번에 1000 개의 레코드 만 리턴하므로 모든 레코드를 가져 오려면 59 개의 쿼리를 발행해야합니다. OBJECTID로 필터링하는 것이 가장 쉬운 것처럼 보이므로 첫 번째 쿼리는 WOBE 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 엔드 포인트에만 적용됩니다.
나는 항상 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)
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")
return IDs only
SrcSDE 와 같이) 순차적이지 않기 때문에 더 일반적인 해결책은 58919 개의 ID를 모두 반환하는 것입니다.