Connect to and get data from ArcGIS REST services

O.Kaufmann, 2023.

[1]:
from geometron.plot import basemaps
from geometron.utils.url import url_open_with_retry, http_request, url_request_string
from geometron.utils.str import remove_accents
from geometron.utils.geoservices import arcgis_rest_services_directory, esri_rest_server_request, esri_rest_server_metadata
import urllib
import json
import pandas as pd
[2]:
#server = 'https://geoservices.wallonie.be/arcgis/rest/services/'
server = 'https://ags.geo.api.vlaanderen.be/arcgis/rest/services/'

Retrieve a dataframe describing available services from an ESRI REST server using a keyword

[3]:
arcgis_rest_services_directory(server, keyword='vlm')
https://ags.geo.api.vlaanderen.be/arcgis/rest/services//vlm/MapServer
https://ags.geo.api.vlaanderen.be/arcgis/rest/services//vlm/MapServer/0
https://ags.geo.api.vlaanderen.be/arcgis/rest/services//vlm/MapServer/1
https://ags.geo.api.vlaanderen.be/arcgis/rest/services//vlm/MapServer/2
https://ags.geo.api.vlaanderen.be/arcgis/rest/services//vlm/MapServer/3
https://ags.geo.api.vlaanderen.be/arcgis/rest/services//vlm/MapServer/4
https://ags.geo.api.vlaanderen.be/arcgis/rest/services//vlm/MapServer/5
https://ags.geo.api.vlaanderen.be/arcgis/rest/services//vlm/MapServer/6
https://ags.geo.api.vlaanderen.be/arcgis/rest/services//vlm/MapServer/7
https://ags.geo.api.vlaanderen.be/arcgis/rest/services//vlm/MapServer/8
https://ags.geo.api.vlaanderen.be/arcgis/rest/services//vlm/MapServer/9
https://ags.geo.api.vlaanderen.be/arcgis/rest/services//vlm/MapServer/10
https://ags.geo.api.vlaanderen.be/arcgis/rest/services//vlm/MapServer/11
https://ags.geo.api.vlaanderen.be/arcgis/rest/services//vlm/MapServer/12
https://ags.geo.api.vlaanderen.be/arcgis/rest/services//vlm/MapServer/13
https://ags.geo.api.vlaanderen.be/arcgis/rest/services//vlm/MapServer/14
https://ags.geo.api.vlaanderen.be/arcgis/rest/services//vlm/MapServer/15
https://ags.geo.api.vlaanderen.be/arcgis/rest/services//vlm/MapServer/16
https://ags.geo.api.vlaanderen.be/arcgis/rest/services//vlm/MapServer/17
https://ags.geo.api.vlaanderen.be/arcgis/rest/services//vlm/MapServer/18
https://ags.geo.api.vlaanderen.be/arcgis/rest/services//vlm/MapServer/19
https://ags.geo.api.vlaanderen.be/arcgis/rest/services//vlm/MapServer/20
https://ags.geo.api.vlaanderen.be/arcgis/rest/services//vlm/MapServer/21
https://ags.geo.api.vlaanderen.be/arcgis/rest/services//vlm/MapServer/22
https://ags.geo.api.vlaanderen.be/arcgis/rest/services//vlm/MapServer/23
https://ags.geo.api.vlaanderen.be/arcgis/rest/services//vlm/MapServer/24
[3]:
folder services service_type id_layer name alias layer_type url
0 vlm MapServer 0 beheergebieden beheergebieden Group Layer https://ags.geo.api.vlaanderen.be/arcgis/rest/...
1 vlm MapServer 1 behgebgrasland behgebgrasland Feature Layer https://ags.geo.api.vlaanderen.be/arcgis/rest/...
2 vlm MapServer 2 behgebwaterkwal behgebwaterkwal Feature Layer https://ags.geo.api.vlaanderen.be/arcgis/rest/...
3 vlm MapServer 3 behgebweidevogel behgebweidevogel Feature Layer https://ags.geo.api.vlaanderen.be/arcgis/rest/...
4 vlm MapServer 4 behgebakkervogel behgebakkervogel Feature Layer https://ags.geo.api.vlaanderen.be/arcgis/rest/...
5 vlm MapServer 5 behgebnat2000 behgebnat2000 Feature Layer https://ags.geo.api.vlaanderen.be/arcgis/rest/...
6 vlm MapServer 6 gebnit gebnit Feature Layer https://ags.geo.api.vlaanderen.be/arcgis/rest/...
7 vlm MapServer 7 gebnit19 gebnit19 Feature Layer https://ags.geo.api.vlaanderen.be/arcgis/rest/...
8 vlm MapServer 8 gebnit21 gebnit21 Feature Layer https://ags.geo.api.vlaanderen.be/arcgis/rest/...
9 vlm MapServer 9 gebnit23 gebnit23 Feature Layer https://ags.geo.api.vlaanderen.be/arcgis/rest/...
10 vlm MapServer 10 natuurinrichting natuurinrichting Group Layer https://ags.geo.api.vlaanderen.be/arcgis/rest/...
11 vlm MapServer 11 rvvnatinrprj rvvnatinrprj Feature Layer https://ags.geo.api.vlaanderen.be/arcgis/rest/...
12 vlm MapServer 12 natinrprj natinrprj Feature Layer https://ags.geo.api.vlaanderen.be/arcgis/rest/...
13 vlm MapServer 13 ruilverkaveling ruilverkaveling Group Layer https://ags.geo.api.vlaanderen.be/arcgis/rest/...
14 vlm MapServer 14 rvkinderminne rvkinderminne Feature Layer https://ags.geo.api.vlaanderen.be/arcgis/rest/...
15 vlm MapServer 15 rvvrvkgiw rvvrvkgiw Feature Layer https://ags.geo.api.vlaanderen.be/arcgis/rest/...
16 vlm MapServer 16 rvkgrinfrawerken rvkgrinfrawerken Feature Layer https://ags.geo.api.vlaanderen.be/arcgis/rest/...
17 vlm MapServer 17 rvvrvkukw rvvrvkukw Feature Layer https://ags.geo.api.vlaanderen.be/arcgis/rest/...
18 vlm MapServer 18 rvkkrachtwet rvkkrachtwet Feature Layer https://ags.geo.api.vlaanderen.be/arcgis/rest/...
19 vlm MapServer 19 landinrichting landinrichting Group Layer https://ags.geo.api.vlaanderen.be/arcgis/rest/...
20 vlm MapServer 20 rvvlandinrpl rvvlandinrpl Feature Layer https://ags.geo.api.vlaanderen.be/arcgis/rest/...
21 vlm MapServer 21 landinrpl landinrpl Feature Layer https://ags.geo.api.vlaanderen.be/arcgis/rest/...
22 vlm MapServer 22 vastgestlandinrprj vastgestlandinrprj Feature Layer https://ags.geo.api.vlaanderen.be/arcgis/rest/...
23 vlm MapServer 23 landinrinond landinrinond Feature Layer https://ags.geo.api.vlaanderen.be/arcgis/rest/...
24 vlm MapServer 24 fyssyst fyssyst Feature Layer https://ags.geo.api.vlaanderen.be/arcgis/rest/...

