private void DisableBasemapLayer() { RemoveBasemapLayer(_baseLayer); _optionsAction.Enabled = false; _baseLayer = null; }
private void EnableBasemapLayer(ServiceProvider serviceProvider) { if (_baseLayer == null) { // Need to first initialize and add the basemap layer synchronously (it will fail if done in another thread). var tempImageData = new InRamImageData(Resources.nodata, new Extent(1, 1, 2, 2)); _baseLayer = new WebMapImageLayer() { LegendText = Resources.Legend_Title, Projection = App.Map.Projection }; _baseLayer.WebMapName = serviceProvider.Name; if (serviceProvider is WmtsServiceProvider wmtsServiceProvider) { _baseLayer.WebMapUrl = wmtsServiceProvider.CapabilitiesUrl; } _baseLayer.RemoveItem += BaseMapLayerRemoveItem; App.Map.Layers.Insert(0, _baseLayer); } else { if (_baseLayer.WebMapName != serviceProvider.Name) { _baseLayer.WebMapName = serviceProvider.Name; } } }
private void BaseMapLayerRemoveItem(object sender, EventArgs e) { if (_baseLayer != null) { _baseLayer.RemoveItem -= BaseMapLayerRemoveItem; } _baseLayer = null; _serviceDropDown.SelectedItem = _emptyProvider; }
/// <summary> /// Deserializes the WebMap settings and loads the corresponding basemap. /// </summary> /// <param name="sender">Sender that raised the event.</param> /// <param name="e">The event args.</param> private void SerializationManagerDeserializing(object sender, SerializingEventArgs e) { try { if (_baseLayer != null) { // disable BaseMap because we might be loading a project that doesn't have a basemap DisableBasemapLayer(); _serviceDropDown.SelectedItem = _emptyProvider; } _baseLayer = (WebMapImageLayer)App.Map.MapFrame.GetAllLayers().FirstOrDefault(layer => layer.LegendText == Resources.Legend_Title); if (_baseLayer != null) { //_baseLayer.Projection = _webMercProj; // changed by jany_(2015-07-09) set the projection because if it is not set we produce a cross thread exception when DotSpatial tries to show the projection dialog var item = _serviceDropDown.Items.OfType <ServiceProvider>().FirstOrDefault(p => p.Name.Equals(_baseLayer.WebMapName, StringComparison.InvariantCultureIgnoreCase)); if (item == null) { if (_baseLayer.WebMapUrl?.ToLower().Contains("wmts") == true) { item = _serviceDropDown.Items.OfType <ServiceProvider>().FirstOrDefault(p => p.Name.Equals("Wmts", StringComparison.InvariantCultureIgnoreCase)); if (item is WmtsServiceProvider wmtsServiceProvider) { wmtsServiceProvider.Name = _baseLayer.WebMapName; wmtsServiceProvider.CapabilitiesUrl = _baseLayer.WebMapUrl; } } } // hack: need to set provider to original object, not a new one. if (item != null) { _ignoreServiceChanged = true; _serviceDropDown.SelectedItem = item; _ignoreServiceChanged = false; if (CurrentProvider != null) { EnableBasemapFetching(CurrentProvider); } } } } catch (Exception ex) { Debug.Print(ex.StackTrace); } }