<\/HEAD>
Parfois, il peut être nécessaire d'avoir des pièces jointes telles qu'une image multimédia dans la fenêtre contextuelle de notre carte web ou application web, cependant, cela est impossible car les pièces jointes ne s'affichent pas dans un champ comme s'il s'agissait d'un hyperlien. Il est possible d'écrire l'adresse manuellement dans un champ car via le rest nous pourrions savoir comment elle est, qui est essentiellement ainsi : https\/\/direcion du serveur\/rest\/services\/Hosted\/nom du service\/numéro de la couche ou table dans le service\/objectid\/attachments\/objectid de la pièce jointe.<\/P>
<\/P>
Mais c'est quelque chose d'idéal si notre service était composé de peu d'enregistrements ce serait une tâche simple, et la réalité est que normalement nous gérons des centaines ou des milliers de données, c'est pourquoi je vous présente ci-dessous quelque chose que j'ai trouvé dans ce lien : URL link to Attachment Photo when the FeatureLayer is not Shared with Everyone<\/A> grâce à John Evans<\/A> . <\/P><\/P>
Avant de continuer, il est nécessaire que vous sachiez que dans la couche ou table où se trouvent les pièces jointes doit exister un champ texte pour stocker l'URL de la pièce jointe, dans ce cas j'ai créé un champ appelé imageurl dans les tables où j'ai les pièces jointes. Celui-ci est déclaré dans le Script comme 'imageurl' donc si vous avez un autre champ pour stocker l'url, changez simplement cela dans le script python.<\/P>
<\/P>
Tout d'abord, vous devez comprendre comment fonctionnent les services dans ArcGIS Online et Portal. Ils sont similaires mais il existe quelques différences, commençant parce que dans Portal tous les champs des Hosted Services sont en minuscules, ce qui n'arrive pas dans ArcGIS Online.<\/P>
<\/P>
Commençons par le rest, je vous ai déjà mentionné comment ça va mais voici un exemple. Ce que nous allons faire est d'afficher les détails du service que j'ai marqué.<\/P>
<\/P>
<\/P>
<\/P>
En accédant aux détails, il est important que vous observiez l'id que possède ce service, c'est un identifiant unique et pour le script c'est d'une importance vitale.<\/P>
<\/P>
<\/P>
<\/P>
Maintenant un autre concept basique que vous devez savoir est l'url du rest, si vous regardez bien, plus bas sur la page vous pourrez voir que nous avons deux sections une de couches et une autre de tables, dans chacune d'elles nous avons des actions qui permettent d'activer ou réaliser certaines tâches, mais celle qui nous intéresse est celle qui dit URL de service, vous pouvez accéder à n'importe laquelle mais vous devez prendre en compte que l'URL de chaque couche ou table est différente, par ailleurs, celle qui nous intéresse pour notre objectif est la couche ou table qui a les pièces jointes, dans mon cas c'est la table (comment je le sais ? Il suffit d'observer que dans couches il y a "Activer les pièces jointes", c'est-à-dire qu'elle n'en a pas et dans la table il y a "Désactiver les pièces jointes" en d'autres mots c'est celle qui a ce dont nous avons besoin).<\/P>
<\/P>
Dans ce cas j'entrerai seulement dans celle des couches pour que vous observiez quelque chose d'important, donc en entrant à URL de service, cela nous mène ici.<\/P>
<\/P>
<\/P>
<\/P>
Sur cette image j'ai marqué deux choses, la première est où nous pouvons revenir au service qui contient toutes les couches et tables, et en second lieu l'ID de la couche, maintenant je cliquerai sur le service pour voir son contenu et pouvoir voir l'ID de toutes les couches et tables qui composent le service.<\/P>
<\/P>
<\/P>
<\/P>
Dans cette section en bas nous pouvons voir les couches et tables:<\/P>
<\/P>
<\/P>
Dans mon cas, j'ai 1 couche et 2 tables, leur Id respectif serait:<\/P>
<\/P>
- 0 pour la couche
- 1 pour la première table (celle-ci a des pièces jointes)
- 2 pour la deuxième table (elle aussi a des pièces jointes)<\UL>
<\p>Si nous entrons dans n'importe laquelle des tables qui ont des pièces jointes vous pourrez observer ceci à la fin de la page:<\p>
<\p>
Vous remarquerez qu'il existe un lien qui sert à consulter (Query) maintenant je vais entrer dans ce lien et nous pourrons consulter l'information.<\p>
<\p>
Fondamentalement je lui ai juste demandé where : 1=1 qui est toujours vrai et Return IDs Only pour rien d'autre que voir les objectids de la table.<\p>
<\p>
Enfin j'ai juste appuyé sur le bouton Query Get<\p>
<\p>
Et.... voici le résultat<\p>
<\p>
Dans cette table il n'existe que 4 enregistrements, si vous cliquez sur n'importe quel object id vous pourrez voir l'information de cet enregistrement. Quelque chose comme ceci :<\p>
<\p>
Vous verrez qu'il existe un lien qui dit Attachment Infos, si vous y accédez vous verrez s'il existe des pièces jointes<\p>
<\p>
maintenant si vous observez le nom de l'image c'est un autre lien, en cliquant dessus vous pouvez obtenir l'URL de cette image :< \ p > < p > < img __jive_id = \ "461086 \ " class = \ "image-12 jive-image \ " src = \ "https : \/ \/ us.v-cdn.net \/ 6038851 \/ uploads \/ legacyfs \/ online \/ 461086_pastedImage_14.png \ " \/ > < \ p > < p style = \ " text-align : justify ; \ " > Par conséquent ce serait pour les deux cas (ArcGIS Online ou Portal)
https : \/ \/ urldelrestdelfeatureservice \/ numerodecapaotabla \/ objectid \/ attachments \/ objectid < \ p > < p style = \ " text-align : justify ; \ " >< \ p > < p style = \ " text-align : justify ; \ " > Il est important de souligner qu'il est important de savoir quel ordre occupe votre couche ou table dans le service, par exemple chez moi j'avais ce qui suit :< \ p > < p style = \ " text-align : justify ; \ " >< \ p > < p style = \ " text-align : justify ; \ " > Layer {0} </ P > < P style = \ " text-align : justify ; \ " >< \ p > Table {1} </ P > < P style = \ " text-align : justify ; \ " > Table {2} </ P > < P style = \ " text-align : justify ; \ " >< \ p > < p style = \ " text-align : justify ; \ " > Par conséquent, j'ai deux choses une l'ID qui est le numéro que l'on peut observer et l'autre est le numéro d'ordre en layer comme je n'ai qu'une seule valeur le numéro d'ordre est 0, dans les tables la première est 0 et la deuxième est 1 selon le numéro d'ordre. Ceci est important pour la ligne field_service_layer < /SPAN>=< /SPAN > < /SPAN>(field_service.layers) où nous devons écrire le numéro d'ordre correspondant.< /SPAN >< / P > < P style = " text-align : justify ;">< / P > Tout ce qui précède a été pour comprendre ce que fait le script suivant:< / P >< DIV style = "color : #d4d4d4 ; border : 0px ; font-size : 14px ;">< / DIV >< DIV style = "color : #d4d4d4 ; border : 0px ; font-size : 14px ;">import< /SPAN > arcpy< /SPAN >< /SPAN >< / DIV >< DIV style = "color : #d4d4d4 ; border : 0px ; font-size : 14px ;">from< /SPAN > arcgis < /SPAN >import< /SPAN > GIS< /SPAN >< /SPAN >< / DIV >< DIV style = "color : #d4d4d4 ; border : 0px ; font-size : 14px ;">importer timede copy importer deepcopy
# Connecter au portail FAASYSOPS
oursite = GIS("url du portail ou d'arcgis online","utilisateur", "mot de passe")
#Mettre à jour le champ image
def UpdateImageField() :
# initialiser quelques éléments
features_to_be_updated = []
field_service_dataframe = ''
try :
# Obtenir la couche Field Service (pas la couche vue)
field_service = oursite.content.get('id du service')
field_service_layer = (field_service.layers)[ Numéro de la couche ou table selon l'ordre ]
# Construire le Data Frame
field_service_dataframe = pd.DataFrame.spatial.from_layer(field_service_layer)
# Itérer à travers le dataframe.
for row in field_service_dataframe.iterrows() :
if (row[1]['imageurl'] == None or row[1]['imageurl'] == '') :
# Obtenir ObjectID et définir l'URL de l'image