Le blog francophone consacré
aux technologies Esri

Premiers pas avec Jupyter Notebook et l'API Python ArcGIS

Il y a quelques jours, j'ai évoqué sur arcOrama les avantages de l'API Python ArcGIS pour disposer d'une API Python pour automatiser des tâches autour de son SIG distribué (ou SIG Web) ArcGIS. J'ai également eu l'occasion d'expliqué l'intérêt de pouvoir utiliser cette API dans une IDE telle que Jupyter Notebook.

Aujourd'hui, je vous propose un premier tutorial sur l'usage de l'API ArcGIS for Python dans le contexte Jupyter Notebook à travers un premier Notebook qui vous permettra de découvrir les concepts de bases de l'API et en particulier de l'objet GIS.

  
Le Notebook présenté ci-dessous est téléchargeable ici.

Tuto 1: Premiers pas avec Jupyter Notebook et l'objet GIS

L'objet GIS est l'objet principal lorsque vous travaillez avec l'API Python ArcGIS. Il représente le SIG distribué avec lequel vous souhaitez travailler. Il peut s'agir d'une connexion via un portail ArcGIS Online ou ArcGIS Enterprise. L'objet GIS permet de consommer et de publier des contenus SIG mais il permet également aux administrateur de gérer les utilisateurs, les groupes, les applications et datastores.
Pour créer cet objet 'GIS' qui constitue le point d'entrée de tous vos scripts, il suffit de l'importer depuis le module 'arcgis.gis":
In [1]:
from arcgis.gis import GIS
Pour créer une instance de cet objet GIS, vous passez l'url du portai et vos informations d'identification. Si vous ne souhaitez pas enregistrer le mot de passe dans le script, vous pouvez ne pas mettre le troisième argument. Il sera alors demandé interactivement à l'exécution du code.
In [2]:
my_gis = GIS("https://www.arcgis.com", "username", "password")
Si vous ne souhaitez pas enregistrer le mot de passe dans le script, vous pouvez ne pas mettre le troisième argument. Il sera alors demandé interactivement à l'exécution du code.
In [3]:
my_gis = GIS("https://www.arcgis.com", "username")
Enter password: ········
Pour une connexion anonyme à ArcGIS Online, vous pourrez utiliser le code suivant:
In [4]:
my_gis = GIS()
Si vous vous connectez à un portail ArcGIS avec un compte d'organisation, selon vos privilèges vous aurez accès à différentes propriétés de ce portail.
In [5]:
my_gis = GIS("https://www.arcgis.com", "username", "password")
In [6]:
my_gis.properties.availableCredits
Out[6]:
23316.256
In [7]:
my_gis.properties.isPortal
Out[7]:
False
In [8]:
my_gis.properties.name
Out[8]:
'Esri France'
Un point d'interogation directement positionné après une variable (ou une classe d'objet) permet d'afficher l'aide sur cet objet.
In [9]:
my_gis?
Vous pouvez maintenant utiliser l'objet GIS. Ce dernier propose des objets "helpers" permettant d'accéder et de gérer simplement différentes ressources, tels que les utilisateurs, les groupes, les contenus ou les datastores. Les objets correspondants se nomment respectivement: users, groups, content et datastore.
Par exemple, ci-dessous un exemple permettant de récupérer un utilisateur spécifique parmi la liste des utilisateurs via l'objet GIS.
In [10]:
user = my_gis.users.get('glavenu')
L'API Python ArcGIS est intégrée avec Jupyter Notebook pour rendre facile la visualisation et l'interaction avec les ressources de votre SIG Web. Pour cela, des représentations riches peuvent être utilisée dans votre code Python pour mieux comprendre les ressources que vous manipulez:
In [11]:
user
Out[11]:
Gaetan LAVENU

Bio: Responsable Communication Technique - Esri France
First Name: Gaetan
Last Name: LAVENU
Username: glavenu
Joined: January 28, 2012
Les propriétés de ces ressources peuvent se récupérer en utilisant la notation ['propriété']:
In [12]:
user.keys()
Out[12]:
dict_keys(['units', 'description', 'id', 'cultureFormat', 'modified', 'thumbnail', 'provider', 'username', 'firstName', 'lastName', 'culture', 'fullName', 'created', 'region', 'tags'])
In [13]:
user['firstName']
Out[13]:
'Gaetan'
Ces propriétés peuvent aussi être récupérées en tant que propriété de l'objet à l'aide d'un simple ".":
In [14]:
user.firstName + ' ' + user.lastName + ' ' + user.culture
Out[14]:
'Gaetan LAVENU fr'
In [15]:
from datetime import datetime
ts = user.created/1000
print(datetime.utcfromtimestamp(ts).strftime('%d-%m-%Y %H:%M:%S'))
28-01-2012 13:30:48

Interagir avec des contenus

