ดาวน์โหลดชุดข้อมูลจาก ArcGIS REST Service


18

ดูหน้าข้อมูลนี้สำหรับชุดข้อมูลที่โฮสต์บน esri.com:
http://fema-services2.esri.com/arcgis/rest/services/2012_Sandy/ImageCat_NLT/MapServer/layers

พยายามหาวิธีที่ฉันจะสามารถเข้าถึงข้อมูลดิบได้ (พิกัด raw lat / lng หรือ SHP)

ดูเหมือนว่ามีข้อมูลฉันไม่สามารถหาวิธีดึงข้อมูลจากอินเทอร์เฟซนี้ได้

คำตอบ:


27

บริการแผนที่นั้นเป็นบริการแผนที่แบบไดนามิกของ ArcGIS Server ซึ่งโดยทั่วไปแล้วจะส่งคืนรูปภาพและผลลัพธ์แบบสอบถามเฉพาะซึ่งคล้ายกับ WMS บริการอิมเมจ ArcGIS Server บางตัวอนุญาตสำหรับการดาวน์โหลดข้อมูล แต่นี่ไม่ใช่หนึ่งในนั้น

คุณสามารถรับข้อมูลที่คุณกำลังมองหาผ่านการดำเนินการสืบค้น แต่จะใช้หลายแบบสอบถามเนื่องจากข้อ จำกัด สูงสุดในการส่งคืนระเบียนในบริการนี้คือ 1,000 และมีมากกว่า 58,000 ระเบียนในเลเยอร์ v14 เพียงอย่างเดียว

ที่จะส่งคำสั่งไปที่ปลายทางชั้นและเลื่อนไปด้านล่างสำหรับการดำเนินงานได้รับการสนับสนุนจากนั้นคลิกแบบสอบถาม หากต้องการค้นหาจำนวนเรคคอร์ดทั้งหมดให้ป้อน 1 = 1 ในฟิลด์ตำแหน่งและเลือก True สำหรับจำนวนการส่งคืนเท่านั้นดูเหมือน 58919 เรคคอร์ด จะส่งคืนระเบียนได้ครั้งละ 1,000 รายการเท่านั้นดังนั้นคุณจะต้องออกแบบสอบถาม 59 รายการเพื่อรับระเบียนทั้งหมด ดูเหมือนง่ายที่สุดในการกรองตาม objectId ดังนั้นแบบสอบถามแรกจะWHERE objectId <1000 ฟิลด์เอาท์ = * กลับเรขาคณิต = TRUE กลับ Count = เท็จและรูปแบบเป็น HTML บริการจะส่งคืนคุณลักษณะทั้งหมด 1-999 และคุณลักษณะของพวกเขา คุณสามารถเปลี่ยนรูปแบบผลลัพธ์เป็น KMZ และแปลงเป็นรูปแบบที่ต้องการในภายหลังวนซ้ำและคุณจะมีข้อมูลทั้งหมด

อีกวิธีหนึ่งที่ใช้งานได้คือการดึงข้อมูลคุณลักษณะของแต่ละบุคคลโดยใช้จุดปลายฟีเจอร์ ในการตอบสนองในรูปแบบ HTML จากด้านบนแอตทริบิวต์ OBJECTID เป็นไฮเปอร์ลิงก์ไปยังแอตทริบิวต์สำหรับคุณลักษณะนั้น REST URL ลงท้ายด้วย OBJECTID ดังนั้นคุณสามารถเพิ่มได้และหยิบการตอบสนองแต่ละรายการใน JSONเพื่อให้ง่ายต่อการแยกวิเคราะห์

หมายเหตุ - คุณสมบัติ / ลิงค์เหล่านี้บางอย่างใช้ได้เฉพาะกับจุดสิ้นสุด REST ของ ArcGIS Server 10.1


3
+1 บางครั้ง ObjectIDs นั้นไม่ได้เรียงตามลำดับ (เช่นเดียวกับ ArcSDE) ดังนั้นบางทีวิธีแก้ปัญหาทั่วไปที่มากกว่านั้นคือการreturn IDs onlyส่งกลับรหัส 58919 ทั้งหมด
Kirk Kuykendall

จุดที่ดียังดีที่จะต้องทราบว่านี่ไม่ใช่วิธีการเดียวกันสำหรับบริการแผนที่แบบเรียงต่อกัน
wwnick

@wwnick คุณบอกว่า "รับการตอบสนองแต่ละครั้งใน JSON" เมื่อพยายามรับข้อมูลด้วยรหัสวัตถุ แต่ในกรณีนี้รูปแบบข้อมูลคือ "pjson" หรือ "json" แต่วิธีการแปลงทั้งสองรูปแบบเป็น shapefil หรือรูปแบบข้อมูลภูมิศาสตร์ทั่วไปอื่น ๆ และสิ่งที่ง่ายที่สุด?
SIslam

ฉันจะใช้OGRเพื่อแปลง json เป็นรูปแบบที่คุณต้องการ
wwnick

9

ฉันมักจะพบว่าตัวเองอยู่ในสถานการณ์ที่ฉันต้องการส่งออกข้อมูลทั้งหมดจากบริการแผนที่ไปยังรูปร่างไฟล์ นี่คือยูทิลิตี้ที่ใช้งานง่ายมากที่จะส่งออกคุณสมบัติทุกอย่างจากบริการและบันทึกเป็น 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

ขอบคุณฉันตั้งค่าสถานะคำถามอื่นเป็นซ้ำ พวกเขาถูกถามในรูปแบบที่แตกต่างกัน แต่โดยทั่วไปแล้วจะเหมือนกัน
jOshT

4

ดาวน์โหลดข้อมูลที่เก็บไว้บนชั้นหนึ่ง ArcGIS REST MapServer ได้ตลอดเวลาโดยใช้บรรทัดคำสั่งและแพคเกจหลามpyesridump

คำสั่งตัวอย่าง:

esri2geojson http://gis.naperville.il.us/arcgis/rest/services/OpenData/OpenDataMapService/MapServer/4 naperville_parking_lots_122417.geojson

คุณสามารถอธิบายรายละเอียดเพิ่มเติมเกี่ยวกับวิธีนี้ได้หรือไม่?
NULL.Dude

1
@ Geo.Dude ในการใช้คำสั่งที่ขึ้นต้นด้วย "esri2geojson" คุณจะต้องติดตั้งแพ็กเกจ Python ชื่อ "pyesridump" ผ่านทางบรรทัดคำสั่ง หลังจากติดตั้งแล้วคุณสามารถคัดลอกและวางคำสั่งที่ขึ้นต้นด้วย "esri2geojson" ลงในบรรทัดคำสั่งของคุณ (สำหรับ Mac คุณสามารถใช้แอป Terminal ในตัว) และกดปุ่ม Enter เพื่อเรียกใช้คำสั่ง
stevevance

0

ฉันต้องทำสิ่งนี้เมื่อไม่นานมานี้และนี่เป็นความพยายามอย่างที่สุดของฉัน ฉันเคยพยายามทำ"objectid non in {}".format(ids)ที่รหัสจะเป็น tuple ของวัตถุที่เก็บรวบรวม แต่ url จะไม่ส่งคืนข้อมูลใด ๆ จะต้องมีข้อ จำกัด เกี่ยวกับระยะเวลาที่สตริงประโยคที่สามารถ รหัสนี้บางรหัสเป็นรหัสยากและถ้ารหัสไม่ต่อเนื่องกว่าสคริปต์นี้ส่วนใหญ่จะไม่ทำงาน แต่อย่างไรก็ตามฉันหวังว่านี่จะช่วยนำทาง

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")
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.