Provide a tool to identify parameters of an existing curve

398
10
4 weeks ago
Status: Open
SeanLyons
New Contributor III

Our organization receives plans in with radial bearings defining the direction of the curve. Once entered, the parcel fabric in ArcGIS Pro stores this information in chord bearing. We have no issue with the fact that this is stored in chord bearing, but once stored, there doesn't appear to be an easy way to identify the radial bearing of a curve anymore. We would like a tool (perhaps something on the Parcel Utilities Add-In?) that, when we click on a curve, provides all the curve parameters. Or, similar to the Traverse window, where you can specify curve parameters, can this be an enhancement to the Attribute Window for once the curve has been entered? 

Our use case for this is: we had a parcel with a high misclosure and we couldn't figure out why. It turned out to be due to a bad curve bearing, but this was very hard to identify, since the plan displayed radial bearings and the lines in the fabric displayed chord bearings. In ArcMap, we would have opened the parcel, which would have showed us the radial bearing since those would have been the properties stored on the plan. Then we could easily compare what was entered to the plan. We would find it helpful to have something that allowed us to do this in ArcGIS Pro. 

SeanLyons_0-1712240868548.png

that radial line in shown in desktop

SeanLyons_1-1712240904569.png

needs to be this according to plan

SeanLyons_2-1712240938349.png

but you only get the chord in ArcGIS pro so I have no way to enter a new radial

10 Comments
TimHodson

@SeanLyons- a pop-up is a good option for this. You can configure the popup for the line layer to calculate the Radial direction (and other curve parameters) from the existing circular arc COGO attributes, and then present those in the pop-up list. Like this:

TimHodson_1-1712265143056.png

 

Radial Direction Arcade Expression:

function DMS_North(azimuth){
    return ConvertDirection(azimuth, {directionType:'North', angleType: 'Degrees'}, {directionType:'North', angleType: 'DMS', outputType: 'text', format: 'd[°]mm[\']ss["]'})
}
var radius = $feature.Radius
var arcLength = $feature.Arclength
var chordDirection = $feature.Direction
if( IsEmpty(radius) || IsEmpty(arcLength))
 return

var delta = arcLength / radius;
var chordDistance = 2.0 * abs(radius) * Sin(abs(delta) / 2.0)
if ( IsEmpty(chordDirection) )
return

var isCCW = radius < 0.0
var isMajor = delta > PI * 2.0
var tangentDirection = chordDirection - (delta/2.0*180.0/PI)
var radialDirection
iif(isCCW, radialDirection = tangentDirection - 90.0, radialDirection = tangentDirection + 90.0)
return DMS_North(radialDirection)

 

Tangent Direction Arcade Expression:

function DMS_North(azimuth){
    return ConvertDirection(azimuth, {directionType:'North', angleType: 'Degrees'}, {directionType:'North', angleType: 'DMS', outputType: 'text', format: 'd[°]mm[\']ss["]'})
}
var radius = $feature.Radius
var arcLength = $feature.Arclength
var chordDirection = $feature.Direction
if( IsEmpty(radius) || IsEmpty(arcLength))
 return
var delta = arcLength / radius;
var chordDistance = 2.0 * abs(radius) * Sin(abs(delta) / 2.0)
if ( IsEmpty(chordDirection) )
return
var isCCW = radius < 0.0
var isMajor = delta > PI * 2.0
var tangentDirection = chordDirection - (delta/2.0*180.0/PI)
return DMS_North(tangentDirection)

 

Chord Distance Arcade Expression:

var radius = $feature.Radius
var arcLength = $feature.Arclength
var chordDirection = $feature.Direction
if( IsEmpty(radius) || IsEmpty(arcLength))
 return
var delta = arcLength / radius;
var chordDistance = 2.0 * abs(radius) * Sin(abs(delta) / 2.0)
return Round(chordDistance,3)

 

Central Angle Arcade Expression:

function RadiansToDMS(input_radians){
    return ConvertDirection(input_radians, {directionType:'North', angleType: 'Radians'}, {directionType:'North', angleType: 'DMS', outputType: 'text', format: 'd[°]mm[\']ss["]'})
}
var radius = $feature.Radius
var arcLength = $feature.Arclength
var chordDirection = $feature.Direction
if( IsEmpty(radius) || IsEmpty(arcLength))
 return
var delta = arcLength / abs(radius)
return RadiansToDMS(delta)

 

 

 

 

 

SarahSibbett

@TimHodson thanks so much for the details on this idea. I had discussed this with @SeanLyons , and he agreed it would be a good option, but wanted to proceed with the ideas post, since he still sees value in being able to configure the Attribute Pane so that the correct radial bearing could be entered into the bearing field directly. 

Using your suggestion would resolve the request to see all the curve parameters, but it does not address being able to correct the dimensions of the curve without creating a new one. For example, I could use the pop-up to verify the radial bearing of the curve in the fabric, but I could not fix an error by entering in the correct radial bearing according to the plan without using the Circular Arc tool to create a new line. 

Does this make sense? 

SarahSibbett

@SeanLyons the title of this ideas post may need to be updated to better reflect the request. It's not just identifying the parameters of an existing curve, but specifically configuring the attribute pane so that different curve parameters can be updated, as required. 

TimHodson

@SarahSibbett @SeanLyons Yes it does make sense. In your workflows, would such a tool need to also update the geometry of the circular arc, or does it only need to recalculate the chord direction attribute from the re-entered radial direction?

Or ... something else, for example- it only updates the geometry if:

  • there is no fabric point at its end?
  • a check-box option that is presented in the UI is checked?
  • other?
SeanLyons

Good Morning Tim,

I think the tool would be better if it could update both the geometry and the chord bearing. I feel it guarantees a better result to make sure everything stays better aligned and give a better visual result.

In minor changes I think the chord bearing only would be fine but in more major changes I think you could end up with some weird visual representations with stuff not aligning if you didn't update both the Chord Bearing and the Geometry.

@SarahSibbett 

TaylorMcInnes08

If we had the option to update the geometry or not, that would be ideal.

TimHodson

@SeanLyons @TaylorMcInnes08 @SarahSibbett 

The other thing to consider as a workaround is to use the Traverse's "Trace Lines" tool. Set the traverse tool's Direction parameter to Radial, if you haven't already, and then save the project to make sure this setting is persisted with the map.

TimHodson_0-1713301755932.png

TimHodson_1-1713301781970.png

 

Trace over the circular arc line, and change the Radial direction to the corrected value. The geometry of the line will change.

If the preference is to prevent the geometry change, then you can use the "Set Closing" button and click the other end of the circular arc. If needed, use the "Force Close" on the traverse tool settings under the burger button. This would be needed if the change in bearing results in the new end if the circular arc moving beyond the specified closure tolerance (the default closure tolerance is 0.3meters).

TimHodson_2-1713301896917.png

 

 

SarahSibbett

@TimHodson thanks so much for sharing this idea. In my opinion it would still be ideal to have a workflow that allows you to modify the existing lines as opposed to creating new ones, but as a workflow for now, I think this would be ok. @SeanLyons any thoughts? 

TimHodson

Hi @SarahSibbett - using the "Trace Lines" tool actually does modify the existing lines, and does not create new ones. The trace takes the existing COGO stored on the lines into the traverse grid so that you can fix/re-enter the values for that same set of lines. In this example it's a "one-course" traverse, but if you want to re-check the closure for the original entered values (usually in a closed loop), then you'd trace over the whole loop. After you type in the new COGO values the geometry will update, to adjust the traverse based on the type of closure chosen. For the "one-course-traverse" workaround, that one existing line would have its geometry updated, unless you've set the close point, force close setting, etcetera, as described above.

SeanLyons

I am okay with the workaround but would prefer a less step intensive approach if possible since the tracing can be somewhat difficult in a busy area with a lot of crossing lines