Skip to main content
Question

How to test for Esri ArcPro Arc


juliarozema
Contributor
Forum|alt.badge.img+7

We need a way to detect/test for Arcs in our Esri SDE database.  

 

We manage a large road line segment.  The system that uses this data does not accept Arcs, just polylines. 
Previously, we edited our data in ArcMap, then run a nightly job to check our data in FME.  Using the PathSplitter, followed by the GeometryFilter we could then find any Arcs that had been introduced into our data.

 

Now that we are editing our data within ArcGIS Pro, it seems that Arcs show up as an Arc within Pro, but in FME, the segments show up as Lines and are not flagged with the workflow, mentioned above, using PathSplitter and GeometryFilter.

 

How can we filter/test to find the Arcs in our data?

Using
FME 2024.1
ArcPro 3.2.3
ESRI SQL SDE 10.9.1

Example Arc attached in FGDB.  Then the Feature is opened in ArcPro, and an edit session is started to ‘Edit Vertices’, we can see that there is a verity that controls the curve of the line. 

10 replies

crutledge
Influencer
Forum|alt.badge.img+33
  • Influencer
  • May 5, 2025

Hi ​@juliarozema I tried multiple ways of splitting, reading and rebuilding the line but I see no arc. Linestring on read and on out. In the example you provided (thanks for providing!!) I could not see an arc. But this still fails or SDE? In the process of being written to SDE is there a writer that is defining these as Arc?
 

 


juliarozema
Contributor
Forum|alt.badge.img+7
  • Author
  • Contributor
  • May 6, 2025

Thank you, ​@crutledge  for taking a look at this.
Here are further details.

Within our GIS data, we are able to have ARCs, but the data has to be loaded into another system and it doesn’t accept ARCs.  So, we use FME to check the data and let us know if an ARC snuck into our data.  The secondary system says that the segment is an ARC, but maybe it is actually classified as something else within the SDE?

Using the sample feature from my first post, when I go into ArcGIS Pro and select “Edit Vertices” I see the node-handle bar things that are used to adjust an Arc (see image). 

ArcPro | Edit Vertices | Blue node-handles for adjusting an Arc shows up on sample feature.
​​​​​​

 

For road segments without an Arc, usually I only see vertices.

ArcPro | Edit Vertices | Just vertices shows up on a regular road segment.

 

Might this sample Road Segment that seems like an Arc, be classified as something other than an Arc?

And, how can we use FME to test for it?

 

Thanks again for your thoughts and help


daveatsafe
Safer
Forum|alt.badge.img+19
  • Safer
  • May 15, 2025

The Road Segment has a spline geometry, which is another type of curve. FME does not support spline geometry, so the reader is automatically stroking it to linestring that closely follows the spline path. This is generally sufficient for working with the data, but there is no way to distinguish a stroked spline from a regular polyline.


j.botterill
Influencer
Forum|alt.badge.img+40
  • Influencer
  • May 20, 2025

here is the FME geometry model that helps understand the fme supported geometries

https://docs.safe.com/fme/html/FME-Form-Documentation/FME-ReadersWriters/!FME_Geometry/FME_Geometry_Model.htm


juliarozema
Contributor
Forum|alt.badge.img+7
  • Author
  • Contributor
  • May 22, 2025

Thank you, to each of you, for looking into this for me.

Nutshell:
With FME transformers, there is no way to test for a spline as this is not currently a geometry supported by FME (but maybe it will be?).

I can look into ArcPy functions to see if there is a way to isolate a spline and, if so, then use a Python Caller to do this within FME.


crutledge
Influencer
Forum|alt.badge.img+33
  • Influencer
  • May 22, 2025

@juliarozema Yeah. I am at a loss here. I think this should go in the suggestion box. My only other suggestion is to test a combination of the following and see if chopping, geometry coercing etc can ‘get rid’ of that phantom geometry type.
Can you get a report of what fails and then re-process those pieces. Not elegant but….
 

 


ebygomm
Influencer
Forum|alt.badge.img+39
  • Influencer
  • May 23, 2025

If I’m understanding correctly, you want FME to identify Arcs but there’s no requirement for FME to actually process the data? The SDE data goes straight to destination but fails if it contains Arcs/Splines, so you need to identify and rectify at source?

 

In ArcPy you can access SHAPE@JSON which will give you the json representation that will include the word curve

{"curvePaths":[[[94903.242399999872,5908395.4097000007],{"b":[[94942.239400000311,5908341.5438000001],[94918.435656980277,5908385.1962123485],[94942.307510492625,5908376.6501305643]]},[94943.542000000365,5908337.5573999994]]],"spatialReference":{"wkid":102185,"latestWkid":3401}}

 


juliarozema
Contributor
Forum|alt.badge.img+7
  • Author
  • Contributor
  • May 23, 2025

@ebygomm Yes!  This is exactly the situation.  Just need to identify the Arcs/Splines.

Might you be wiling to share an example of what is needed within the PythonCaller to access the SHAPE@JSON?

Or is there a transformer that can also extract this info?

 

Thank you for your help.


jackyd
Contributor
Forum|alt.badge.img+11
  • Contributor
  • May 24, 2025

ebygomm
Influencer
Forum|alt.badge.img+39
  • Influencer
  • May 24, 2025

I think I have an example of how to identify the objectids of features with splines using a python caller, I will see if I can locate it.

import fme
import fmeobjects
import arcpy


class FeatureProcessor(object):

    def __init__(self):
        pass

    def input(self, feature: fmeobjects.FMEFeature):
        arcpy.env.workspace = FME_MacroValues['SourceDataset_GEODATABASE_FILE']
        fc = 'ARCS'
        with arcpy.da.SearchCursor(fc, ["OID@", "SHAPE@JSON"],feature.getAttribute('datequery')) as cursor:
            cursor.reset()
            for row in cursor:            
                if "curve" in  cursor[1]:
                    feature.setAttribute("OBJECTID",cursor[0])
                    feature.setAttribute("ContainsCurves","True")
                    self.pyoutput(feature)




    def close(self):

        pass

This produces a feature with the objectid for any feature that contains curves. The datequery attribute is used to filter only recently edited features. I can’t say how performant it is, it was only used to check a handful of recently edited features on each run


Reply


Cookie policy

We use cookies to enhance and personalize your experience. If you accept you agree to our full cookie policy. Learn more about our cookies.

 
Cookie settings