One Point, Multiple Symbols

4339
8
05-06-2011 06:16 AM
LornaMurison
Occasional Contributor
Hi everyone,
I'm wondering if this is possible in ArcMap...

I have a series of points (locations on rivers) that have been sampled for up to different 4 things (fish, chemistry etc...).  I would like to keep a small point for each location but have a call-out to symbols representing what has been sampled at each location.
It would look something like the image attached, where the black dots are my original points and the coloured circles represent the sample types (except they would be an actual symbol of a fish...).

Is this, or something similar, possible with Arc?
Thanks
Tags (2)
0 Kudos
8 Replies
DavidWilliams
Occasional Contributor
Hi Lorna,
You can do this with a simple label expression, see attached for my quick attempt:

Prints location name as first line
Then checks to see if sample1 is populated, if it finds data, posts a red fish
Then checks to see if sample2 is populated, if it finds data, posts a green fish
Then checks to see if sample3 is populated, if it finds data, posts a blue fish

The following assumes loc_name, sample1, sample2 and sample3 exist and are text fields in your data

You'll need to add a text field called txt_char to your attribute table and populate it with capital D (this corresponds to a fish symbol in the ESRI Conservation font)

In Layer Properties, goto the Labels tab and click on Expression
Tick Advanced
Delete default code in Expression window and paste all the following, OK, OK:



Function FindLabel ([loc_name],[sample1],[sample2],[sample3],[txt_char])
Dim strInput

strInput = [loc_name]
if [sample1] <> " " then
strInput = strInput & vbnewline & "<FNT name='ESRI Conservation'>" & "<CLR cyan='0' magenta='100' yellow='100' black='0'>" & [txt_char] & "</CLR>" & "</FNT>"
end if
if [sample2] <> " " then
strInput = strInput & vbnewline & "<FNT name='ESRI Conservation'>" & "<CLR cyan='100' magenta='0' yellow='100' black='0'>" & [txt_char] & "</CLR>" & "</FNT>"
end if
if [sample3] <> " " then
strInput = strInput & vbnewline & "<FNT name='ESRI Conservation'>" & "<CLR cyan='100' magenta='100' yellow='0' black='0'>" & [txt_char] & "</CLR>" & "</FNT>"
end if
FindLabel = strInput

End Function



Hope this helps,
Dave
0 Kudos
DonovanCameron
Occasional Contributor II
Well, since you are asking specifically to have callouts, and not Disperse Markers you could do some Character tricks...

For instance, I have found some funny fish symbols in the ESRI Conservations character set.


Now, create a new field (text field, 1-3 characters long) and create a selection, so select all fish points.

Open your windows Character Map, and change the pulldown to ESRI conservation:
[ATTACH]6387[/ATTACH]
Above, I have selected that fish symbol, which is the character 'E' (copy and paste from CharMap)

Go back to arcmap and calculate the selected fish points to all equal 'E' in that new text field.


Now you can turn that field into the label field. Go to the label tab in that layers Properties window and point to that text field and also, change the text from Arial or whatever to ESRI Conservation.

Now that will display using the fish symbol!
Just format that for a callout and you are good to go!

Click Label Styles > Properties > Properties > Advanced Text tab > place check beside Text Background > Properties button > in type pulldown select Line Callout or whatever you want
[ATTACH]6388[/ATTACH]

The options in that window for the callout are fairly comprehensive so play with those.


If you want to not have callouts, have you considered the Disperse Markers tool in the Cartography toolset? I think it needs ArcInfo though.

Or, just leave the points overlapped, but have different sizes using non-quantitative colours?
[ATTACH]6389[/ATTACH]
0 Kudos
LornaMurison
Occasional Contributor
Thank-you both so much, I had no idea you could do that.

I'm going to play around with it a bit and see if I can distribute the symbols properly or use callouts.

Now, create a new field (text field, 1-3 characters long) and create a selection, so select all fish points.

Problem with the above is that a point isn't necessarily a fish point.  It could be fish and chemistry, or fish and bugs, or just fish etc...

But I'll try playing around with it.

Thanks again.  Attached is a (very zoomed in) example of what I was able to do
0 Kudos
LornaMurison
Occasional Contributor
Thank-you both so much, I had no idea you could do that.

I'm going to play around with it a bit and see if I can distribute the symbols properly or use callouts.

Now, create a new field (text field, 1-3 characters long) and create a selection, so select all fish points.

Problem with the above is that a point isn't necessarily a fish point.  It could be fish and chemistry, or fish and bugs, or just fish etc...

But I'll try playing around with it.

Thanks again.  Attached is a very zoomed in example of what I was able to do
0 Kudos
LornaMurison
Occasional Contributor
Thank-you both so much, I had no idea you could do that.

I'm going to play around with it a bit and see if I can distribute the symbols properly or use callouts.

Now, create a new field (text field, 1-3 characters long) and create a selection, so select all fish points.

Problem with the above is that a point isn't necessarily a fish point.  It could be fish and chemistry, or fish and bugs, or just fish etc...

But I'll try playing around with it.

Thanks again.  Attached is an example of what I was able to do.
0 Kudos
DonovanCameron
Occasional Contributor II
Problem with the above is that a point isn't necessarily a fish point.  It could be fish and chemistry, or fish and bugs, or just fish etc...


Right, so you may have to set up your own 'conditions' and maybe reclass based on a set criteria.

Check out this thread called How to populate field using IF THEN ELSE in field calculator

From the Calculate Fields example help, do a find on that page for: "Classify based on field values" and that will take you to the Python reclass example.
0 Kudos
TinaGraver
New Contributor
Hi Lorna,

How were you able to resolve this? Your example is pretty close to what I need to do but you don't give any details.

Thanks for your time,
Tina
0 Kudos
LornaMurison
Occasional Contributor
I had a point shapefile, representing sampling locations, and each location was sampled for any combination of 4 things.
I used a particular font (esri environmental something) to get the symbols I needed and used windows character map to figure out how to express them.
My point shapefile attribute table had 4 fields, one for each sample/symbol type.  If the point was sampled for a given thing, then the field representing that thing was filled in with the appropriate symbol.  If it was not sampled, it was left blank (not null).  These fields were called QRY_2010.FLabel, QRY_2010.SLabel, QRY_2010.BLabel, and QRY_2010.CLabel.
In the label properties of the layer I used the following as an expression under label field:
Function FindLabel ( [QRY_2010.Flabel], [QRY_2010.Slabel], [QRY_2010.Blabel], [QRY_2010.Clabel] )
  
Dim strInput
if [QRY_2010.Flabel] = "¡" then
strInput = strInput & [QRY_2010.Flabel] 
end if
if [QRY_2010.Slabel] = "a" then
strInput = strInput & [QRY_2010.Slabel]
end if
if [QRY_2010.Blabel] = "¬" then
strInput = strInput & [QRY_2010.Blabel] 
end if
if [QRY_2010.Clabel] = "q" then
strInput = strInput & [QRY_2010.Clabel] 
end if

FindLabel = strInput
End Function

Parser = vbscript


Hope this helps 🙂