5

I am attempting to update old sewer network data to a new format.
Manholes features (points) are collected and pipes(line features) are given attributes in the manhole if they intersect.

For example, if 4 pipes intersect a manhole, attributes for depth, diameter, material and clock face are attributed for each of the 4 pipes in the manhole attribution.
I have no problem populating the depth, diameter and material fields, but I am having a tough time populating the clock attribute.

Think of the manhole as a clock face: North is 12, East is 3, South is 6, and West is 9. I would like to calculate the angle at which each line intersects the manhole (azimuth, angle, or some other if it exists).
I could write a script populating the clock attribute based on these angles, but I am having a hard time finding the tool to make this calculation.
I have access to ArcGIS 10.1 and FME workbench. Maybe I have to write a script to make this calculation.

0

3 Answers 3

2

Since you have FME, I recommend using the PolylineAnalyzer which is a custom transformer you can download for free within FME. This will measure the angle of your line segments, and the angle at vertices.

Because this is a custom transformer, there's not much documentation, but the help says the following:

Takes polylines and polygons and analyzes relationships between their components - vertices and segments.

There are 9 outputs in the transformer:

  • Starting Azimuth (direction of 0)

  • Starting Angle (direction of 0)

  • Vertex labels with their number within each line or area

  • Vertices with their numbers, azimuths and angles of incoming and outgoing segments as attributes

  • Segments of the original lines or areas with angle, azimuth, vertex numbers at the beginning and the end, and length as attributes.

  • Angles between adjacent segments

  • Angle of each segment

  • Azimuth of each segment

  • Invalid Inputs (non-linear and non-polygonal features)

This transformer uses embedded versions of LoopFilter, VertexCounter and AzimuthCalculator custom transformers.

I haven't tried this yet, but you may need to use a FeatureMerger prior to using the PolylineAnalyzer to merge the incoming lines together.

1
  • Have used this successfully too for getting bearings.
    – Mapperz
    Oct 21, 2014 at 13:53
1

Is Python an option? If so, you could calculate the difference between two points (p1 and p2) where p1 is the intersection point and p2 is the endpoint of the first line segment.

enter image description here

// Begin Pseudocode
    xDelta  = p2.X - p1.X
    yDelta = p2.Y - p1.Y

    angleInDegrees = Atan2(yDelta, xDelta) * (180/Pi)
// End Pseudocode

Examples of this type of calculation can be found here:

https://stackoverflow.com/questions/7586063/how-to-calculate-the-angle-between-a-line-and-the-horizontal-axis

http://wikicode.wikidot.com/get-angle-of-line-between-two-points

1
  • 1
    Python is most definitely an option. I was hoping there was a tool already built which could do this but it seems like a python script may work best. If I figure something else, I will post my process and results. Thanks!
    – gmaynard
    Oct 20, 2014 at 20:17
1

I use Geo Wizards for this.
The point angle position tool has output like this... But it is not free.

Outputs:

A new Point feature class.
The attribute table of the resulting feature class will have three new fields [ET_Angle]

    • the angle of the closest segment of the closest to the point polyline. The angle is in degrees 0.00 = North, clockwise. [ET_Pos]
    • the distance from the start point of the closest polyline to the point along the polyline as a percentage of the total length of the polyline. [ET_Station]
    • the actual distance from the start point of the closest polyline to the point along the polyline, measured in the map units [ET_Dist]
    • the shortest distance from the point to the closest polyline measured in the map units [ET_Side] - indicates on which side of the polyline is the point (introduced in version 10.2). [ET_M]/[ET_Z]
    • the M(Z) value interpolated from the closest polyline (if the reference dataset is of PolylineM(Z) type) [ET_Closest]
    • the ID of the closest polyline from the reference dataset.

Then in FME the spatial filter tool will get you to the first step of selecting the intersecting points (manholes).

2
  • 1
    Just to clarify, you actually need ET GeoWizards, not GeoTools for this function. Oct 20, 2014 at 19:16
  • Thanks for the response. I'll check out the ET GeoWizards package to see if it's worth investment for us and keep it in mind as a possible solution.
    – gmaynard
    Oct 20, 2014 at 20:09

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