Is it possible to add multiple attachments or hyperlinks to a feature in ArcGIS?

Document created by Ed.Harrell on Oct 15, 2014
Version 1Show Document
  • View in full screen mode

I have a lot of records within the point feature for a project that I am working on. There are 3 particular image fields associated with these records. Each field contains a different image name for any given feature.

 

I tried creating hyperlinks and attachments but couldn't find a solution to retrieve data from more than one field.

 

If you are working within ArcMap you can use HTML popup properties on the layer with and XSL template to achieve what you desire.

 

Markxsltemplate.png

 

Much appreciated for pointing this functionality out to me.

This seems ideal for what I want to achieve. Would you be able to offer any advice on how to write this code?

 

My unique identifier is

"Code"

 

My image fields are

"HOTLINK_NE"

"HOTLINK_O"

"HOTLINK_M"

 

Within each of these fields any given record contains an image name with the extension (.JPEG) or otherwise "n/a". These images are in a folder on my computers desktop.

 

Yes,  I put an example here  http://www.arcgis.com/home/item.html?id=1a4d6680918b461e9effbff413536c22

 

There are two layers,  One shows a pattern for linking to the local file, the other shows the picture in the popup.

The example uses a picture named 'IMG_9822.JPG'  The picture is located in the C:\Users\Public\Pictures folder on the computer.

 

I loaded the default XSL Template  (click the Load button)

 

I then added this to the <xsl:template match = "Field"> section  in the <xsl:choose> part.

Link to picture

 

<xsl:choose>
  <xsl:when test="FieldValue[contains(., '.JPG')]">
  <a target="_blank">
  <xsl:attribute name="href">file:///C:/Users/Public/Pictures/<xsl:value-of select="FieldValue"/>
  </xsl:attribute>
  <xsl:value-of select="FieldValue"/>
  </a>
</xsl:when>


 

Show picture in popup

<xsl:choose>
  <xsl:when test="FieldValue[contains(., '.JPG')]">


                  <img target="_blank">
  <xsl:attribute name="src">file:///C:/Users/Public/Pictures/<xsl:value-of select="FieldValue"/></xsl:attribute>
                  
                  <xsl:attribute name="width">450 </xsl:attribute>                 

  </img>
  </xsl:when>


 

