Creating arrows based on GPS velocities to show displacement

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.


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