ThinkGeo.com    |     Documentation    |     Premium Support

Problem Updating a Feature

Hi,


My application has a set of points, I want to be able to have my user click on a point and then drag it to a new location.  When the user clicks save, the point location should be updated in the InMemoryFeatureLayer.  This should be pretty straight forward by adding the point from the InMemoryFeatureLayer to the EditOverlay.  This would allow me to move the point where I need to on the map.  But once I hit the save button and get the updated feature from the EditOverlay and call the UpdateFeature method off of the FeatureSource on the InMemorylayer nothing happens.  The method call executes fine like the feature was updated, but the point remains in the original location.  


I have attached a small sample application that shows what is happening.


I did find a work around, if I add the feature using a key, and then update using that key things seem to work.  However i think the code in the attached sample should work too because the id of the feature in the InMemoryLayer and EditOverlay are the same.  I also tried the Delete method off of the feature source which takes and id, and it didn't work either. 


Please look at the attached sample and let me know your thoughts.


Thanks!


 



 




811-MoveAPointLocation.zip (14.1 KB)

Clint, 


As you said in your work around way, if you add a key when you add the feature, that would make things right.
 

houses.InternalFeatures.Add(house.Id, house);

 

I think currently this is the only way to make it right. The reason is as following:
In the InMemoryFeatureSource, we use a GeoDictionary to keep those internal features in memory, and the GeoDictionary is a Dictionary Wrapper. So when we find an on particular feature, we CANNOT loop each feature to see its id match or not for its very low efficiency. So we should use the Key string to identify one feature.
 
And when you add an item to a GeoDictionary without specified its key, it will use a Random GUID as its key. So when you add a feature which you may want to get it used later, you should always add a Key as its identifier.
 
At last one thing I want to mention, you can see the transition result when you commit transaction:

 



TransactionResult transactionResult = houses.EditTools.CommitTransaction();

Any more questions just let me know. 




Thanks.
 
Yale


Yale, 
  
 Thanks, can you update the code in my sample to show the best way to make it work using the UpdateFeature method?  It seems this method doesn’t take a key, so when would you ever use it? 
  
 Thanks!

Clint,


Attachment is the updated demo! The magic point is the Id the feature should keep the same with the key!
 
Any more questions just let me know.
 
Thanks.
 
Yale

812-MoveAPointLocationUpdateDemo.zip (13.8 KB)