Descargar conjunto de datos desde el servicio REST de ArcGIS

16

Mirando esta página de información para un conjunto de datos alojado en esri.com:
enlace

Intentando averiguar cómo puedo obtener acceso a los datos sin procesar (ya sea coordenadas sin formato de lat / lng o SHP).

Parece que los datos están disponibles, simplemente no puedo averiguar cómo extraerlos de esta interfaz.

    
pregunta Steve Horn 06.11.2012 - 19:37

4 respuestas

22

Ese servicio de mapas es un servicio de ArcGIS Server Dynamic Map que generalmente solo devuelve imágenes y resultados de consultas específicas, como un WMS. Algunos servicios de imágenes de ArcGIS Server permiten la descarga de datos, pero este no es uno de esos.

Puede obtener la información que está buscando a través de la operación de consulta, pero tomará varias consultas ya que el límite máximo de retorno de registro en este servicio es 1000, y hay más de 58000 registros solo en la capa v14.

Para enviar consultas, vaya a punto final de capa y desplácese en la parte inferior de las operaciones admitidas, luego haga clic en Query . Para encontrar el número total de registros, , se parece a 58919 registros. Solo devolverá 1000 registros a la vez, por lo que tendrá que emitir 59 consultas para obtener todos los registros. Parece más fácil de filtrar por OBJECTID, por lo que la primera consulta sería . El servicio devuelve todas las características 1-999 y sus atributos. Puede cambiar el formato de salida a KMZ y convertirlo al formato deseado más tarde, iterar a través y tendrá todos los datos.

Otro método que funcionaría es capturar programáticamente la información de la característica individual utilizando el punto final de la característica. En la respuesta en formato HTML de arriba, el atributo OBJECTID es en realidad un hipervínculo al atributos para solo esa característica . La URL de REST finaliza con el OBJECTID, por lo que puede incrementar eso y capture cada respuesta en JSON para facilitar el análisis.

NOTA: algunas de estas funciones / enlaces solo son aplicables a los puntos finales REST de ArcGIS Server 10.1.

    
respondido por el wwnick 06.11.2012 - 20:46
8

Siempre me encuentro en situaciones en las que necesito exportar todos los datos de un Servicio de mapas a un shapefile. Aquí hay una utilidad muy fácil de usar que exportará cada característica de un servicio y la guardará como un shapefile y geojson si la necesita. Deberá tener o instalar node.js.

enlace

Una vez que haya colocado los archivos en su sistema, simplemente navegue hasta la carpeta, agregue su servicio de mapas al archivo services.txt y ejecute esto desde la línea de comandos:

node AGStoSHP.txt services.txt ./output/

Asegúrese de poner una canalización (|) en su archivo services.txt para agregar un nombre a su servicio.

Espero que esto ayude a otros que necesitan esta funcionalidad.

    
respondido por el jOshT 12.09.2015 - 06:43
3

Descargue los datos almacenados en ArcGIS REST MapServer, una capa a la vez, utilizando la línea de comandos y el paquete Python pyesridump .

Ejemplo de comando:

esri2geojson http://gis.naperville.il.us/arcgis/rest/services/OpenData/OpenDataMapService/MapServer/4 naperville_parking_lots_122417.geojson
    
respondido por el stevevance 25.12.2017 - 01:56
0

Tuve que hacer esto recientemente y este fue mi mejor intento hasta ahora. Originalmente estaba intentando hacer un "objectid non in {}".format(ids) donde los id serían una tupla de objectid recopilados, pero la url no devolvería ningún dato, debe haber un límite en cuanto a la duración de la cadena de la cláusula where. parte de este código está codificado y, si los identificadores no son secuenciales, este script no funcionará. pero de todos modos espero que esto sirva de guía

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")
    
respondido por el ziggy 08.08.2018 - 17:42

Lea otras preguntas en las etiquetas