<\/HEAD>
Někdy může být nutné mít přílohy, jako je multimediální obrázek, vyskakovacím okně na naší webové mapě nebo webové aplikaci, nicméně to není možné, protože přílohy se nezobrazují v poli jako by to byl hypertextový odkaz. Je možné adresu napsat ručně do pole, protože pomocí rest bychom mohli zjistit, jak vypadá, což je v podstatě takto: https\/\/adresa serveru\/rest\/services\/Hosted\/název služby\/číslo vrstvy nebo tabulky uvnitř služby\/objectid\/attachments\/objectid přílohy.<\/P>
<\/P>
Ale to je ideální pouze pokud by naše služba obsahovala málo záznamů, byla by to jednoduchá úloha, a realita je taková, že obvykle pracujeme se stovkami nebo tisíci dat, proto vám nyní představím něco, co jsem našel na tomto odkazu: URL link to Attachment Photo when the FeatureLayer is not Shared with Everyone<\/A> díky John Evans<\/A>0c . <\/P><\/P>
Než budeme pokračovat, je třeba vědět, že ve vrstvě nebo tabulce, kde jsou přílohy, musí existovat textové pole pro uložení URL přílohy, v tomto případě jsem vytvořil pole nazvané imageurl v tabulkách, kde mám přílohy. Toto je deklarováno ve skriptu jako 'imageurl', takže pokud máte jiné pole pro uložení URL, jednoduše to změníte ve skriptu v pythonu.<\/P>
<\/P>
Nejprve musíte pochopit, jak fungují služby v ArcGIS Online a v Portal. Jsou podobné, ale existuje několik rozdílů, začínaje tím, že v Portal jsou všechna pole Hosted Services malými písmeny, což se neděje v ArcGIS Online.<\/P>
<\/P>
Začněme s restem, už jsem zmínil jak to jde, ale tady je příklad. Ukážeme si detaily služby, kterou jsem označil.<\/P>
<\/P>
<\/P>
<\/P>
Když přistoupíte k detailům, je důležité sledovat id dané služby, toto je jedinečný identifikátor a pro skript je velmi důležitý.<\/P>
<\/P>
<\/P>
<\/P>
Další základní koncept, který potřebujete znát, je url restu. Pokud se dobře podíváte níže na stránce, uvidíte dvě sekce – jednu vrstev a druhou tabulek. V každé z nich máme akce umožňující aktivovat nebo provádět určité úkoly, ale nás zajímá ta s názvem URL služby. Můžete přistoupit k jakékoli z nich, ale musíte vzít v úvahu, že URL každé vrstvy nebo tabulky je odlišná. Na druhou stranu nás zajímá vrstva nebo tabulka s přílohami; v mém případě je to tabulka (jak to poznám? Stačí si všimnout, že u vrstev je napsáno "Enable Attachments", tedy nemá přílohy a u tabulky "Disable Attachments", jinými slovy tato má to, co potřebujeme).<\/P>
<\/P>
V tomto případě vstoupím jen do vrstev, abyste viděli něco důležitého. Po vstupu do URL služby nás to zavede sem.<\/P>
<\/P>
<\/P>
<\/P>
Na obrázku jsem označil dvě věci: první je místo, kde se můžeme vrátit ke službě obsahující všechny vrstvy a tabulky a za druhé ID vrstvy. Nyní kliknu na službu pro zobrazení jejího obsahu a mohu vidět ID všech vrstev a tabulek tvořících službu.<\/P>
<\/P>
<\/P>
<\/P>
V této sekci dole vidíme vrstvy a tabulky:<\/P>
<\/P>
<\/P>
V mém případě mám 1 vrstvu a 2 tabulky, jejich odpovídající Id jsou:<\/P>
<\/P>
- 0 pro vrstvu
- 1 pro první tabulku (tato má přílohy)
- 2 pro druhou tabulku (také má přílohy)<\UL> <\p>
Pokud vstoupíme do kterékoliv z tabulek s přílohami, uvidíte toto na konci stránky:<\p>
<\p>
Všimnete si odkazu sloužícího k dotazu (Query), nyní kliknu na tento odkaz a můžeme získat informace.<\p>
<\p>
V podstatě jsem zadal where: 1=1 což je vždy pravda a Return IDs Only jen abych viděl objectidy tabulky.<\p>
<\p>
Nakonec jsem jen stiskl tlačítko Query Get<\p>
<\p>
A.... toto je výsledek<\p>
<\p>
V této tabulce jsou pouze 4 záznamy. Pokud kliknete na jakýkoli object id, můžete vidět informace o daném záznamu. Něco takového:<\p>
<\p>
Uvidíte odkaz s názvem Attachment Infos. Pokud tam vstoupíte, uvidíte zda existují přílohy<\p>
<\p>
Pokud si všimnete názvu obrázku jako dalšího odkazu a kliknete na něj, můžete získat URL tohoto obrázku:<\p>
<\p>
Proto by to bylo pro oba případy (ArcGIS Online nebo Portal)
https:\/urldelrestdelfeatureservice/numerodecapaotabla/objectid/attachments/objectid<\/A>
Je důležité zdůraznit , že musíte vědět , jaké pořadí má vaše vrstva nebo tabulka uvnitř služby , například doma jsem měl toto :
</ p > < p style = \ " text - align :justify ; \ " > Vrstva {0} </ p > < p style = \ " text - align :justify ; \ " > Tabulka {1} </ p > < p style = \ " text - align :justify ; \ " > Tabulka {2} </ p > < p style = \ " text - align :justify ; \ " > Proto mám dvě věci : jedno ID , což je číslo , které lze vidět , a druhé pořadové číslo ve vrstvě . Protože mám pouze jednu hodnotu , pořadové číslo je 0 , u tabulek první je 0 a druhá je 1 podle pořadového čísla . To je důležité pro řádek field_service_layer
=
(field_service.layers) kde musíme napsat odpovídající pořadové číslo .</ P > < p style = \ " text - align :justify ; \ " > Vše výše uvedené bylo proto , aby bylo jasné , co dělá následující skript :
</ p > < DIV style = \ " color : #d4d4d4 ; border : 0px ; font-size : 14px ; \ " >
</ DIV > < DIV style = \ " color : #d4d4d4 ; border : 0px ; font-size : 14px ; \ " >import arcpy
from arcgis import GIS
import pandas as pd
importujte čas
z copy importujte deepcopy
# Připojte se k FAASYSOPS Portálu
oursite = GIS("url del portal o de arcgis online","usuario", "contraseña")
# Aktualizujte pole obrázku
def UpdateImageField() :
# inicializujte některé věci
features_to_be_updated = []
field_service_dataframe = ''
try :
# Získejte Field Service Layer (ne pohledovou vrstvu)
field_service = oursite.content.get('id del servicio')
field_service_layer = (field_service.layers)[Číslo vrstvy nebo tabulky podle pořadí]
# Vytvořte Data Frame
field_service_dataframe = pd.DataFrame.spatial.from_layer(field_service_layer)
# Procházejte dataframe.
for row in field_service_dataframe.iterrows() :
if (row[1]['imageurl'] == None or row[1]['imageurl'] == '') :
# Získejte ObjectID a nastavte URL obrázku
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> # inicializovat prvek a získat prvek ze služby<\/SPAN><\/SPAN><\/DIV> feature_to_update <\/SPAN>=<\/SPAN> <\/SPAN>''<\/SPAN><\/SPAN><\/DIV>& nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; feature <\/span > = < \/ span > field_service_layer.query(< \/ span > where < \/ span > = < \/ span > 'OBJECTID = ' < \/ span > < \/ span > + < \/ span > objID)< \/ span >< \/ div >< p >< \/ p >< div style = "color : # d4 d4 d4;border : 0 px;font - size : 14 px" >< span style = "color : #000000" >< span style = "border : 0 px;font - weight : inherit;font - size : 14 px" >& nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; # Vytvořit hlubokou kopii, abychom si zachovali naše atributy / strukturu a aktualizovali data< \/ span >< \/ span >< \/ div >< div style = "color : # d4 d4 d4;border : 0 px;font - size : 14 px" >< span style = "color : #000000" >< span style = "border : 0 px;font - weight : inherit;font - size : 14 px" >& nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; feature_to_update < \/ span >< span style = "border : 0 px;font - weight : inherit;font - size : 14 px" > = < \/ span >< span style = "border : 0 px;font - weight : inherit;font - size : 14 px" > deepcopy(feature.features[< \/ span >< span style = "border : 0 px;font - weight : inherit;font - size : 14 px" >0< \/ span >])< \/ span >< \/ span >< \/ div >< p >< \/ p >< div style = "color:# d4 d4 d4;border :0 px,font - size ,14 px">& nb sp ;& nb sp ;& nb sp ;& nb sp ;& nb sp ;& nb sp ;# Proveďte aktualizaci pole<\/span><\/span><\/div>& nb sp ;& nb sp ;& nb sp ;& nb sp ;& nb sp ;& nb sp ;feature_to_update.attributes[<'imageurl'>] = img_url<\/span><\/div>& nb sp ;& nb sp ;& nb sp ;& nb sp ;& nb sp ;& nb sp ;features_to_be_updated.append(feature_to_update)<\/span><\/div><\/p>& nb sp ;& nb sp ;& nb sp if len(features_to_be_updated) != 0:<\/span><\/span><\/div>& nb sp ;& nb sp ;field_service_layer.edit_features(updates=features_to_be_updated)<\/span><\/div>except:<\/span>
print('Chyba při provádění aktualizace. Proveďte skutečné zachycení chyb nebo něco podobného.')<\/span>
while True:
UpdateImageField()
time.sleep(15)
V tomto příkladu je vidět s geografickou vrstvou, ale pokud jsou přílohy v tabulce (jako opakování survey), změňte tento řádek field_service_layer =(field_service.layers)[<\/P>
<\/P><\/P>V následujícím okně přidají pole, které obsahuje URL přílohy, v mém případě je to imageurl<\/P><\/P>
<\/P><\/P>Poté klikněte na Přijmout a znovu na Přijmout. Pokud jsou přílohy v tabulkách souvisejících, jako v mém případě, nakonfigurujete vyskakovací okno v tabulce nebo tabulkách souvisejících stejným způsobem jako u vrstvy.<\/P><\/P>Jakmile dokončíte konfiguraci vyskakovacích oken, budete moci vidět obrázky ve svých webapps následujícím způsobem (v mém případě používám web app builder)<\/P><\/P>
<\/P><\/P>
<\/P><\/P>
<\/P><\/P>Poznámka:<\/STRONG> v závislosti na rychlosti Internetu, kterou máte, se může stát, že se obrázek nezobrazí automaticky, takže budete muset mít trochu trpělivosti.<\/P><\/P>Doufám, že vám to bude užitečné.....<\/SPAN><\/P><\/BODY><\/HTML>