Question

How to proportionally split attributes based on where an original line feature is split into multiple new features?

  • 11 February 2021
  • 4 replies
  • 6 views

I am working with street network data (in Esri format) that has attributes for address ranging. I am going to be splitting the streets everywhere they intersect a crosswalk feature and I would like the address ranging to then be split between the resulting features proportionally instead of being duplicated to both from the original.

 

I've attached a beautifully done MS Paint illustration. Essentially, segments currently have 4 attributes: Left_Address_FROM, Left_Address_TO, Right_Address_FROM, and Right_Address_TO. Right and left are determined based on the direction the segment is drawn.

 

FME 

In the illustration the original segment has attributes:

Left_Address_FROM = 1

Left_Address_TO = 199

Right_Address_FROM = 2

Right_Address_TO = 200

 

If I split the segment at the midpoint, I would need the attributes on the new segments to be:

Segment 1 - Left_Address_FROM = 1

Segment 1 - Left_Address_TO = 99

Segment 1 - Right_Address_FROM = 2

Segment 1 - Right_Address_TO = 100

Segment 2 - Left_Address_FROM = 101

Segment 2 - Left_Address_TO = 199

Segment 2 - Right_Address_FROM = 102

Segment 2 - Right_Address_TO = 200

 

Using the LineOnLineOverlayer transformer is simple enough to split the segments at their intersections with crosswalk features, but I'm wondering if there is a way to proportionally attribute the segments like I have described rather than just duplicating them from the original segment.

 

Any input is greatly appreciated. Thank you!


4 replies

Userlevel 3
Badge +17

Hi @srodonnell​ 

I think using measures would be a good method for the output desired. Use MeasureSetters to set the appropriate measure value at the start and end vertices of the line for each side. Once the measures have been set, splitting the line with LineOnLineOverlayer or PointOnLineOverlayer will automatically generate new measures. You can then use MeasureExtractors to get the new measures and rename them to the appropriate attribute.

MeasuresThe results should look like this.

MeasuresOutput

Badge +20

The solution @debbiatsafe​  presents is in accordance with your desired output but that is not how addresses are distributed.

You should have points or polygons for the addresses and requerry them as neighbors for a correct output.

Hi @srodonnell​ 

I think using measures would be a good method for the output desired. Use MeasureSetters to set the appropriate measure value at the start and end vertices of the line for each side. Once the measures have been set, splitting the line with LineOnLineOverlayer or PointOnLineOverlayer will automatically generate new measures. You can then use MeasureExtractors to get the new measures and rename them to the appropriate attribute.

MeasuresThe results should look like this.

MeasuresOutput

Hi @debbiatsafe​ ,

 

This is awesome and very close to what I am needing! The only extra thing I would be looking to do is keep the odds/evens to their respective sides (ie. If Left_Address_FROM is odd, then Left_Address_TO must also be odd) and not have overlapping ranges between the newly created segments.

 

So in your example segment 2's Left_Address_FROM would be 101 and Right_Address_FROM would be 102.

 

If you know of a way to ensure those rules are followed, then you are an absolute hero!

Userlevel 3
Badge +17

Hi @debbiatsafe​ ,

 

This is awesome and very close to what I am needing! The only extra thing I would be looking to do is keep the odds/evens to their respective sides (ie. If Left_Address_FROM is odd, then Left_Address_TO must also be odd) and not have overlapping ranges between the newly created segments.

 

So in your example segment 2's Left_Address_FROM would be 101 and Right_Address_FROM would be 102.

 

If you know of a way to ensure those rules are followed, then you are an absolute hero!

Unfortunately, measures don't have a concept of odd/even numbering for a given side of a linear feature as in the case of addresses. If you used measures, you would have to do some post-processing to ensure your values are valid according to your rules.

For the example you gave, you could add 2 to the FROM attribute values for the second segment. However, this may not work in your real dataset where the intersection point may not be quite so well placed (eg. in the middle of a line).

In that case, you may want to explore @caracadrian​ 's suggestion.

Reply