<\/HEAD>
時には、ウェブマップやウェブアプリのポップアップウィンドウに画像などのマルチメディア添付ファイルを表示する必要がある場合があります。しかし、添付ファイルはハイパーリンクのようなフィールドに表示されないため、これが不可能となっています。REST経由でそのURLを知ることができるため、フィールドに手動でアドレスを書くことは可能です。基本的には次のようになります:https\/\/サーバーのアドレス\/rest\/services\/Hosted\/サービス名\/サービス内のレイヤーまたはテーブル番号\/objectid\/attachments\/添付ファイルのobjectid。<\/P>
<\/P>
しかし、これはサービスが少数のレコードで構成されている場合には理想的ですが、実際には通常数百または数千のデータを扱うため簡単ではありません。そこで、以下に私がこのリンクで見つけたものをご紹介します: URL link to Attachment Photo when the FeatureLayer is not Shared with Everyone<\/A> John EvansさんのおかげですJohn Evans<\/A> 。 <\/P><\/P>
続行する前に、添付ファイルがあるレイヤーまたはテーブルには添付ファイルのURLを格納するテキストフィールドが存在する必要があります。私は添付ファイルがあるテーブルに'imageurl'というフィールドを作成しました。このフィールドはスクリプト内で'imageurl'として宣言されていますので、もし別のフィールド名を使用している場合はPythonスクリプト内でそれを変更してください。<\/P>
<\/P>
まず最初に、ArcGIS OnlineとPortalのサービスの動作方法を理解する必要があります。似ていますがいくつか違いがあります。例えばPortalではHosted Servicesのすべてのフィールド名が小文字ですが、ArcGIS Onlineではそうではありません。<\/P>
<\/P>
RESTについて説明しましたが、ここに例があります。私たちが行うのはマークしたサービスの詳細を表示することです。<\/P>
<\/P>
<\/P>
<\/P>
詳細にアクセスすると、そのサービスのIDを見ることが重要です。これは一意の識別子であり、スクリプトにとって非常に重要です。<\/P>
<\/P>
<\/P>
<\/P>
次に知っておくべき基本的な概念はRESTのURLです。ページ下部を見ると、レイヤーとテーブルという2つのセクションがあります。それぞれに特定の操作を有効化または実行できるアクションがありますが、私たちが関心を持つのは「サービスURL」と書かれたものです。どちらでもアクセスできますが、それぞれのレイヤーやテーブルごとにURLは異なります。一方で私たちの目的に関係するのは添付ファイルを持つレイヤーまたはテーブルです。私の場合、それはテーブルです(どうやってわかるかというと、レイヤーには「添付ファイルを有効化」と書いてあり添付ファイルがなく、テーブルには「添付ファイルを無効化」と書いてあるので、このテーブルこそ必要なものです)。<\/P>
<\/P>
ここでは重要な点を見るためにレイヤー側だけに入ります。そのため、「サービスURL」に入るとここに移動します。<\/P>
<\/P>
<\/P>
<\/P>
この画像では2つ示しています。1つ目はすべてのレイヤーとテーブルを含むサービスへ戻る場所、2つ目はレイヤーIDです。次にサービスをクリックして内容を見て、このサービスを構成するすべてのレイヤーとテーブルのIDを見ることができます。<\/P>
<\/P>
<\/P>
<\/P>
このセクションでは下部にレイヤーとテーブルを見ることができます:<\/P>
<\/P>
<\/P>
私の場合、1つのレイヤーと2つのテーブルがあります。それぞれのIDは以下です:<\/P>
<\/P>
- 0 はレイヤー用
- 1 は最初のテーブル用(このテーブルには添付ファイルがあります)
- 2 は2番目のテーブル用(こちらも添付ファイルがあります)<\LI>
< P style = " text-align : justify ; " > < / P > < P style = " text-align : justify ; " > 添付ファイルがある任意のテーブルに入るとページ下部でこれを見ることができます: < / P > < P > < / P > < P >< IMG __jive_id = " 461075 " class = " image-6 jive-image " src = " https : \/ \/ us.v-cdn.net \/ 6038851 \/ uploads \/ legacyfs \/ online \/ 461075_pastedImage_7.png " \/ >< / P > < P style = " text-align : justify ; " > クエリ(Query)用リンクがあることに気づくでしょう。そのリンクをクリックすると情報を照会できます。 < / P > < P > < / P > < P >< IMG __jive_id = " 461076 " class = " image-7 jive-image " src = " https : \/ \/ us.v-cdn.net \/ 6038851 \/ uploads \/ legacyfs \/ online \/ 461076_pastedImage_8.png " \/ >< / P > < P > < / P > < P style = " text-align : justify ; " > 基本的にはwhere句に1=1(常に真)だけ指定し、「Return IDs Only」を選択してテーブル内のobjectidだけを見るようにしました。 < / P > < P style = " text-align : justify ; " > < / P > < P style = " text-align : justify ; " > 最後に「Query Get」ボタンを押しました。 < / P > < P > < / P > < P >< IMG __jive_id = " 461077 " class = " jive-image image-8 " src = " https : \/ \/ us.v-cdn.net \/ 6038851 \/ uploads \/ legacyfs \/ online \/ 461077_pastedImage_9.png " \/ >< / P > < P > < / P > < P > そして...これが結果です < / P > < P > < / P > < P >< IMG __jive_id = " 461078 " class = " image-9 jive-image " src = " https : \/ \/ us.v-cdn.net \/ 6038851 \/ uploads \/ legacyfs \/ online \/ 461078_pastedImage_10.png " \/ >< / P > < P > < / P > < P style = " text-align : justify ; " > このテーブルには4件のみ記録があります。任意のobject idをクリックするとそのレコード情報を見ることができます。このような感じです: < / P > < P > < / P > < P >< IMG __jive_id = " 461084 " class = " jive-image image-10 " src = " https : \/ \/ us.v-cdn.net \/ 6038851 \/ uploads \/ legacyfs \/ online \/ 461084_pastedImage_12.png " \/ >< / P > < P > < / P > < P style = " text-align : justify ; " > 「Attachment Infos」というリンクがあります。そこへアクセスすると添付ファイルが存在するか確認できます。< / P > < P > < / P > < P >< IMG __jive_id = " 461085 " class = " image-11 jive-image " src = " https : \/ \/ us.v-cdn.net \/ 6038851 \/ uploads \/ legacyfs \/ online \/ 461085_pastedImage_13.png " \/ >< / P > < P > < / P > < P style = " text-align : justify ; " > また画像名も別リンクになっており、クリックするとその画像URLを取得できます:< / 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 >< / p >< p style=\"text-align:justify;\">したがって両方の場合(ArcGIS OnlineまたはPortal)とも次になります: https://urldelrestdelfeatureservice/numerodecapaotabla/objectid/attachments/objectid <\p>\n
<\p>\n
重要なのは、自分のレイヤーやテーブルがサービス内でどの順番か知ることです。例えば私の場合以下でした:<\p>\n
<\p>\n
Layer {0}<\p>\n
<\p>\n
Tabla {1}<\p>\n
Tabla {2}<\p>\n
<\p>\n
したがってIDとして見える数字とlayer内での順番番号という2つがあります。私は値が一つだけなので順番番号は0であり、テーブルでは最初が0で二番目が1となります。この番号はfield_service_layer=(field_service.layers)という行で対応する順番番号を書かなければならないため重要です。<\p>\n
<\p>\n
以上すべては次のスクリプトが何をしているか理解してもらうためでした:<\p>\n
import arcpy
from arcgis import GIS
import pandas as pd
import time
from copy import deepcopy
# FAASYSOPS Portalに接続する
oursite = GIS("url del portal o de arcgis online","usuario", "contraseña")
# イメージフィールドを更新する
def UpdateImageField() :
# 初期化処理
features_to_be_updated = []
field_service_dataframe = ''
try :
# フィールドサービスレイヤーを取得(ビュー レイヤーではない)
field_service = oursite.content.get('id del servicio')
field_service_layer = (field_service.layers)[番号の層またはテーブルの順序に従う]
# データフレームを作成する
field_service_dataframe =< / span > pd.DataFrame.spatial.from_layer(field_service_layer)</ span ></ span ></ div >< p >< / p >< div Style = " color : # d4 d4 d4 ; border : none ; Font - size : 1.5 em ; " >< span Style = " color : # 000 ; border : none ; Font - weight : inherit ; Font - size : 1.5 em ; " > # データフレームを反復処理する </ span ></ div >< div Style = " color : # d4 d4 d4 ; border : none ; Font - size : 1.5 em ; " >< span Style = " color : # 000 ; border : none ; Font - weight : inherit ; Font - size : 1.5 em ; " > for row in field_service_dataframe.iterrows() :</ span ></ div >< div Style = " color : # d4 d4 d4 ; border : none ; Font - size : 1.5 em ; " >< span Style = " color : # 000 ; border : none ; Font - weight : inherit ; Font - size : 1.5 em ; " > if (row[1]['imageurl'] == None or row[1]['imageurl'] == '') :</ span ></ div >< div Style = " color : # d4 d4 d4 ; border : none ; Font - size : 1.5 em ; " >< span Style = " color : # 000 ; border : none ; Font - weight : inherit ; Font - size : 1.5 em ; " > # ObjectIDを取得し、画像URLを設定する </ span ></ div >< div Style = " color : # d4 d4 d4 ; border : none ; Font - size : 1.5 em ; " >< span Style = " color : # 000 ; border : none ; Font - weight : inherit ; Font - size : 1.5 em ; " > objID = str(row[1]['objectid'] 14px;">])<\/SPAN><\/SPAN><\/DIV> img_url <\/SPAN>=<\/SPAN> <\/SPAN>"urloftheview_View\/FeatureServer\/ ID de capa o tabla<\/STRONG><\/SPAN>\/ <\/SPAN>{0}<\/SPAN>\/attachment\/ <\/SPAN>{0}<\/SPAN>"<\/SPAN>.format(objID)<\/SPAN><\/SPAN><\/DIV><\/P> # フィーチャを初期化し、サービスからフィーチャを取得する<\/SPAN><\/SPAN><\/DIV> feature_to_update <\/SPAN>=<\/SPAN> <\/SPAN>''<\/SPAN><\/SPAN><\/DIV> feature <\/SPAN>=<\/SPAN> field_service_layer.query(<\/SPAN>where<\/SPAN>=<\/SPAN> 'OBJECTID = '<\/SPAN> + objID)<\/SPAN><\/DIV><\/P> <simplified translation continues preserving code and comments>この例は地理レイヤーで示されていますが、添付ファイルがテーブル(surveyのrepeatsのような)にある場合は、この行 field_service_layer = (field_service.layers)[順序に応じたレイヤーまたはテーブルの番号] を field_service_layer = (field_service.tables)[順序に応じたレイヤーまたはテーブルの番号] に変更してください。注:これはスクリプトの31行目です。このスクリプトは一度実行すると停止しないため、サーバー上で実行し続けるのが良いでしょう。停止したい場合は手動で行う必要があります。それを行ったら、ウェブマップでサービスを開くだけで、添付ファイルがレイヤーにある場合はポップアップウィンドウで設定するだけです。 マルチメディアで画像を追加します。<\/P><\/P>
<\/P><\/P>次のウィンドウで添付ファイルのURLを含むフィールドを追加します。私の場合はimageurlです。<\/P><\/P>
<\/P><\/P>その後、「Aceptar」をクリックし、再度「Aceptar」をクリックします。さて、添付ファイルが私の場合のように関連テーブルにある場合は、レイヤーと同じ方法で関連テーブルのポップアップウィンドウを設定します。<\/P><\/P>ポップアップウィンドウの設定が完了すると、次のようにwebappsで画像を見ることができます(私の場合はweb app builderを使用しています)。<\/P><\/P>
<\/P><\/P>
<\/P><\/P>
<\/P><\/P>注意:<\/STRONG> インターネットの速度によっては画像が自動的に表示されない場合がありますので、少し待つ必要があります。<\/P><\/P>お役に立てれば幸いです.....<\/SPAN><\/P><\/BODY><\/HTML>