We have polygon maps of river-bottom type and are interested in determining if particular bottom-feeding fish prefer one bottom type over another. We locate an acoustically tagged fish at a point in time using a boat with an acoustic array. We have a measure of confidence of the location, but the measure of confidence is not a circle; it is more pie-shaped; i.e. we know that the fish is located in front of the boat in a semi-circle of know radius. We would like to create a semi-circular polygon at each location point with the semi-circular diameter perpendicular to the boat heading. We would like to use the resulting semi-circular polygons to clip out pieces of the underlying bottom type map. I am looking for a procedure in ArcGIS that would allow me to create these oriented semicircles given a table of locations and boat headings.
This arcpy script should get you most of the way there. The basic logic is: for each point in layer "points", create a circular buffer (radius = buffRad) and a slightly larger triangle pointing backwards from the point according to value in "bearing" field. Remove the portion of the circle within the triangle. There is a strong likelihood that you will have to play around with the number of degrees (+/- 90) to fit with your bearings.
>>> import math ... buffs =  ... buffRad = 1000 ... sr = arcpy.Describe("points").spatialReference ... with arcpy.da.SearchCursor("points",["SHAPE@","bearing"],spatial_reference=sr) as cursor: ... for row in cursor: ... buff = row.buffer(buffRad) ... angFL = row ... dxFL = math.cos(math.radians(angFL)) * buffRad * 1.5 ... dyFL = math.sin(math.radians(angFL)) * buffRad * 1.5 ... ptFL = arcpy.PointGeometry(arcpy.Point(row.centroid.X - dxFL, row.centroid.Y - dyFL)) ... angFR = row + 180 ... dxFR = math.cos(math.radians(angFR)) * buffRad * 1.5 ... dyFR = math.sin(math.radians(angFR)) * buffRad * 1.5 ... ptFR = arcpy.PointGeometry(arcpy.Point(row.centroid.X - dxFR, row.centroid.Y - dyFR)) ... angB = row - 90 ... dxB = math.cos(math.radians(angB)) * buffRad * 1.5 ... dyB = math.sin(math.radians(angB)) * buffRad * 1.5 ... ptB = arcpy.PointGeometry(arcpy.Point(row.centroid.X - dxB, row.centroid.Y - dyB)) ... triangle = arcpy.Polygon(arcpy.Array([arcpy.Point(ptFL.centroid.X,ptFL.centroid.Y),arcpy.Point(ptFR.centroid.X,ptFR.centroid.Y),arcpy.Point(ptB.centroid.X,ptB.centroid.Y)]),sr) ... semicircle = buff.difference(triangle) ... buffs.append(semicircle) ... arcpy.CopyFeatures_management(buffs,r'in_memory\buffs')