I'm confused about something.
Why does this work to get rid of the features on the track layer?
public Feature? GetTrackedFeature()
{
map.TrackOverlay.Lock.EnterWriteLock();
Feature? feature = null;
try
{
if (map.TrackOverlay.TrackShapeLayer.InternalFeatures.Count > 0)
{
feature = map.TrackOverlay.TrackShapeLayer.InternalFeatures[0];
RemoveFeatureListFromLayer(map.TrackOverlay.TrackShapeLayer, new Collection<Feature> { feature.Value });
}
}
finally
{
map.TrackOverlay.Lock.ExitWriteLock();
}
return feature;
}
And this doesn't work to get rid of the features off the track layer?
public void ClearTrackedFeature()
{
map.TrackOverlay.Lock.EnterWriteLock();
try
{
RemoveAllFeaturesFromLayer(map.TrackOverlay.TrackShapeLayer);
}
finally
{
map.TrackOverlay.Lock.ExitWriteLock();
}
}
Here are the supporting methods:
private void RemoveAllFeaturesFromLayer(InMemoryFeatureLayer layer)
{
layer.Open();
Collection<Feature> features = layer.FeatureSource.GetAllFeatures(ReturningColumnsType.NoColumns);
layer.Close();
RemoveFeatureListFromLayer(layer, features);
}
private void RemoveFeatureListFromLayer(InMemoryFeatureLayer layer, Collection<Feature> featureList)
{
layer.Open();
layer.EditTools.BeginTransaction();
try
{
foreach (Feature feature in featureList)
{
layer.EditTools.Delete(feature.Id);
}
}
finally
{
layer.EditTools.CommitTransaction();
layer.Close();
}
}