Hello,
I currently have an application that plots points on a map. The points are currently in a layer, which is in LayerOverlay.
I’ve been trying to convert to using a FeatureLayerWpfDrawingLayer but have run into a problem.
Whenever I attempt to call MapView.RefreshAsync or _pointOVerlay.RefreshAsync() I get a NullReferenceException. The full stack trace is
at ThinkGeo.UI.Wpf.FeatureLayerWpfDrawingOverlay.zEc=.MoveNext()
at ThinkGeo.UI.Wpf.FeatureLayerWpfDrawingOverlay.qEE=.MoveNext()
at ThinkGeo.UI.Wpf.Overlay.Tkg=.MoveNext()
at ThinkGeo.UI.Wpf.Overlay.wkU=(Exception e, String memberName)
at ThinkGeo.UI.Wpf.Overlay.Tkg=.MoveNext()
at ThinkGeo.UI.Wpf.MapViewBase.7kc=.MoveNext()
at ThinkGeo.UI.Wpf.MapViewBase.8Ec=.MoveNext()
at ThinkGeo.UI.Wpf.MapViewBase.7Uc=.MoveNext()
at ThinkGeo.UI.Wpf.MapViewBase.7Ec=.MoveNext()
at ThinkGeo.UI.Wpf.MapViewBase.F0g=.MoveNext()
at ThinkGeo.UI.Wpf.MapViewBase.Fkg=.MoveNext()
at ADISSView.WPF.UI.Mapping.MapViewHostV2.d__12.MoveNext()
The relevent parts of my code are…
from the xaml.
<thinkgeo:MapView x:Name=“MapView” MapUnit=“Meter” Loaded=“MapView_OnLoaded”/>
from xaml.cs
private LayerOverlay _backgroundOverlay = new LayerOverlay();
private FeatureLayerWpfDrawingOverlay _pointOverlay = new FeatureLayerWpfDrawingOverlay();
private async void MapView_OnLoaded(object sender, RoutedEventArgs e) {
var basemapOverlay = new OpenStreetMapOverlay(…);
MapView.Overlays.Add("basemapOverlay", basemapOverlay);
MapView.Overlays.Add("backgroundOverlay", _backgroundOverlay);
MapView.Overlays.Add("pointOverlay", _pointOverlay);
await MapView.RefreshAsync();
CreateValueStyle();
}
public async Task PlotTrips(List tripsToPlot) {
var converter = new ProjectionConverter(4326, 3857);
foreach (var trip in tripsToPlot) {
string layerName = $"trip-{trip.TripNumber}";
if (_pointOverlay.FeatureLayers.Contains(layerName)) {
continue;
}
var layer = new InMemoryFeatureLayer();
converter.Open();
foreach (var point in trip.Points) {
var vertex = converter.ConvertToExternalProjection(point.CenterLon, point.CenterLat);
var feature = new Feature(vertex);
layer.InternalFeatures.Add(point.PointId.ToString(), feature);
}
converter.Close();
layer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle = PointStyle.CreateSimplePointStyle(PointSymbolType.Circle, GeoColors.Red, 5);
layer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
_pointOverlay.FeatureLayers.Add(layerName, layer);
}
try {
await MapView.RefreshAsync();
}
catch (Exception ex) {
Console.WriteLine(ex.Message);
}
}
If I switch the overlay to a standared LayerOverlay (and adjust the code accordingly) it all works fine.
I’m just wondering if there’s something I’m missing.
Regards,
Aaron
