I have data with X/Y data that plots and I'm trying to get it to look like so:
I've tried near analysis, and it gets me close but doesn't label them in a clockwise manner. Is there any geoprocessing tool or arcpy process that I'm overlooking that will accomplish this?
Solved! Go to Solution.
slow week
aoi # a square
array([[ 0.00, 5.00],
[ 5.00, 10.00],
[ 10.00, 5.00],
[ 5.00, 0.00],
[ 0.00, 5.00]])
def geom_angles(a, fromNorth=False):
"""Polyline/segment angles.
Parameters
----------
a : array-like
A Geo array or a list of arrays representing the polyline shapes.
"""
out = []
dxy = a[1:] - a[:-1]
ang = np.degrees(np.arctan2(dxy[:, 1], dxy[:, 0]))
if fromNorth:
ang = np.mod((450.0 - ang), 360.)
return ang
geom_angles(aoi, fromNorth=False) # -- option 1
array([ 45.00, -45.00, -135.00, 135.00])
geom_angles(aoi, fromNorth=True) # -- option 2
array([ 45.00, 135.00, 225.00, 315.00])
cent = np.mean(aoi[:-1]) # -- now from the center of the points
vals = aoi - cent # -- angles from the center
vals
array([[ -5.00, 0.00],
[ 0.00, 5.00],
[ 5.00, 0.00],
[ 0.00, -5.00],
[ -5.00, 0.00]])
geom_angles(vals, fromNorth=False)
array([ 45.00, -45.00, -135.00, 135.00])
geom_angles(vals, fromNorth=True)
array([ 45.00, 135.00, 225.00, 315.00])
You can write your own, but I doubt there's any general purpose tool for this.
The atan2 function takes dy & dx parameters, but that's counter-clockwise from 3-o'clock,
so you'd need to reverse the sign and rotate.
- V
slow week
aoi # a square
array([[ 0.00, 5.00],
[ 5.00, 10.00],
[ 10.00, 5.00],
[ 5.00, 0.00],
[ 0.00, 5.00]])
def geom_angles(a, fromNorth=False):
"""Polyline/segment angles.
Parameters
----------
a : array-like
A Geo array or a list of arrays representing the polyline shapes.
"""
out = []
dxy = a[1:] - a[:-1]
ang = np.degrees(np.arctan2(dxy[:, 1], dxy[:, 0]))
if fromNorth:
ang = np.mod((450.0 - ang), 360.)
return ang
geom_angles(aoi, fromNorth=False) # -- option 1
array([ 45.00, -45.00, -135.00, 135.00])
geom_angles(aoi, fromNorth=True) # -- option 2
array([ 45.00, 135.00, 225.00, 315.00])
cent = np.mean(aoi[:-1]) # -- now from the center of the points
vals = aoi - cent # -- angles from the center
vals
array([[ -5.00, 0.00],
[ 0.00, 5.00],
[ 5.00, 0.00],
[ 0.00, -5.00],
[ -5.00, 0.00]])
geom_angles(vals, fromNorth=False)
array([ 45.00, -45.00, -135.00, 135.00])
geom_angles(vals, fromNorth=True)
array([ 45.00, 135.00, 225.00, 315.00])
Thanks Dan!