Create a request to an ESRI REST server and display the reply as a json

[4]:
esri_rest_server_request?
[5]:
r = esri_rest_server_request('geoservices.wallonie.be', folder='IMAGERIE', service='ORTHO_2020', service_type='MapServer', verbose=True)
url:
https://geoservices.wallonie.be/arcgis/rest/services/IMAGERIE/ORTHO_2020/MapServer/?f=pjson

[6]:
resp = url_open_with_retry(r)
[7]:
resp.read()
[7]:
b'{\n "currentVersion": 10.51,\n "serviceDescription": "Ce service de visualisation REST permet de consulter l\'image orthorectifiée et mosaïquée couvrant l\'entièreté du territoire wallon à une résolution de 25 cm pour l\'année 2020.\\nPour tout complément d\'informations, veuillez consulter https://geoportail.wallonie.be/catalogue/cf1f6fae-d938-42ba-8e2c-18de5d450122.html",\n "mapName": "Layers",\n "description": "",\n "copyrightText": "SPW",\n "supportsDynamicLayers": true,\n "layers": [\n  {\n   "id": 0,\n   "name": "ORTHO_2020",\n   "parentLayerId": -1,\n   "defaultVisibility": true,\n   "subLayerIds": null,\n   "minScale": 0,\n   "maxScale": 0\n  }\n ],\n "tables": [],\n "spatialReference": {\n  "wkid": 102199,\n  "latestWkid": 3812\n },\n "singleFusedMapCache": false,\n "initialExtent": {\n  "xmin": 495814.35533628846,\n  "ymin": 484814.15198506153,\n  "xmax": 823759.8872449,\n  "ymax": 703125.8034499779,\n  "spatialReference": {\n   "wkid": 102199,\n   "latestWkid": 3812\n  }\n },\n "fullExtent": {\n  "xmin": 542000.7987416779,\n  "ymin": 519988.6172621446,\n  "xmax": 796016.2987416779,\n  "ymax": 668017.8672621446,\n  "spatialReference": {\n   "wkid": 102199,\n   "latestWkid": 3812\n  }\n },\n "minScale": 0,\n "maxScale": 0,\n "units": "esriMeters",\n "supportedImageFormatTypes": "PNG32,PNG24,PNG,JPG,DIB,TIFF,EMF,PS,PDF,GIF,SVG,SVGZ,BMP",\n "documentInfo": {\n  "Title": "ORTHO_2020",\n  "Author": "",\n  "Comments": "Ce service de visualisation REST permet de consulter l\'image orthorectifi\xc3\xa9e et mosa\xc3\xafqu\xc3\xa9e couvrant l\'enti\xc3\xa8ret\xc3\xa9 du territoire wallon \xc3\xa0 une r\xc3\xa9solution de 25 cm pour l\'ann\xc3\xa9e 2020.\\nPour tout compl\xc3\xa9ment d\'informations, veuillez consulter http://geoportail.wallonie.be/catalogue/17dab011-b21a-486c-b602-6ec141f1f059.html\\n",\n  "Subject": "Ce service de visualisation REST permet de consulter l\'image orthorectifiée et mosaïquée couvrant l\'entièreté du territoire wallon pour l\'année 2020.",\n  "Category": "",\n  "AntialiasingMode": "None",\n  "TextAntialiasingMode": "Force",\n  "Keywords": "ortho,orthophoto,orthophotoplan,vue aérienne,image aérienne,IR,infra-rouge,ortho_2020,orthoimagerie,infrarouge,REST"\n },\n "capabilities": "Map,Query,Data",\n "supportedQueryFormats": "JSON, AMF, geoJSON",\n "exportTilesAllowed": false,\n "datumTransformations": [\n  {\n   "geoTransforms": [\n    {\n     "wkid": 108001,\n     "latestWkid": 1241,\n     "transformForward": true,\n     "name": "NAD_1927_To_NAD_1983_NADCON"\n    }\n   ]\n  },\n  {\n   "geoTransforms": [\n    {\n     "wkid": 108001,\n     "latestWkid": 1241,\n     "transformForward": false,\n     "name": "NAD_1927_To_NAD_1983_NADCON"\n    }\n   ]\n  },\n  {\n   "geoTransforms": [\n    {\n     "wkid": 1609,\n     "latestWkid": 1609,\n     "transformForward": true,\n     "name": "Belge_1972_To_WGS_1984_1"\n    }\n   ]\n  },\n  {\n   "geoTransforms": [\n    {\n     "wkid": 1609,\n     "latestWkid": 1609,\n     "transformForward": false,\n     "name": "Belge_1972_To_WGS_1984_1"\n    }\n   ]\n  }\n ],\n "supportsDatumTransformation": true,\n "maxRecordCount": 1000,\n "maxImageHeight": 4096,\n "maxImageWidth": 4096,\n "supportedExtensions": "WMSServer"\n}'

