ArcGIS REST Hizmetinden Veri Kümesini İndirin


Yanıtlar:


27

Bu harita hizmeti, genellikle yalnızca WMS gibi görüntüleri ve belirli sorgu sonuçlarını döndüren bir ArcGIS Server Dinamik Harita hizmetidir. Bazı ArcGIS Server görüntü hizmetleri veri indirmeye izin verir, ancak bu bunlardan biri değildir.

Aradığınız işlemi sorgulama işlemi yoluyla alabilirsiniz, ancak bu hizmetteki maksimum kayıt dönüş sınırı 1000 olduğundan ve yalnızca v14 katmanında 58000'den fazla kayıt olduğu için birden çok sorgu alır.

Sorgu göndermek için katman uç noktasına gidin ve desteklenen işlemler için en alta kaydırın, ardından Sorgu'yu tıklayın . Toplam kayıt sayısını bulmak için , Nerede alanına 1 = 1 girin ve Yalnızca Geri Sayım için Doğru öğesini seçin , 58919 kayıt gibi görünür. Bir seferde yalnızca 1000 kayıt döndürür, bu nedenle tüm kayıtları almak için 59 sorgu yayınlamanız gerekir. OBJECTID ile filtrelemek en kolay görünüyor, bu nedenle ilk sorgu NEREDEN <HEDEF <1000, Out Fields = *, Return Geometry = TRUE, Return Count = False ve Format HTML'dir . Hizmet, 1-999 arasındaki tüm özellikleri ve özelliklerini döndürür. Çıktı biçimini KMZ olarak değiştirebilir ve daha sonra istediğiniz biçime dönüştürebilirsiniz, yineleme yapabilirsiniz ve tüm verilere sahip olabilirsiniz.

İşe yarayacak başka bir yöntem, özellik uç noktasını kullanarak bireysel özellik bilgilerini programlı olarak ele geçirmektir. Yukarıdaki HTML biçimli yanıtta, NESNE KİMLİĞİ özniteliği aslında yalnızca o özelliğin özniteliklerine bir köprüdür . REST URL'si NESNE KİMLİĞİ ile biter, böylece ayrıştırmayı kolaylaştırmak için bunu arttırabilir ve JSON'daki her yanıtı alabilirsiniz .

NOT - bu özelliklerin / bağlantıların bazıları yalnızca ArcGIS Server 10.1 REST uç noktaları için geçerlidir.


3
+1 Bazen return IDs onlyObjectID'ler (ArcSDE'de olduğu gibi) sıralı değildir, bu nedenle 58919 kimliğinin tümünü döndüren belki de daha genel bir çözüm olacaktır .
Kirk Kuykendall

İyi bir nokta, bunun da kiremitli harita hizmetleri için aynı şekilde ortaya çıkmadığını not etmek iyi.
wwnick

@wwnick, nesne kimliğine göre veri almaya çalıştığınızda "JSON'daki her yanıtı al" dediğini söylediniz. Ancak bu durumda veri formatı "pjson" veya "json" şeklindedir, ancak bu iki formatı nasıl shapefil veya diğer ortak coğrafi veri formatına dönüştürür ve en kolay olanı nedir?
SIslam

İhtiyacınız olan biçime json dönüştürmek için OGR kullanabilirsiniz .
wwnick

9

Kendimi her zaman bir Harita Hizmetinden tüm verileri bir şekil dosyasına aktarmam gereken durumlarda bulurum. İşte bir hizmetten her özelliği dışa aktaracak ve ihtiyacınız varsa şekil dosyası ve geojson olarak kaydedecek kullanımı çok kolay bir yardımcı programdır. Node.js'ye sahip olmanız veya yüklemeniz gerekecektir.

https://github.com/tannerjt/AGStoShapefile

Dosyaları sisteminize koyduktan sonra, klasöre gidin, harita hizmetinizi services.txt dosyasına ekleyin ve bunu komut satırından çalıştırın:

node AGStoSHP.txt services.txt ./output/

Hizmetinize bir ad eklemek için services.txt dosyanıza bir kanal (|) koyduğunuzdan emin olun.

Umarım bu, bu işlevselliğe ihtiyaç duyan diğerlerine yardımcı olur.


Bu cevap, gis.stackexchange.com/questions/98485/… 'de yayınlanan yanıtla aynıdır. Aynı cevaplar genellikle uygulandıkları soruların kopyalanması gerektiği anlamına gelir. Eğer durum buysa, lütfen onları böyle işaretleyin.
PolyGeo

Teşekkürler, diğer soruyu yinelenen olarak işaretledim. Onlara farklı şekillerde sorulur, ancak temel olarak aynıdır.
jOshT

4

Bir ArcGIS REST MapServer üzerinde depolanan verileri komut satırını ve Python paketi pyesridump'ı kullanarak birer birer indirin .

Örnek komut:

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

bu yöntem hakkında daha fazla ayrıntı verebilir misiniz?
NULL.Dude

1
@ Geo.Dude "esri2geojson" ile başlayan komutu kullanmak için, komut satırından "pyesridump" adlı Python paketini kurmanız gerekir. Bunu yükledikten sonra "esri2geojson" ile başlayan komutu kopyalayıp komut satırınıza yapıştırabilirsiniz (Mac'te yerleşik Terminal uygulamasını kullanabilirsiniz) ve komutu çalıştırmak için Enter tuşuna basın.
stevevance

0

Son zamanlarda bunu yapmak zorunda kaldı ve bu şimdiye kadar benim en iyi girişim oldu. Başlangıçta "objectid non in {}".format(ids)ids toplanan objectid bir demet olacağını ama url herhangi bir veri döndürmek olmaz bir yerde yapmaya çalışıyordu , nerede yan tümce dizgisi ne kadar olabilir bir sınır olmalıdır. Bu kodun bazıları sabit kodlanmıştır ve kimlikleri bu komut dosyasından sıralı değilse büyük olasılıkla çalışmaz. ama yine de umarım bu rehber yardımcı olur

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")
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.