ThinkGeo.com    |     Documentation    |     Premium Support

Updating X Y values of InMemoryFeatureLayer

I have created an InMemoryFeatureLayer of a point that I am displaying on the map.   I want to be able to move the point,  the idea is to have the point move when a GPS device updates the location.  But right now I just have  a button I push to hardcode the move.



It is not updating the point with the new X, Y

        



Dim GPSPoint As InMemoryFeatureLayer
Dim ThePoint As PointShape
 
GPSPoint = New InMemoryFeatureLayer
GPSPoint = pointOverlay.Layers("PointLayer")
 
ThePoint = New PointShape
ThePoint = GPSPoint.InternalFeatures(0).GetShape
 
 
ThePoint.X = -95.4809
ThePoint.Y = 38.9543
 
 
GPSPoint.Open()
 
GPSPoint.FeatureSource.BeginTransaction()
GPSPoint.FeatureSource.UpdateFeature(ThePoint)
GPSPoint.FeatureSource.CommitTransaction()
GPSPoint.Close()
 
WpfMap_Main.Overlays("PointOverlay").Refresh()



Thanks.

Shayne.





Hi Shayne,



I noticed you are missing the updated point id when you update the point. In order to update a feature shape, we need to know its original feature unique Id. So, please try to add the below codes:


ThePoint.X = -95.4809
ThePoint.Y = 38.9543
 ThePoint.ID = GPSPoint.InternalFeatures(0).ID
  
GPSPoint.Open()
  
GPSPoint.FeatureSource.BeginTransaction()
GPSPoint.FeatureSource.UpdateFeature(ThePoint)
GPSPoint.FeatureSource.CommitTransaction()

Hope it helps.

Thanks,

Troy

Troy, 
  
 Unfortunately that did not help. 
  
 I also tried updating it with EditTools and then again creating a new feature.   After doing the CommitTransaction, GPSPoint still does not get updated. 
  
 This is the code where I am creating a new feature,  rather than using a shape. 
  
  
        Dim GPSPoint As InMemoryFeatureLayer
        Dim targetFeature As Feature

        GPSPoint = pointOverlay.Layers(“PointLayer”)

        'grab the first feature in the in memory layer  (it is the only one in the layer)
        targetFeature = GPSPoint.InternalFeatures(0)

        'create a separate feature with the x/y from the GPS

        Dim thePoint As Feature
        thePoint = New Feature(-95.4809, 38.9543)

        'copy the id of the in memory feature over to the new feature
        thePoint.Id = targetFeature.Id

        'process/commit the transaction
        GPSPoint.Open()
        GPSPoint.EditTools.BeginTransaction()   ’ Also tried with FeatureSource instead of EditTools
        GPSPoint.EditTools.Update(thePoint)
        GPSPoint.EditTools.CommitTransaction()
        GPSPoint.Close()


Hi Shayne,



I guess I know what  the problem is. I guess when you add a new feature into the inMemoryLayer, you are using some codes like below:



inMemoryLayer.InternalFeatures.Add(“key”, feature1)



But, the key don’t equal to feature.Id. In this case, when we update the feature from InternalFeatures, we can’t find the original feature by its id. So, please try the below options:

1. inMemoryLayer.InternalFeatures.Add(feature1.ID, feature1)

2. using the below codes to add feature.  

        inMemoryLayer.EditTools.BeginTransaction()
        inMemoryLayer.EditTools.Add(feature1)
        inMemoryLayer.EditTools.CommitTransaction()



Hope it helps.

Thanks,

Troy