Create curve/arc from points

750
3
11-29-2012 03:57 AM
BrunoMoser
New Contributor II
Hi

I've got a set of links between two location each (A-B) and I'd like to create curved polylines, rather than a straight line from A to B. This is for reasons of legibility as a lot of points sit on similar x or y coordinates and the straight lines overlap too much.

Would anyone know how to do automate this process? The straigth A-B line is obviously straight forward, but I can't find any references of how to create an arc between two points.

Cheers,
Bruno
0 Kudos
3 Replies
DanLee
by Esri Regular Contributor
Esri Regular Contributor
You can try to create line from points using Points To Line tool (Data Management - Features).
Then use Smooth Line tool (Cartography - Generalization) withe BEZIER option to get Bezier curve for the line.

Does that work for you?
0 Kudos
markdenil
Occasional Contributor III
One needs three non linear points to get a curve with SmoothLine & BEZIER_INTERPOLATION, does one not?
Bruno has only the two end points.

He could calculate a point mid-way point on the straight a-b line, and then offset it a certain amount (progressively or randomly).
That would give three points for SmoothLine.
It would also be a lot of code, and may be a bit crude.

If the lines are very long, one could calculate the lines in a coordinate space where they are straight, densify them, and then project them to the target space where they would be curved.
For example, plot lines A-B, A-C, A-D, A-x in an azimutahal space centered on A.
Densify the lines to 'pin down' the path geographically.
project to a target space (say, Mercator) for display
the lines should be curved....
As I said, the lines would have to be long enough for the earth's curvature to matter.
0 Kudos
DanLee
by Esri Regular Contributor
Esri Regular Contributor
Here is an idea:

1. Run Buffer on inputLine with a distance d (your choice) using the LEFT or RIGHT side type and the FLAT end type. You get an output, bufferOneSide.
2. Run Feature To Line using both inputLine and bufferOneSide as input. Call the output newLines. You probably get two lines, one straight and one as the side of the buffer.
3. Select the longer one of the two lines from newLines and run Smooth Line tool using the PAEK algorithm with a tolerance (try 4 x d; or find a tolerance you like). The square corners of the selected line (side of the buffer) should be rounded.

Could this resulting line be used as a curved offset line?
0 Kudos