L'objet GIS vous permet d'utiliser des cartes web pour visualiser des contenus. Il peut s'gir de cartes existantes sur votre portail ou simplement de cartes créées dynamiquement par votre code. Cette carte 2D (ou 3D) pourra servir, par exemple, à afficher le résultat d'une analyse faite en ligne ou à partir de données locales.
In [16]:
my_map = my_gis.map()
my_map


L'instanciation d'une carte peut également se faire en spécifiant une adresse ou un nom de lieu ainsi qu'un niveau d'échelle pour le cadrage initial.
In [17]:
my_map = my_gis.map("Tour Eiffel",17)
my_map


L'objet GIS est également l'objet qui vous permet de récupérer l'objet 'ContentManager' qui vous permettra différentes opération l'ajout, la suppression, la modification ou simplement la recherche de contenus.
In [18]:
my_items =  my_gis.content.search('PLU',item_type='Feature Layer',outside_org=True)
for the_item in my_items:
    display(the_item)
OAP
Feature Layer Collection by olivier.poilpre
Last Modified: décembre 18, 2017
0 comments, 14086 views
PLU de Raffetot (Zonage)
Zonage du PLU de la commune de RaffetotFeature Layer Collection by cauxseine
Last Modified: janvier 10, 2018
0 comments, 8 views
SEEBACH_NIEDERSEEBACH_ZONAGE_v2
SEEBACHFeature Layer Collection by ote_ingenierie
Last Modified: juillet 06, 2017
0 comments, 552 views
POS_PLU_Grendelbruch2
sdqsdFeature Layer Collection by carto_SMPV
Last Modified: décembre 01, 2017
0 comments, 104 views
POS_PLU_BARR
sqbdFeature Layer Collection by carto_SMPV
Last Modified: mars 20, 2018
0 comments, 129 views
WISSEMBOURG_SITE_INSCRIT
Plan de règlement de la commune de WissembourgFeature Layer Collection by ote_ingenierie
Last Modified: décembre 18, 2013
0 comments, 2933 views
Layers_NomsVoies
Feature Layer Collection by hugues.riff
Last Modified: décembre 01, 2015
0 comments, 19462 views
PLU - Zones naturelles
Zone naturelle des plans de zonage des PLU de VGPFeature Layer Collection by cmontonirios
Last Modified: juin 15, 2018
0 comments, 444 views
Zone PLU
Feature Layer Collection by Agglopae
Last Modified: avril 22, 2016
0 comments, 131 views
PLU_format_CNIG_WFL3
PLU des 5 communes de la CCBTAFeature Layer Collection by alacoste
Last Modified: février 22, 2018
0 comments, 72 views
On récupère ici un élément par une recherche dans les contenus.
In [19]:
my_item = my_gis.content.search('production énergie renouvelable France 2012',item_type='Web Map')[0]
my_item
Out[19]:
Sites de production d'énergie renouvelable en France en 2012
Web Map by glavenu_esrifrance
Last Modified: octobre 20, 2018
0 comments, 73 views
On récupère ici un élément directement par son ID.
In [20]:
my_item = my_gis.content.get('62226def755748f0a2275fd4583f1e11')
my_item
Out[20]:
Sites de production d'énergie renouvelable en France en 2012
Web Map by glavenu_esrifrance
Last Modified: octobre 20, 2018
0 comments, 159 views
L'élément étant une carte web, on peut créer un objet WebMap pour interagir avec dans le script.
In [21]:
from arcgis.mapping import WebMap
my_web_map = WebMap(my_item)
my_web_map


De la même manière, on peut récupérer une couche d'entités.
In [22]:
my_feature_layer = my_gis.content.get('b91faa65a84d4ef2b3864454b631500b')
my_feature_layer
Out[22]:
Départements_GéoFLA
REQUIRED: A summary of the intentions with which the data set was developed.Feature Layer Collection by glavenu_esrifrance
Last Modified: octobre 20, 2018
0 comments, 9 views
L'API permet également de créer une nouvelle carte web et d'y ajouter différentes couches existantes ou issues du résultat de vos traitements Python.
In [23]:
new_web_map = WebMap()
new_web_map.add_layer(my_feature_layer)
new_web_map


Cette carte web peut être enregistrée dans vos contenus sur le portail ArcGIS.
In [24]:
webmap_item_properties = {'title':'Limites Départements',
                          'snippet':'Map créée à l\'aide de l\'API Python ArcGIS',
                          'tags':['Départements', 'GeoFLA', 'Limites administratives', 'Python']}

new_web_map.save(webmap_item_properties, thumbnail='https://geoinnova.org/blog-territorio/wp-content/uploads/2016/10/3.jpg')
Out[24]:
Limites Départements
Map créée à l'aide de l'API Python ArcGISWeb Map by glavenu_esrifrance
Last Modified: octobre 21, 2018
0 comments, 0 views


Partager cet article:

Rejoindre la discussion

    Les commentaires à propos de cet article: