public bool AddSHPLayer()
        {
            string    filename = @"c:\users\suter\documents\test.shp";
            Shapefile sf       = new Shapefile();

            if (sf.Open(filename))
            {
                int m_layerHandle = AxMap.AddLayer(sf, true);
                sf = AxMap.get_Shapefile(m_layerHandle);     // in case a copy of shapefile was created by GlobalSettings.ReprojectLayersOnAdding

                ShpLayer sl = new ShpLayer();
                sl.LayerType = LayerType.CustomLayerSHP;
                sl.Name      = "Gefahrenkarte";
                sl.Shapefile = sf;
                sl.Handle    = m_layerHandle;

                MapControlTools.Layers.Add(sl);
                Events.MapControl_LayerChange layerchange = new Events.MapControl_LayerChange()
                {
                    LayerChangeReason = Events.LayerChangeReason.AddLayer, Layer = sl
                };
                On_LayerChange(layerchange);
                return(true);
            }
            else
            {
                Events.MapControl_Error error = new Events.MapControl_Error()
                {
                    ErrorCode = Events.ErrorCodes.CouldNotLoadLayer, InMethod = "AddShpLayer", AxMapError = sf.ErrorMsg[sf.LastErrorCode]
                };
                On_Error(error);
                return(false);
            }
        }
        private void Callback_MapControl_RasterReprojected(object sender, Events.MapControl_RasterReprojected e)
        {
            Console.WriteLine("Finished");
            Image img = new Image();

            if (img.Open(e.rasterLayer.FileName))
            {
                string proj        = img.GetProjection();
                int    layerHandle = AxMap.AddLayer(img, true);
                if (layerHandle == -1)
                {
                    Events.MapControl_Error imghandle_error = new Events.MapControl_Error()
                    {
                        ErrorCode = Events.ErrorCodes.CouldNotLoadLayer, InMethod = "AddRasterLayer", AxMapError = new GlobalSettings().GdalLastErrorMsg
                    };
                    On_Error(imghandle_error);
                }
                e.rasterLayer.Handle = layerHandle;
                MapControlTools.Layers.Add(e.rasterLayer);
                Events.MapControl_LayerChange layerchange = new Events.MapControl_LayerChange()
                {
                    LayerChangeReason = Events.LayerChangeReason.AddLayer, Layer = e.rasterLayer
                };
                On_LayerChange(layerchange);
            }
        }
        public bool StopEditingLayer(bool saveEdits = false)
        {
            if (CurrentEditingLayer == null)
            {
                // there is nothing to save...
                return(false);
            }

            saveAndCloseWhenFinish = false;


            AxMap.ShapeEditor.SaveChanges();

            if (saveEdits)
            {
                if (!SaveEdits())
                {
                    //return false;
                }
            }


            var sf       = AxMap.get_Shapefile(CurrentEditingLayer.Handle);
            var ogrLayer = AxMap.get_OgrLayer(CurrentEditingLayer.Handle);

            if (ogrLayer != null)
            {
                ogrLayer.ReloadFromSource();
                // show the editing layer (with all Polygons)
                sf = AxMap.get_Shapefile(((ResTBPostGISLayer)CurrentEditingLayer).EditingLayerHandle);
                AxMap.RemoveLayer(((ResTBPostGISLayer)CurrentEditingLayer).EditingLayerHandle);
                AxMap.set_LayerVisible(CurrentEditingLayer.Handle, true);
            }
            bool returnBool = sf.StopEditingShapes();

            AxMap.ChooseLayer           -= AxMap_ChooseLayer;
            AxMap.AfterShapeEdit        -= _map_AfterShapeEdit;
            AxMap.BeforeDeleteShape     -= _map_BeforeDeleteShape;
            AxMap.BeforeShapeEdit       -= _map_BeforeShapeEdit;
            AxMap.ShapeValidationFailed -= _map_ShapeValidationFailed;
            AxMap.ValidateShape         -= _map_ValidateShape;

            MapControlTools.Redraw(true);
            Events.MapControl_LayerChange layerChange = new Events.MapControl_LayerChange()
            {
                Layer = this.CurrentEditingLayer, LayerChangeReason = Events.LayerChangeReason.EditedLayer
            };
            On_LayerChange(layerChange);
            Events.MapControl_EditingStateChange editingStateChange = new Events.MapControl_EditingStateChange()
            {
                EditingState = Events.EditingState.StopEditing, EditingLayer = CurrentEditingLayer
            };
            On_EditingStateChange(editingStateChange);

            _currentEditingLayer = null;

            AxMap.CursorMode = tkCursorMode.cmPan;

            return(returnBool);
        }
        public bool AddProjectLayer(ResTBPostGISLayer resTBPostGISLayer, bool visible = true)
        {
            if (!MapControlTools.Layers.Where(m => m.Name == resTBPostGISLayer.Name).Any())
            {
                Type t = resTBPostGISLayer.GetType();

                // Handle the damage potential differently
                if (resTBPostGISLayer.GetType() == typeof(ResTBDamagePotentialLayer))
                {
                    return(AddProjectLayer((ResTBDamagePotentialLayer)resTBPostGISLayer, visible));
                }
                if (resTBPostGISLayer.GetType() == typeof(ResTBRiskMapLayer))
                {
                    return(AddProjectLayer((ResTBRiskMapLayer)resTBPostGISLayer, visible));
                }

                var layer = ds.RunQuery(resTBPostGISLayer.SQL);
                if (layer == null)
                {
                    Events.MapControl_Error error = new Events.MapControl_Error()
                    {
                        ErrorCode = Events.ErrorCodes.FailedToRunSQLQuery, InMethod = "AddPostGISLayer", AxMapError = ds.GdalLastErrorMsg
                    };
                    On_Error(error);
                    return(false);
                }
                else
                {
                    int handle = AxMap.AddLayer(layer, visible);

                    if (handle == -1)
                    {
                        Events.MapControl_Error error = new Events.MapControl_Error()
                        {
                            ErrorCode = Events.ErrorCodes.CouldNotLoadLayer, InMethod = "AddPostGISLayer", AxMapError = AxMap.FileManager.get_ErrorMsg(AxMap.FileManager.LastErrorCode)
                        };
                        On_Error(error);


                        return(false);
                    }
                    else
                    {
                        resTBPostGISLayer.Handle = handle;

                        resTBPostGISLayer.ApplyStyle(AxMap);

                        MapControlTools.Layers.Add(resTBPostGISLayer);
                        Events.MapControl_LayerChange layerchange = new Events.MapControl_LayerChange()
                        {
                            LayerChangeReason = Events.LayerChangeReason.AddLayer, Layer = resTBPostGISLayer
                        };
                        On_LayerChange(layerchange);
                    }

                    return(true);
                }
            }
            return(false);
        }
        public bool AddWMSLayer(string baseUrl, string layers, string name, Extents extents, int Epsg, string Format)
        {
            WmsLayer wmsLayer = new WmsLayer();

            wmsLayer.BaseUrl     = baseUrl;
            wmsLayer.BoundingBox = extents;
            wmsLayer.DoCaching   = false;
            wmsLayer.Epsg        = Epsg;
            wmsLayer.Format      = Format;
            wmsLayer.Layers      = layers;
            wmsLayer.Name        = name;
            wmsLayer.UseCache    = false;
            wmsLayer.Id          = 1;
            wmsLayer.Key         = "1";
            wmsLayer.Version     = tkWmsVersion.wv111;

            WmsLayerLayer layer = new WmsLayerLayer();

            layer.WmsLayerObj = wmsLayer;
            layer.Name        = name;
            layer.Handle      = AxMap.AddLayer(wmsLayer, true);
            layer.LayerType   = LayerType.CustomLayerWMS;

            MapControlTools.Layers.Add(layer);
            Events.MapControl_LayerChange layerchange = new Events.MapControl_LayerChange()
            {
                LayerChangeReason = Events.LayerChangeReason.AddLayer, Layer = layer
            };
            On_LayerChange(layerchange);

            return(true);
        }
        public bool SetLayerVisible(string name, bool visible)
        {
            ILayer layer = MapControlTools.Layers.Where(m => m.Name == name).FirstOrDefault();

            if (layer == null)
            {
                return(false);
            }

            if (layer.GetType() == typeof(ResTBDamagePotentialLayer))
            {
                MapControlTools.AxMap.set_LayerVisible(((ResTBDamagePotentialLayer)layer).PointHandle, visible);
                MapControlTools.AxMap.set_LayerVisible(((ResTBDamagePotentialLayer)layer).PolygonHandle, visible);
                MapControlTools.AxMap.set_LayerVisible(((ResTBDamagePotentialLayer)layer).LineHandle, visible);
            }
            else if (layer.GetType() == typeof(ResTBRiskMapLayer))
            {
                MapControlTools.AxMap.set_LayerVisible(((ResTBRiskMapLayer)layer).PointHandle, visible);
                MapControlTools.AxMap.set_LayerVisible(((ResTBRiskMapLayer)layer).PolygonHandle, visible);
                MapControlTools.AxMap.set_LayerVisible(((ResTBRiskMapLayer)layer).LineHandle, visible);
            }
            else
            {
                MapControlTools.AxMap.set_LayerVisible(layer.Handle, visible);
            }

            Events.MapControl_LayerChange layerchange = new Events.MapControl_LayerChange()
            {
                LayerChangeReason = Events.LayerChangeReason.ChangeVisibility, Layer = layer
            };
            On_LayerChange(layerchange);

            return(true);
        }
        public bool SetLayerPosition(string name, LayerMoveType layerMoveType)
        {
            ILayer layer = MapControlTools.Layers.Where(m => m.Name == name).FirstOrDefault();

            if (layer == null)
            {
                return(false);
            }

            // TODO: Handle Damage Potential Layer
            //if (layer.GetType() == typeof(ResTBDamagePotentialLayer))
            //{
            //  int currentPosition = MapControlTools.AxMap.get_LayerPosition(((ResTBDamagePotentialLayer)layer).PointHandle);
            //}

            int  currentPosition = MapControlTools.AxMap.get_LayerPosition(layer.Handle);
            bool rc = false;

            switch (layerMoveType)
            {
            case LayerMoveType.TOP:
                rc = MapControlTools.AxMap.MoveLayerTop(currentPosition);
                break;

            case LayerMoveType.BOTTOM:
                rc = MapControlTools.AxMap.MoveLayerBottom(currentPosition);
                break;

            case LayerMoveType.UP:
                rc = MapControlTools.AxMap.MoveLayerUp(currentPosition);
                break;

            case LayerMoveType.DOWN:
                rc = MapControlTools.AxMap.MoveLayerDown(currentPosition);
                break;

            default:
                break;
            }

            if (rc)
            {
                Events.MapControl_LayerChange layerchange = new Events.MapControl_LayerChange()
                {
                    LayerChangeReason = Events.LayerChangeReason.ChangeOrder, Layer = layer
                };
                On_LayerChange(layerchange);
                return(true);
            }
            else
            {
                return(false);
            }
        }
 public bool RemoveAllLayers()
 {
     AxMap.RemoveAllLayers();
     MapControlTools.Layers.Clear();
     //MapControlTools.EditingTool.CurrentEditingLayer = null;
     Events.MapControl_LayerChange layerchange = new Events.MapControl_LayerChange()
     {
         LayerChangeReason = Events.LayerChangeReason.RemoveLayer, Layer = null
     };
     On_LayerChange(layerchange);
     return(true);
 }
        private bool AddProjectLayer(ResTBRiskMapLayer resTBRiskMapLayer, bool visible = true)
        {
            if (!MapControlTools.Layers.Where(m => m.Name == resTBRiskMapLayer.Name).Any())
            {
                var pointlayer   = ds.RunQuery(resTBRiskMapLayer.SQL_Point);
                var linelayer    = ds.RunQuery(resTBRiskMapLayer.SQL_Line);
                var polygonlayer = ds.RunQuery(resTBRiskMapLayer.SQL_Polygon);
                if ((pointlayer == null) || (linelayer == null) || (polygonlayer == null))
                {
                    Events.MapControl_Error error = new Events.MapControl_Error()
                    {
                        ErrorCode = Events.ErrorCodes.FailedToRunSQLQuery, InMethod = "AddPostGISLayer", AxMapError = ds.GdalLastErrorMsg
                    };
                    On_Error(error);
                    return(false);
                }
                else
                {
                    int pointhandle   = AxMap.AddLayer(pointlayer, visible);
                    int linehandle    = AxMap.AddLayer(linelayer, visible);
                    int polygonhandle = AxMap.AddLayer(polygonlayer, visible);

                    if ((pointhandle == -1) || (linehandle == -1) || (polygonhandle == -1))
                    {
                        Events.MapControl_Error error = new Events.MapControl_Error()
                        {
                            ErrorCode = Events.ErrorCodes.CouldNotLoadLayer, InMethod = "AddPostGISLayer", AxMapError = AxMap.FileManager.get_ErrorMsg(AxMap.FileManager.LastErrorCode)
                        };
                        On_Error(error);
                        return(false);
                    }
                    else
                    {
                        resTBRiskMapLayer.PointHandle   = pointhandle;
                        resTBRiskMapLayer.LineHandle    = linehandle;
                        resTBRiskMapLayer.PolygonHandle = polygonhandle;
                        resTBRiskMapLayer.ApplyStyle(AxMap);

                        MapControlTools.Layers.Add(resTBRiskMapLayer);
                        Events.MapControl_LayerChange layerchange = new Events.MapControl_LayerChange()
                        {
                            LayerChangeReason = Events.LayerChangeReason.AddLayer, Layer = resTBRiskMapLayer
                        };
                        On_LayerChange(layerchange);
                    }

                    return(true);
                }
            }
            return(false);
        }
        public bool RemoveLayer(string name)
        {
            ILayer removeLayer = MapControlTools.Layers.Where(m => m.Name == name).FirstOrDefault();

            if (removeLayer == null)
            {
                return(false);
            }

            if (removeLayer.GetType() == typeof(ResTBDamagePotentialLayer))
            {
                AxMap.RemoveLayer(((ResTBDamagePotentialLayer)removeLayer).PointHandle);
                AxMap.RemoveLayer(((ResTBDamagePotentialLayer)removeLayer).LineHandle);
                AxMap.RemoveLayer(((ResTBDamagePotentialLayer)removeLayer).PolygonHandle);
            }
            else if (removeLayer.GetType() == typeof(ResTBRiskMapLayer))
            {
                AxMap.RemoveLayer(((ResTBRiskMapLayer)removeLayer).PointHandle);
                AxMap.RemoveLayer(((ResTBRiskMapLayer)removeLayer).LineHandle);
                AxMap.RemoveLayer(((ResTBRiskMapLayer)removeLayer).PolygonHandle);
            }
            else
            {
                AxMap.RemoveLayer(removeLayer.Handle);
            }
            if (MapControlTools.EditingTool.CurrentEditingLayer?.GetType() == typeof(ResTBPostGISLayer))
            {
                AxMap.RemoveLayer(((ResTBPostGISLayer)MapControlTools.EditingTool.CurrentEditingLayer).EditingLayerHandle);
            }
            MapControlTools.Layers.Remove(removeLayer);
            Events.MapControl_LayerChange layerchange = new Events.MapControl_LayerChange()
            {
                LayerChangeReason = Events.LayerChangeReason.RemoveLayer, Layer = removeLayer
            };
            On_LayerChange(layerchange);
            return(true);
        }
        public bool AddRasterLayer(string fileLocation, string layerName, bool autoReproject = true, bool overwriteExistingReprojectedFiles = false)
        {
            Image img = new Image();

            if (autoReproject)
            {
                if (!img.Open(fileLocation))
                {
                    Events.MapControl_Error errorFileNotOpen = new Events.MapControl_Error()
                    {
                        ErrorCode = Events.ErrorCodes.CouldNotLoadLayer, InMethod = "AddRasterLayer", AxMapError = img.ErrorMsg[img.LastErrorCode]
                    };
                    On_Error(errorFileNotOpen);
                }

                if (!IsRasterGoogleMercator(img))
                {
                    // Image is not WGS84, so use GdalWrap for reprojection

                    string localData = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
                    if (!System.IO.Directory.Exists(localData + "\\ResTBDesktop"))
                    {
                        System.IO.Directory.CreateDirectory(localData + "\\ResTBDesktop");
                    }

                    string filename = Path.GetFileName(fileLocation);
                    if (!Directory.Exists(localData + "\\ResTBDesktop\\temp"))
                    {
                        Directory.CreateDirectory(localData + "\\ResTBDesktop\\temp");
                    }

                    // check if file already transformed
                    if ((File.Exists(localData + "\\ResTBDesktop\\temp\\" + filename)) && (!overwriteExistingReprojectedFiles))
                    {
                    }
                    else
                    {
                        string fileLocationThreadSave = (string)fileLocation.Clone();
                        fileLocation = localData + "\\ResTBDesktop\\temp\\" + filename;
                        RasterLayer r = new RasterLayer()
                        {
                            FileName = fileLocation, LayerType = LayerType.CustomLayerRaster, Name = layerName
                        };

                        RasterProjectionWorker rpw = new RasterProjectionWorker();
                        rpw.MapControlTools = MapControlTools;
                        rpw.MapControl_RasterReprojected += Callback_MapControl_RasterReprojected;

                        reprojectThread = new Thread(() => rpw.Run(filename, fileLocationThreadSave, r));

                        Events.MapControl_BusyStateChange bc = new Events.MapControl_BusyStateChange();
                        bc.BusyState   = Events.BusyState.BackgroundBusy;
                        bc.KeyOfSender = Resources.MapControl_Busy_RasterReprojection;
                        bc.Percent     = 0;
                        bc.Message     = Resources.MapControl_Busy_StartRasterReprojection;;

                        MapControlTools.On_BusyStateChange(bc);

                        reprojectThread.Start();

                        return(false);
                    }
                    fileLocation = localData + "\\ResTBDesktop\\temp\\" + filename;
                }
            }

            if (img.Open(fileLocation))
            {
                string proj        = img.GetProjection();
                int    layerHandle = AxMap.AddLayer(img, true);
                if (layerHandle == -1)
                {
                    Events.MapControl_Error imghandle_error = new Events.MapControl_Error()
                    {
                        ErrorCode = Events.ErrorCodes.CouldNotLoadLayer, InMethod = "AddRasterLayer", AxMapError = new GlobalSettings().GdalLastErrorMsg
                    };
                    On_Error(imghandle_error);
                    return(false);
                }

                RasterLayer r = new RasterLayer()
                {
                    FileName = fileLocation, Handle = layerHandle, LayerType = LayerType.CustomLayerRaster, Name = layerName
                };
                MapControlTools.Layers.Add(r);
                MapControlTools.LayerHandlingTool.SetLayerPosition(r.Name, LayerMoveType.BOTTOM);
                Events.MapControl_LayerChange layerchange = new Events.MapControl_LayerChange()
                {
                    LayerChangeReason = Events.LayerChangeReason.AddLayer, Layer = r
                };
                On_LayerChange(layerchange);
                return(true);
            }
            Events.MapControl_Error error = new Events.MapControl_Error()
            {
                ErrorCode = Events.ErrorCodes.CouldNotLoadLayer, InMethod = "AddRasterLayer", AxMapError = img.ErrorMsg[img.LastErrorCode]
            };
            On_Error(error);
            return(false);
        }
