POST
|
We're seeing Geodatabase.ApplyEdits() leaving what appear to be unnecessary records in the SDE.STATES and SDE.STATE_LINEAGES tables when we edit non-SDE Versioned data, and are wondering what the cause is. This from within a "headless" console application, which is why we are using Geodatabase.ApplyEdits(). We do not see this issue when using EditOperation.ExecuteAsync, from within an ArcGIS Pro add-in. If we point the code below at a non-SDE Versioned Feature Class, we end up with additional records in the SDE.STATES and SDE.STATE_LINEAGES tables. For example - if we have only one row in both SDE.STATES and SDE.STATE_LINEAGES, and we run the code below that inserts a row into a non-versioned feature class, at the end of the run we'll have two records in SDE.STATES and three records in SDE.STATE_LINEAGES. If there are lots of updates to a non-versioned feature class in a day, that means our STATES and STATE_LINEAGES tables grow by quite a bit. Which means the user has to compress the database more frequently and/or takes a performance hit on querying versioned layers in the database. Here's the code we are executing (it's based on the ProConcepts Geodatabase ApplyEdits sample😞 DatabaseConnectionProperties connectionProperties = new DatabaseConnectionProperties(EnterpriseDatabaseType.Oracle) { AuthenticationMode = AuthenticationMode.DBMS, Instance = @"OUR_SERVER", User = "xxx", Password = "xxx", Version = "SDE.DEFAULT" // We've also tried setting this to NULL and not setting it at all. }; using (Geodatabase gdb = new Geodatabase(DatabaseConnectionProperties)) { using (FeatureClass featureClass = gdb.OpenDataset<FeatureClass>("TEST_NONVERSION_FC")) { FeatureClassDefinition fcDefinition = fc.GetDefinition(); gdb.ApplyEdits(() => { using (RowBuffer rowbuffer = featureClass.CreateRowBuffer()) { // set an attribute value rowbuffer[1] = 12; // create a geometry List<MapPoint> points = new List<MapPoint>(); points.Add(MapPointBuilder.CreateMapPoint(-85.003, 47.012800, 100, 0, fcDefinition.GetSpatialReference())); points.Add(MapPointBuilder.CreateMapPoint(-105.994, 26.368, 1000, 1000, fcDefinition.GetSpatialReference())); using (PolylineBuilder pb = new PolylineBuilder(points)) { pb.SpatialReference = fcDefinition.GetSpatialReference(); pb.HasM = true; pb.HasZ = true; rowbuffer[fcDefinition.GetShapeField()] = pb.ToGeometry(); } // insert the data into the feature class using (Feature f = featureClass.CreateRow(rowbuffer)) { } } }); } } Is the above code's workflow more or less correct? Is there an additional cleanup we need to perform?
... View more
10-17-2018
09:14 AM
|
0
|
2
|
1105
|
POST
|
Looks like we'll also need to implement GetNormalsAtM()
... View more
10-15-2018
01:15 PM
|
2
|
2
|
1196
|
POST
|
Hi Annette - From IMSegmentation, we'll need: GetSubcurveBetweenMs GetPointsAtMs SetMsAsDistance MMax MMin MMonotonic SetAndInterpolateMsBetween When you folks implement these - are you interpolating between the known coordinate/measures, or is there more complicated geometry going on? We will be using projected coordsys... So...if you have a route points at measure 0 and 100, and you need coordinate at measure 50, are you taking the coords at the 0 and 100 points and interpolating? Or is it harder than that? As a stopgap until yours are available, we are thinking about writing our own, is why I ask. Thank you - Dale
... View more
10-11-2018
10:59 AM
|
2
|
4
|
1196
|
POST
|
Thank you Annette. I was just about to post a follow-up question regarding what to do if the measures on the route don't match the distance, so your reply is most timely There may be a couple of other functions from IMSegmentation that we need as well - I'll post here as I come cross them.
... View more
10-11-2018
10:18 AM
|
1
|
0
|
233
|
POST
|
Think I found it. The IGeometryEngine interface in the ArcGIS.Core.Geometry namespace has a GetSubCurve() method. That ought to work. Bet the others are in here, too. Thanks all - Dale
... View more
10-10-2018
02:51 PM
|
0
|
1
|
1196
|
POST
|
Does the ArcGIS Pro SDK support linear referencing? Specifically, some of the functionality exposed by the ArcObjects IMSegmentation interface. Methods such as: GetSubcurveBetweenMs (gets the geometry defined on a route between measure m1 and m2) GetPointsAtMs (gets the points from a route where a specific measure occurs) SetMsAsDistance (sets the measures on a route based on distances) So far, the closest I've found has been the CIMMarkerPlacementAtMeasuredUnits, which "Represents marker placement at geometry M values." Is there other support in the SDK , and I'm just looking in the wrong place? If that's the case - where should I look? Thank you - Dale
... View more
10-10-2018
02:35 PM
|
0
|
10
|
1676
|
POST
|
This is regarding the Polling feature services for "Incremental Updates blog post. I'm asking this question here as well since I'm not sure if the blog post is still monitored(?) If I'm understanding the workarounds correctly - I don't think they'll work for us. We're not handling streams of real-time data, but are trying to respond to changes in the data sources - "Somebody edited a field, which changed data the contents of this FeatureData Service". We are potentially looking at millions of records - even retrieving these from the feature data services so that we can apply the workarounds will take a large amount of time. As a way around this, so that GeoEvents Service remembers the 'last polled' datetime between service restarts, would you recommend that we write custom component that serializes the datetime? If so - which component? A custom transport component? Thank you.
... View more
07-20-2018
09:07 AM
|
0
|
1
|
1801
|
BLOG
|
If I'm understanding the workarounds correctly - I don't think they'll work for us. We're not handling streams of real-time data, but are trying to respond to changes in the data sources - "Somebody edited a field, which changed data the contents of this FeatureData Service". We are potentially looking at millions of records - even retrieving these from the feature data services so that we can apply the workarounds will take a large amount of time. As a way around this, so that GeoEvents Service remembers the 'last polled' datetime between service restarts, would you recommend that we write custom component that serializes the datetime? If so - which component? A custom transport component? Thank you. Reply posted to Question regarding "Incremental Update" workarounds, custom components?
... View more
07-20-2018
08:58 AM
|
0
|
0
|
2880
|
Title | Kudos | Posted |
---|---|---|
1 | 10-11-2018 10:18 AM | |
2 | 10-15-2018 01:15 PM | |
2 | 10-11-2018 10:59 AM |
Online Status |
Offline
|
Date Last Visited |
11-11-2020
02:24 AM
|