Here is a copy of the whole template for the show picture in popup.

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:msxsl="urn:schemas-microsoft-com:xslt">
  <xsl:variable name="ignoreFieldNames" select="'|OBJECTID|Shape|Shape_Length|Shape_Area|ATTACHMENTID|REL_OBJECTID|CONTENT_TYPE|ATT_NAME|DATA_SIZE|DATA|'"/>
  <xsl:variable name="headerRowColor" select="'#9CBCE2'"/>
  <xsl:variable name="alternateRowColor" select="'#D4E4F3'"/>
  <xsl:template match="/">
  <html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
  </head>
  <body style="margin:0px 0px 0px 0px;overflow:auto;background:#FFFFFF;">
  <table style="font-family:Arial,Verdana,Times;font-size:12px;text-align:left;width:100%;border-collapse:collapse;padding:3px 3px 3px 3px">
  <tr style="text-align:center;font-weight:bold;background:{$headerRowColor}">
  <td>
  <xsl:value-of select="FieldsDoc/Title" />
  </td>
  </tr>
  <xsl:apply-templates select="FieldsDoc/Attachments" />
  <tr>
  <td>
  <table style="font-family:Arial,Verdana,Times;font-size:12px;text-align:left;width:100%;border-spacing:0px; padding:3px 3px 3px 3px">
  <xsl:choose>
  <xsl:when test="FieldsDoc/Fields/Field/FieldName">
  <xsl:apply-templates select="FieldsDoc/Fields/Field/FieldName[not(contains($ignoreFieldNames, concat(concat('|', text()), '|')))]/.." />
  </xsl:when>
  <xsl:otherwise>
  <xsl:apply-templates select="FieldsDoc/Fields/Field" />
  </xsl:otherwise>
  </xsl:choose>
  </table>
  </td>
  </tr>
  </table>
  </body>
  </html>
  </xsl:template>


  <xsl:template match="Attachments">
  <xsl:variable name="imageCount" select="count(Attachment/ContentType[contains(., 'image')])"/>
  <xsl:variable name="attachmentCount" select="count(Attachment)"/>
  <tr bgcolor="{$headerRowColor}">
  <td>
  <table style="font-family:Arial,Verdana,Times;font-size:12px;text-align:left;width:100%;border-spacing:0px; padding:3px 3px 3px 3px">
  <xsl:variable name="imageSrc" select="Attachment/ContentType[contains(., 'image')]/../FilePath"/>
  <xsl:if test="$imageSrc">
  <tr align="center">
  <td>
  <a target="_blank" href="{$imageSrc}">
  <img src="{$imageSrc}" width="275px" border="0"/>
  </a>
  </td>
  </tr>
  <tr align="center">
  <td>
  <xsl:value-of select="Attachment/ContentType[contains(., 'image')]/../Name" />
  </td>
  </tr>
  </xsl:if>
  <xsl:if test="($attachmentCount &gt; $imageCount) or not($imageCount = 1)">
  <tr align="center">
  <td>
  <table style="font-family:Arial,Verdana,Times;font-size:12px;text-align:left;width:100%;border-spacing:0px; padding:3px 3px 3px 3px">
  <xsl:for-each select="Attachment[position() mod 2 = 1]">
  <tr align="left" bgcolor="white">
  <xsl:if test="(position() +1) mod 2">
  <xsl:attribute name="bgcolor">
  <xsl:value-of select="$alternateRowColor"/>
  </xsl:attribute>
  </xsl:if>
  <td>
  <a target="_blank">
  <xsl:attribute name="href">
  <xsl:value-of select="FilePath"/>
  </xsl:attribute>
  <xsl:value-of select="Name" />
  </a>
  </td>
  <td>
  <a target="_blank">
  <xsl:attribute name="href">
  <xsl:value-of select="following-sibling::Attachment/FilePath"/>
  </xsl:attribute>
  <xsl:value-of select="following-sibling::Attachment/Name" />
  </a>
  </td>
  </tr>
  </xsl:for-each>
  </table>
  </td>
  </tr>
  </xsl:if>
  </table>
  </td>
  </tr>
  </xsl:template>


  <xsl:template match="Field">
  <tr>
  <xsl:if test="(position() +1) mod 2">
  <xsl:attribute name="bgcolor">
  <xsl:value-of select="$alternateRowColor"/>
  </xsl:attribute>
  </xsl:if>
  <xsl:if test="FieldName">
  <td>
  <xsl:value-of select="FieldName"/>
  </td>
  </xsl:if>
  <td>
  <xsl:choose>
  <xsl:when test="FieldValue[contains(., '.JPG')]">


                  <img target="_blank">
  <xsl:attribute name="src">file:///C:/Users/Public/Pictures/<xsl:value-of select="FieldValue"/></xsl:attribute>
                  
                  <xsl:attribute name="width">450 </xsl:attribute>                 

  </img>
  </xsl:when>
  <xsl:when test="FieldValue[starts-with(., 'http:')]">
  <a target="_blank">
  <xsl:attribute name="href">
  <xsl:value-of select="FieldValue"/>
  </xsl:attribute>
  <xsl:value-of select="FieldValue"/>
  </a>
  </xsl:when>
  <xsl:when test="FieldValue[starts-with(., 'https:')]">
  <a target="_blank">
  <xsl:attribute name="href">
  <xsl:value-of select="FieldValue"/>
  </xsl:attribute>
  <xsl:value-of select="FieldValue"/>
  </a>
  </xsl:when>
  <xsl:when test="FieldValue[starts-with(., '\\')]">
  <a target="_blank">
  <xsl:attribute name="href">
  <xsl:value-of select="FieldValue"/>
  </xsl:attribute>
  <xsl:value-of select="FieldValue"/>
  </a>
  </xsl:when>
  <xsl:when test="FieldValue[starts-with(., '&lt;img ')]">
  <xsl:value-of select="FieldValue" disable-output-escaping="yes" />
  </xsl:when>
  <xsl:otherwise>
  <xsl:value-of select="FieldValue"/>
  </xsl:otherwise>
  </xsl:choose>
  </td>
  </tr>
  </xsl:template>
</xsl:stylesheet>


 

at line 117 you just need to set the path to the one that works for your case.

 

Mark

 

This document was generated from the following discussion: Is it possible to add multiple attachments or hyperlinks to a feature in ArcGIS?

Attachments

    Outcomes