Ejemplo n.º 12
0
        public bool SaveEdits()
        {
            if (CurrentEditingLayer == null)
            {
                Events.MapControl_Error error = new Events.MapControl_Error()
                {
                    ErrorCode = Events.ErrorCodes.UseStartEditing, InMethod = "StopEditingLayer", AxMapError = ""
                };
                On_Error(error);
                return(false);
            }
            Events.MapControl_EditingStateChange editingStateChange = new Events.MapControl_EditingStateChange()
            {
                EditingState = Events.EditingState.SaveEditing, EditingLayer = CurrentEditingLayer
            };
            On_EditingStateChange(editingStateChange);
            var sf       = AxMap.get_Shapefile(CurrentEditingLayer.Handle);
            var ogrLayer = AxMap.get_OgrLayer(CurrentEditingLayer.Handle);

            bool success = false;

            if (ogrLayer != null)
            {
                ogrLayer = ((ResTBPostGISLayer)CurrentEditingLayer).EditingLayer;

                ((ResTBPostGISLayer)CurrentEditingLayer).SaveAttributes(AxMap);

                int             savedCount;
                tkOgrSaveResult saveResult = ogrLayer.SaveChanges(out savedCount);
                success = saveResult == tkOgrSaveResult.osrAllSaved || saveResult == tkOgrSaveResult.osrNoChanges;

                // if hazard map before --> copy to hazardmap after
                if ((success) && (((ResTBPostGISLayer)CurrentEditingLayer).ResTBPostGISType == ResTBPostGISType.HazardMapBefore) && (isAdding))
                {
                    string newName = ((ResTBHazardMapLayer)CurrentEditingLayer).CopyToAfter(MapControlTools);

                    ILayer HMAfter = MapControlTools.Layers.Where(m => m.Name == newName).FirstOrDefault();
                    if (HMAfter != null)
                    {
                        ogrLayer = AxMap.get_OgrLayer(HMAfter.Handle);
                        ogrLayer.ReloadFromSource();
                    }
                }


                ogrLayer = AxMap.get_OgrLayer(CurrentEditingLayer.Handle);
                ogrLayer.ReloadFromSource();
            }

            if (success)
            {
                sf.InteractiveEditing = false;
                AxMap.ShapeEditor.Clear();
                AxMap.UndoList.ClearForLayer(CurrentEditingLayer.Handle);
                Events.MapControl_EditingStateChange editingStateChangeStop = new Events.MapControl_EditingStateChange()
                {
                    EditingState = Events.EditingState.StopEditing, EditingLayer = CurrentEditingLayer
                };
                On_EditingStateChange(editingStateChangeStop);

                Events.MapControl_LayerChange layerChange = new Events.MapControl_LayerChange()
                {
                    Layer = this.CurrentEditingLayer, LayerChangeReason = Events.LayerChangeReason.EditedLayer
                };
                On_LayerChange(layerChange);
                return(true);
            }
            AxMap.Redraw();
            return(false);
        }
Ejemplo n.º 13
0
 /// <summary>
 /// On_LayerChange when a Layer is added, removed oder changed
 /// </summary>
 public void On_LayerChange(Events.MapControl_LayerChange e)
 {
     MapControlTools.On_LayerChange(e);
 }