Retrieve metadata from an ESRI REST server

[8]:
host = 'geoservices.wallonie.be'
folder = 'IMAGERIE'
service = 'ORTHO_2020'
esri_rest_server_metadata(host, folder=folder, service=service)
url:
https://geoservices.wallonie.be/arcgis/rest/services/IMAGERIE/ORTHO_2020/MapServer/?f=pjson

[8]:
{'currentVersion': 10.51,
 'serviceDescription': "Ce service de visualisation REST permet de consulter l'image orthorectifiée et mosaïquée couvrant l'entièreté du territoire wallon à une résolution de 25 cm pour l'année 2020.\nPour tout complément d'informations, veuillez consulter https://geoportail.wallonie.be/catalogue/cf1f6fae-d938-42ba-8e2c-18de5d450122.html",
 'mapName': 'Layers',
 'description': '',
 'copyrightText': 'SPW',
 'supportsDynamicLayers': True,
 'layers': [{'id': 0,
   'name': 'ORTHO_2020',
   'parentLayerId': -1,
   'defaultVisibility': True,
   'subLayerIds': None,
   'minScale': 0,
   'maxScale': 0}],
 'tables': [],
 'spatialReference': {'wkid': 102199, 'latestWkid': 3812},
 'singleFusedMapCache': False,
 'initialExtent': {'xmin': 495814.35533628846,
  'ymin': 484814.15198506153,
  'xmax': 823759.8872449,
  'ymax': 703125.8034499779,
  'spatialReference': {'wkid': 102199, 'latestWkid': 3812}},
 'fullExtent': {'xmin': 542000.7987416779,
  'ymin': 519988.6172621446,
  'xmax': 796016.2987416779,
  'ymax': 668017.8672621446,
  'spatialReference': {'wkid': 102199, 'latestWkid': 3812}},
 'minScale': 0,
 'maxScale': 0,
 'units': 'esriMeters',
 'supportedImageFormatTypes': 'PNG32,PNG24,PNG,JPG,DIB,TIFF,EMF,PS,PDF,GIF,SVG,SVGZ,BMP',
 'documentInfo': {'Title': 'ORTHO_2020',
  'Author': '',
  'Comments': "Ce service de visualisation REST permet de consulter l'image orthorectifiée et mosaïquée couvrant l'entièreté du territoire wallon à une résolution de 25 cm pour l'année 2020.\nPour tout complément d'informations, veuillez consulter http://geoportail.wallonie.be/catalogue/17dab011-b21a-486c-b602-6ec141f1f059.html\n",
  'Subject': "Ce service de visualisation REST permet de consulter l'image orthorectifiée et mosaïquée couvrant l'entièreté du territoire wallon pour l'année 2020.",
  'Category': '',
  'AntialiasingMode': 'None',
  'TextAntialiasingMode': 'Force',
  'Keywords': 'ortho,orthophoto,orthophotoplan,vue aérienne,image aérienne,IR,infra-rouge,ortho_2020,orthoimagerie,infrarouge,REST'},
 'capabilities': 'Map,Query,Data',
 'supportedQueryFormats': 'JSON, AMF, geoJSON',
 'exportTilesAllowed': False,
 'datumTransformations': [{'geoTransforms': [{'wkid': 108001,
     'latestWkid': 1241,
     'transformForward': True,
     'name': 'NAD_1927_To_NAD_1983_NADCON'}]},
  {'geoTransforms': [{'wkid': 108001,
     'latestWkid': 1241,
     'transformForward': False,
     'name': 'NAD_1927_To_NAD_1983_NADCON'}]},
  {'geoTransforms': [{'wkid': 1609,
     'latestWkid': 1609,
     'transformForward': True,
     'name': 'Belge_1972_To_WGS_1984_1'}]},
  {'geoTransforms': [{'wkid': 1609,
     'latestWkid': 1609,
     'transformForward': False,
     'name': 'Belge_1972_To_WGS_1984_1'}]}],
 'supportsDatumTransformation': True,
 'maxRecordCount': 1000,
 'maxImageHeight': 4096,
 'maxImageWidth': 4096,
 'supportedExtensions': 'WMSServer'}
[ ]: