<\/HEAD>
Em algumas ocasiões pode ser necessário ter anexos como uma imagem multimídia na janela pop-up do nosso mapa web ou web app, no entanto, isso é impossibilitado pois os anexos não são exibidos em um campo como se fosse um hyperlink. É possível escrever o endereço manualmente em um campo já que por meio do rest poderíamos saber como ele é, que basicamente é assim: https\/\/direcion do servidor\/rest\/services\/Hosted\/nome do serviço\/número da camada ou tabela dentro do serviço\/objectid\/attachments\/objectid do anexo.<\/P>
<\/P>
Mas isso é algo ideal se nosso serviço fosse composto por poucos registros seria uma tarefa simples, e a realidade é que normalmente lidamos com centenas ou milhares de dados, por isso, apresento a seguir algo que encontrei neste link: URL link to Attachment Photo when the FeatureLayer is not Shared with Everyone<\/A> graças a John Evans<\/A>0c . <\/P><\/P>
Antes de continuar é necessário que saibam que na camada ou tabela onde estiverem os anexos deve existir um campo de texto para armazenar a URL do Anexo, neste caso eu criei um campo chamado imageurl nas tabelas onde tenho os anexos. Este está declarado no Script como 'imageurl' assim que se vocês possuírem outro campo para armazenar a url simplesmente mudam isso no script de python.<\/P>
<\/P>
Primeiro de tudo devem entender como funcionam os serviços no ArcGIS Online e no Portal. São similares mas existem algumas diferenças, começando porque no Portal todos os campos dos Hosted Services estão em minúscula, o que não acontece no ArcGIS Online.<\/P>
<\/P>
Vamos começar com o rest, já mencionei como vai mas aqui um exemplo. O que vamos fazer é mostrar os detalhes do serviço que marquei.<\/P>
<\/P>
<\/P>
<\/P>
Ao acessar os detalhes é importante que observem o id que esse serviço tem, este é um identificador único e para o script é de vital importância.<\/P>
<\/P>
<\/P>
<\/P>
Agora outro conceito básico que precisam saber é a url do rest, se observarem bem, mais abaixo na página poderão ver que temos duas seções uma de camadas e outra de tabelas, em cada uma delas temos ações que permitem ativar ou realizar certas tarefas, mas a que nos interessa é a que diz URL de serviço, podem acessar qualquer uma mas devem levar em conta que a URL de cada camada ou tabela é distinta, por outro lado, a que nos interessa para nosso objetivo é a camada ou tabela que tem os anexos, no meu caso é a tabela (fcomo eu sei? basta observar que em camadas diz "Habilitar anexos", ou seja não tem e na tabela diz "Desabilitar anexos" em outras palavras esta é a que tem o que precisamos).<\/P>
<\/P>
Neste caso entrarei na das camadas somente para que observem algo importante, portanto ao entrar na URL de serviço, nos leva aqui.<\/P>
<\/P>
<\/P>
<\/P>
Na imagem marquei duas coisas, a primeira é onde podemos voltar ao serviço que contém todas as camadas e tabelas, e em segundo lugar o ID da camada, agora clicarei sobre o serviço para ver seu conteúdo e poder ver o ID de todas as camadas e tabelas que compõem o serviço.<\/P>
<\/P>
<\/P>
<\/P>
Nesta seção na parte inferior podemos ver as camadas e tabelas:<\/P>
<\/P>
<\/P>
No meu caso, tenho 1 camada e 2 tabelas, seus respectivos Id seriam:<\/P>
<\/P>
- 0 para a camada
- 1 para a primeira tabela (esta tem anexos)
- 2 para a segunda tabela (também tem anexos)<\LI>
< P style = " text-align : justify ; " > < / P > < P style = " text-align : justify ; " > Se entrarmos em qualquer uma das tabelas com anexos poderão observar isto ao final da página:< / 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 ; " > Notarão que existe um link que serve para consultar (Query) agora entrarei nesse link e poderemos consultar as informações.< / 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 ; " > Basicamente só consultei where: 1=1 que sempre é verdadeiro e Return IDs Only para nada mais ver os objectids da tabela.< / P > < P style = " text-align : justify ; " > < / P > < P style = " text-align : justify ; " > Finalmente só pressionei o botão 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 > E.... este é o resultado< / 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 ; " > Nesta tabela existem apenas 4 registros, se clicarem em qualquer object id poderão ver as informações desse registro. Algo assim:< / 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 " />
... (continua) style="color: #000000;">
importar timede copy importar deepcopy
# Conectar ao Portal FAASYSOPS
oursite = GIS("url do portal ou do arcgis online","usuario", "contraseña")
#Atualizar o campo de imagem
def UpdateImageField() :
# inicializar algumas coisas
features_to_be_updated = []
field_service_dataframe = ''
tentar :
# Obter a Camada Field Service (não a camada de visualização)
field_service = oursite.content.get('id do serviço')
field_service_layer = (field_service.layers)[Número da camada ou tabela conforme a ordem]
# Construir Data Frame
field_service_dataframe = pd.DataFrame.spatial.from_layer(field_service_layer)
# Iterar pelo dataframe.
para row em field_service_dataframe.iterrows() :
se (row[1]['imageurl'] == None ou row[1]['imageurl'] == '') :
# Obter ObjectID e definir URL da imagem
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> # inicializar feature e obter feature do serviço<\/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> <\/SPAN><\/DIV><\/P>& nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; # Faça uma cópia profunda para manter nossos atributos/estrutura e atualizar dados<\/span >< \/span >< \/div >< divstyle ="color:#d4d4d4;border :0 px;font - size :14 px;">& nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; feature_to_update < \/span >< spanstyle ="border :0 px;font - weight :inherit;font - size :14 px ">=< \/span >< spanstyle ="border :0 px;font - weight :inherit;font - size :14 px ">deepcopy(feature.features[< \/span >< spanstyle ="border :0 px;font - weight :inherit;font - size :14 px ">0< \/span >< spanstyle ="border :0 px;font - weight :inherit;font - size :14 px ">])< \/span >< \/span >< \/div >< p >< \/p >< divstyle ="color:#d4d4d4;border :0 px;font - size :14 px;">& nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; # Faça a atualização do campo< \/span >< \/span >< \/div >< divstyle ="color:#d4d4d4;border :0 px;font - size :14 px;">& nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; & nbsp ; feature_to_update.attributes[< span > 'imageurl' < \/span >] < span > = < \/span > img_url< \/span >< \/div >< divstyle ="color:#d4d4d4;border :0 px;font - size :14 px;">& nb sp      features_to_be_updated.append(feature_to_update)< \/span >< \/div >< p >< \/p >< divstyle ="color:#d4d4d4;border :0 px;font - size :14 px;">& nb sp   if< span > len < \/span >(features_to_be_updated) != < span > 0 < \/span >:< \/span >< \/div >< divstyle ="color:#d4d4d4;border :0 px;font - size :14 px;">& nb sp   field_service_layer.edit_features(< span > updates < \/span >= features_to_be_updated)< \/span >< \/div >< divstyle ="color:#d4d4d4;border :0 px;font - size :14 px;">& nb sp except:< \/span >< \/div >< divstyle ="color:#d4d4d4;border :0 px;font - size :14 px;">& nb sp print('Erro ao fazer atualização. Faça um tratamento real de erros ou algo assim.')< \/span >< \/div >< p >< \/p >< divstyle ="color:#d4d4d4;border :0 px;font - size :14 px;">< span > while < \ / span > True:< \ / span > < \ / div > < div style= " color:# d4 d4 d4;border:none;font- size:14px; " > < span style= " color:#000000 " > &nbsp;UpdateImageField()</span></div><div style=" color:# d4 d4 d4; b o r d e r :0 p x; f o n t- s i z e :14 p x;"><span style=" c o l o r:#000000; B O R D E R:0 p x; FONT- WE I G H T:IN HER I T; FONT-SIZE:14 p x;">&NBSP;&NBSP;&NBSP;TIME.SLEEP(15)</SPAN></DIV><P></P><P>Neste exemplo é mostrado com uma camada geográfica, mas se os anexos estiverem em uma tabela (como os repeats do survey) altere esta linha &Nbsp Field_Service_Layer&Nbsp;< /Span> = (Field_Service.Layers)[Número da camada ou tabela conforme a ordem] por esta   Field_Service_Layer&Nbsp;< /Span> = (Field_Service.Tables)[Número da camada ou tabela conforme a ordem]. Nota: é a linha 31 do script.< /P> Este script, uma vez executado, não para, então seria bom deixá-lo rodando em um servidor, se quiserem parar devem fazê-lo manualmente.< /P> Depois disso, basta abrir o serviço no mapa web, e se os anexos estiverem na camada, basta configurar na janela pop-up e no conteúdo multimídia adicionam uma imagem.<\/P><\/P>
<\/P><\/P>Na janela seguinte, adicionam o campo que contém a URL do anexo, no meu caso é imageurl<\/P><\/P>
<\/P><\/P>Depois clique em Aceitar e novamente em Aceitar. Agora, se os anexos estiverem em tabelas relacionadas como no meu caso, então configurem a janela pop-up na tabela ou tabelas relacionadas da mesma forma que se faz com uma camada.<\/P><\/P>Uma vez que terminarem a configuração das janelas pop-up poderão ver as imagens em seus webapps da seguinte forma (no meu caso estou usando web app builder)<\/P><\/P>
<\/P><\/P>
<\/P><\/P>
<\/P><\/P>Nota:<\/STRONG> dependendo da velocidade da Internet que tiverem pode ser que a imagem não apareça automaticamente, por isso deverão ter um pouco de paciência.<\/P><\/P>Espero que seja útil para vocês.....<\/SPAN><\/P><\/BODY><\/HTML>