8

I am having trouble creating symbology in ArcGIS that can show velocity arrows of GPS stations. I have a point file with location information, velocity and direction of each GPS station. I want to create a map similar to the image I have attached. The size of the arrows stay the same but the length changes based on the velocity. See below.

enter image description here

My first instinct was to use graduated symbols however that just scales the arrows and does not stretch them.

12

I think your best bet is presenting data by lines.

  • Create any size buffer around points
  • Convert them to lines

Apply following field calculator expression (Python) on Shape field:

def plineM (B,V,SCALE,shp):
 b=float(B);v=float(V)
 part=shp.getPart(0)
 buf=arcpy.Polygon(part)
 pC=buf.centroid
 X=pC.X+v*SCALE*math.cos(b/180*3.141593)
 Y=pC.Y+v*SCALE*math.sin(b/180*3.141593)
 newP=arcpy.Point(X,Y)
 pLine=arcpy.Polyline(arcpy.Array([pC,newP]))
 return pLine

----------------------------

plineM( !BEARING!, !Velocity!,0.5, !Shape! )

Making sure your bearings expressed in degrees, counter clockwise from East

INPUT POINTS TABLE:

enter image description here

OUTPUT:

enter image description here

You might want to play with scale factor. Note it is tested on shapefile, if it is not the case start editing session on lines before running expression.

UPDATE: January 2020

A couple of people reported ERROR 000539 when using suggested expression. Vey likely reason is large buffer around original point, resulting in buffer overlaps. If you are using build-in ArcGIS tool to convert buffers to lines it might result in lines made of 2 vertices:

enter image description here

Possible workaround is making smaller buffers.

| improve this answer | |
  • Great answer. Definitely lines are the way to go here. – Fezter Nov 18 '16 at 0:13
  • 1
    Yes, I did, otherwise why point 2 in the post? Another approach is compute end coordinates using same formulas in polygons table and use xy to line tool. – FelixIP Jan 21 at 2:31
  • 1
    Read above comments. If this doesn't work, convert to a true script. Arcgis calculator, can be unpredictable, to say a least. – FelixIP Jan 21 at 6:14
  • 1
    @JGIS see updated answer. – FelixIP Jan 22 at 2:15
  • 1
    I see 2 possible reasons: a) your PC doesn't know what sine is, unlikely b) you didn't read my post and expressed angles in something else, but degrees. Highly likely. – FelixIP Jan 22 at 4:36
2

FelixIP has provided quite an elegant solution. A more simple alternative would be:

  1. Set the Symbology for your point layer to "Graduated Symbols", with the Value set to your VELOCITY field.
  2. Click the Template button to select a symbol which would be suitable for depicting bearings and velocities - I chose an arrow from the ESRI North font for the example.
  3. Set the Symbol Size range to some values which will work for your map (you can refine these values later).
  4. Click the Advanced button and select the "Rotation" option. In the Rotate window, select the Bearing field from the drop-down box, and choose the rotation style to suit your data.

(1)

Step 1

(2)

Step 2

(4)

Step 3

(Example result)

Step 4

| improve this answer | |
  • I should have pointed out that these symbols will be centred on where the point is located. This can be changed so that the starting point of the arrow is located at the GPS point by changing the Y offset of the pointer symbol in step 2 so that the base of the arrow is level with the X axis of the preview. If necessary, you could also add a point layer to the symbol to show the GPS point. – Adam Nov 23 '16 at 0:02
  • 1
    Thanks for your suggestion. However I was looking for a solution where the length of arrow would change based on the velocity, not just scale the size of the arrow. – dmariamp Jan 17 '17 at 22:56

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.