public void OnEvent(object MapEvent) { if (!(MapEvent is MapEvent)) { return; } IMap map = ((MapEvent)MapEvent).Map; bool firstDataset = (map[0] == null); List <ExplorerDialogFilter> filters = new List <ExplorerDialogFilter>(); filters.Add(new OpenDataFilter()); ExplorerDialog dlg = new ExplorerDialog("Add data...", filters, true); if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK) { List <IDataset> datasets = dlg.Datasets; FormDatasetProperties datasetProps = new FormDatasetProperties(datasets); try { if (((MapEvent)MapEvent).UserData == null) { if (datasetProps.ShowDialog() != System.Windows.Forms.DialogResult.OK) { return; } } } catch // Kann ObjectDisposed Exception werfen... { return; } Envelope env = null; foreach (ILayer layer in datasetProps.Layers) { ISpatialReference sRef = null; IEnvelope classEnv = null; if (layer is IFeatureLayer && ((IFeatureLayer)layer).FeatureClass != null && ((IFeatureLayer)layer).FeatureClass.Envelope != null) { sRef = ((IFeatureLayer)layer).FeatureClass.SpatialReference; classEnv = ((IFeatureLayer)layer).FeatureClass.Envelope; } else if (layer is IRasterLayer && ((IRasterLayer)layer).RasterClass != null && ((IRasterLayer)layer).RasterClass.Polygon != null && ((IRasterLayer)layer).RasterClass.Polygon.Envelope != null) { sRef = ((IRasterLayer)layer).RasterClass.SpatialReference; classEnv = ((IRasterLayer)layer).RasterClass.Polygon.Envelope; } else if (layer is IWebServiceLayer && ((IWebServiceLayer)layer).WebServiceClass != null && ((IWebServiceLayer)layer).WebServiceClass.Envelope != null) { sRef = ((IWebServiceLayer)layer).WebServiceClass.SpatialReference; classEnv = ((IWebServiceLayer)layer).WebServiceClass.Envelope; } if (classEnv != null) { if (sRef != null && !sRef.Equals(map.Display.SpatialReference)) { bool found = false; foreach (string p in map.Display.SpatialReference.Parameters) { if (p.ToLower().Trim() == "+nadgrids=@null") { found = false; } } if (found) { classEnv = null; } else { IGeometry geom = GeometricTransformer.Transform2D(classEnv.ToPolygon(0), sRef, map.Display.SpatialReference); if (geom != null) { classEnv = geom.Envelope; } else { classEnv = null; } } } if (classEnv != null) { if (env == null) { env = new Envelope(classEnv); } else { env.Union(classEnv); } } } map.AddLayer(layer); } //map.AddDataset(dataset, 0); if (env != null && map.Display != null) { if (firstDataset) { map.Display.Limit = env; map.Display.ZoomTo(env); } else { IEnvelope limit = map.Display.Limit; limit.Union(env); map.Display.Limit = limit; } } ((MapEvent)MapEvent).drawPhase = DrawPhase.All; ((MapEvent)MapEvent).refreshMap = true; } }