PROCÉDURE
Dans certains cas, les utilisateurs activent la fonction Accès aux entités sur les services de carte pour faciliter le téléchargement des données. Or, les données peuvent être téléchargées à partir d’un service de carte en notation JSON et le code JSON peut être converti vers un shapefile ou une classe d’entités. Cet article indique la marche à suivre dans le cas de services de carte partagés avec le public à l’aide de bibliothèques ArcPy et d’autres bibliothèques Python intégrées.
Les instructions suivantes détaillent la procédure pour rechercher des entités dans un service de carte, écrire la réponse JSON dans un fichier et convertir le fichier JSON en un shapefile à l’aide de la fonction arcpy.JSONToFeatures_conversion(). Il est possible d’utiliser le script tel quel ou de le présenter sous forme de fonctions acceptant un argument URL.
Ajustez les paramètres de requête comme il convient (la plupart, mais non l’ensemble des paramètres possibles sont inclus). Les fichiers en sortie sont stockés dans le répertoire contenant le script Python.
# Pour Python 2 import urllib2, urllib, os, arcpy
# Pour Python 3 import urllib.parse, urllib.request, os, arcpy
username = "adminaccount" password = "adminpassword" tokenURL = 'https://machine.domain.com/portal/sharing/rest/generateToken/' params = {'f': 'pjson', 'username': username, 'password': password, 'referer': 'https://machine.domain.com'} #Pour Python 2 req = urllib2.Request(tokenURL, urllib.urlencode(params)) response = urllib2.urlopen(req) #Pour Python 3 req = urllib.Request(tokenURL, urllib.urlencode(params)) response = urllib.parse.urlopen(req) data = json.load(response) token = data['token'] params= {'f': 'pjson', 'token': token}
url = "https://sampleserver6.arcgisonline.com/arcgis/rest/services/Census/MapServer/3/query?"
#Pour Python 2 params = urllib.urlencode({'where': '1=1', 'geometryType': 'esriGeometryEnvelope', 'spatialRel': 'esriSpatialRelIntersects', 'relationParam': '', 'outFields': '*', 'returnGeometry': 'true', 'geometryPrecision':'', 'outSR': '', 'returnIdsOnly': 'false', 'returnCountOnly': 'false', 'orderByFields': '', 'groupByFieldsForStatistics': '', 'returnZ': 'false', 'returnM': 'false', 'returnDistinctValues': 'false', 'f': 'pjson' })
# Pour Python 3 params = {'where': '1=1', 'geometryType': 'esriGeometryEnvelope', 'spatialRel': 'esriSpatialRelIntersects', 'relationParam': '', 'outFields': '*', 'returnGeometry': 'true', 'geometryPrecision':'', 'outSR': '', 'returnIdsOnly': 'false', 'returnCountOnly': 'false', 'orderByFields': '', 'groupByFieldsForStatistics': '', 'returnZ': 'false', 'returnM': 'false', 'returnDistinctValues': 'false', 'f': 'pjson' } encode_params = urllib.parse.urlencode(params).encode("utf-8")
# Pour Python 2 request = urllib2.Request(url, params) response = urllib2.urlopen(request) json = response.read()
# Pour Python 3 response = urllib.request.urlopen(url, encode_params) json = response.read()
with open("mapservice.json", "wb") as ms_json: ms_json.write(json)
ws = os.getcwd() + os.sep arcpy.JSONToFeatures_conversion("mapservice.json", ws + "mapservice.shp")
import urllib2, urllib, os, arcpy url = "https://sampleserver6.arcgisonline.com/arcgis/rest/services/Census/MapServer/3/query?" params = urllib.urlencode({'where': '1=1', 'geometryType': 'esriGeometryEnvelope', 'spatialRel': 'esriSpatialRelIntersects', 'relationParam': '', 'outFields': '*', 'returnGeometry': 'true', 'geometryPrecision':'', 'outSR': '', 'returnIdsOnly': 'false', 'returnCountOnly': 'false', 'orderByFields': '', 'groupByFieldsForStatistics': '', 'returnZ': 'false', 'returnM': 'false', 'returnDistinctValues': 'false', 'f': 'pjson' }) request = urllib2.Request(url, params) response = urllib2.urlopen(request) json = response.read() with open("mapservice.json", "wb") as ms_json: ms_json.write(json) ws = os.getcwd() + os.sep arcpy.JSONToFeatures_conversion("mapservice.json", ws + "mapservice.shp")
import urllib.parse, urllib.request, os, arcpy url = "https://sampleserver6.arcgisonline.com/arcgis/rest/services/Census/MapServer/3/query?" params = {'where': '1=1', 'geometryType': 'esriGeometryEnvelope', 'spatialRel': 'esriSpatialRelIntersects', 'relationParam': '', 'outFields': '*', 'returnGeometry': 'true', 'geometryPrecision':'', 'outSR': '', 'returnIdsOnly': 'false', 'returnCountOnly': 'false', 'orderByFields': '', 'groupByFieldsForStatistics': '', 'returnZ': 'false', 'returnM': 'false', 'returnDistinctValues': 'false', 'f': 'pjson' } encode_params = urllib.parse.urlencode(params).encode("utf-8") response = urllib.request.urlopen(url, encode_params) json = response.read() with open("mapservice.json", "wb") as ms_json: ms_json.write(json) ws = os.getcwd() + os.sep arcpy.JSONToFeatures_conversion("mapservice.json", ws + "mapservice.shp")
Obtenir de l’aide auprès des experts ArcGIS
Télécharger l’application Esri Support