public void GetBuffer() { // MWGIS-67 var ds = new OgrDatasource(); try { if (!ds.Open(CONNECTION_STRING)) { Assert.Fail("Failed to establish connection: " + ds.GdalLastErrorMsg); } // Get layer using buffer: var layer = ds.GetLayerByName("states_polygon"); Assert.IsNotNull(layer, "layer is null"); Console.WriteLine("Layer type is " + layer.ShapeType); var sfFromBuffer = layer.GetBuffer(); Assert.IsNotNull(sfFromBuffer, "sfFromBuffer is null"); Debug.WriteLine("NumShapes: " + sfFromBuffer.NumShapes); var tmpFilename = Path.ChangeExtension(Path.Combine(Path.GetTempPath(), Path.GetTempFileName()), ".shp"); if (!sfFromBuffer.SaveAs(tmpFilename)) { Assert.Fail("Failed to save shapefile: " + sfFromBuffer.ErrorMsg[sfFromBuffer.LastErrorCode]); } } finally { ds.Close(); } }
public VectorLayer GetLayerByName(string layerName, bool forUpdate = false) { var layer = _datasource.GetLayerByName(layerName, forUpdate); if (layer != null) { return(new VectorLayer(layer)); } return(null); }
/// <summary> /// The ways to open layer. /// </summary> private static void WaysToOpenLayer() { var layer = new OgrLayer(); string layerName = "waterways"; // 1) open one of exiting layers in datasource if (!layer.OpenFromDatabase(CONNECTION_STRING, layerName, true)) { // waterways = layerName Debug.Print("Failed to open layer: " + layer.get_ErrorMsg(layer.LastErrorCode)); } // 2) return temporary layer by a query if (!layer.OpenFromQuery(CONNECTION_STRING, "SELECT * FROM " + layerName)) { Debug.Print("Failed to run a query: " + layer.get_ErrorMsg(layer.LastErrorCode)); } // 3) the same using datasource var ds = new OgrDatasource(); if (!ds.Open(CONNECTION_STRING)) { Debug.Print("Failed to open datasource: " + ds.GdalLastErrorMsg); } else { layer = ds.GetLayerByName(layerName); if (layer == null) { Debug.Print("Failed to open layer: " + ds.get_ErrorMsg(ds.LastErrorCode)); } layer = ds.RunQuery("SELECT * FROM " + layerName); if (layer == null) { Debug.Print("Failed to run a query: " + ds.get_ErrorMsg(ds.LastErrorCode)); } } // 4) using FileManager var fm = new FileManager(); layer = fm.OpenFromDatabase(CONNECTION_STRING, layerName); // layer name or query can be passed here if (layer == null) { Debug.WriteLine("Failed to open layer: " + fm.get_ErrorMsg(fm.LastErrorCode)); // let's check GDAL error as well var gs = new GlobalSettings(); Debug.WriteLine("GDAL error message: " + gs.GdalLastErrorMsg); } }
/// <summary> /// The test read layer. /// </summary> /// <param name="layerName"> /// The layer name. /// </param> /// <returns> /// The <see cref="bool"/>. /// </returns> private static bool TestReadLayer(string layerName) { var ds = new OgrDatasource(); if (!ds.Open(CONNECTION_STRING)) { Debug.Print("Failed to establish connection: " + ds.GdalLastErrorMsg); } else { OgrLayer layer = ds.GetLayerByName(layerName, true); if (layer != null) { layer.GlobalCallback = form; Debug.Print("Layer opened: " + layer.Name); Extents ext; if (layer.get_Extents(out ext)) { Debug.Print(ext.ToDebugString()); } Debug.Print("Geometry column name: " + layer.GeometryColumnName); Debug.Print("Feature count: " + layer.FeatureCount); Debug.Print("Supports editing: " + layer.get_SupportsEditing(tkOgrSaveType.ostSaveAll)); Map.RemoveAllLayers(); Map.Projection = tkMapProjection.PROJECTION_WGS84; int handle = Map.AddLayer(layer, true); Map.Redraw(); Debug.Print("Layer connection: " + layer.GetConnectionString()); Debug.Print("Layer source query: " + layer.GetSourceQuery()); string state = layer.Serialize(); Debug.Print("Serialized state: " + state); } else { Debug.Print("Failed to open layer: " + layerName); } ds.Close(); } return(true); }
private static bool ImportShapefilesFromFolder() { var ds = new OgrDatasource(); if (!ds.Open(CONNECTION_STRING)) { Debug.Print("Failed to establish connection: " + ds.GdalLastErrorMsg); } else { string path = @"d:\data\sf\london"; var files = Directory.GetFiles(path, "*.shp"); foreach (var file in files) { var sf = new Shapefile(); if (!sf.Open(file)) { Debug.Print("Failed to open shapefile: {0}\n{1}", file, sf.ErrorMsg[sf.LastErrorCode]); } else { string name = Path.GetFileNameWithoutExtension(file); if (!ds.ImportShapefile(sf, name, "OVERWRITE=YES", tkShapeValidationMode.NoValidation)) { Debug.Print("Failed to import shapefile: " + name); } else { Debug.Print("Layer was imported: " + name); var layer = ds.GetLayerByName(name); if (layer != null) { Debug.Print("Imported features count: " + layer.FeatureCount); layer.Close(); } } } } ds.Close(); } return(true); }
/// <summary> /// Run the open postGIS layers test. /// </summary> /// <param name="textfileLocation"> /// The textfile location. /// </param> /// <param name="theForm"> /// The form. /// </param> /// <returns> /// True on success /// </returns> internal static bool RunOpenPostGisLayers(string textfileLocation, Form1 theForm) { var numErrors = 0; Map = Fileformats.Map; Map.RemoveAllLayers(); // TODO: How to switch between these two: // Map.Projection = tkMapProjection.PROJECTION_WGS84; Map.GrabProjectionFromData = true; var gs = new GlobalSettings(); theForm.Progress("OgrLayerMaxFeatureCount: " + gs.OgrLayerMaxFeatureCount); Application.DoEvents(); theForm.Progress("----------------------- Opening PostGIS layers has started." + Environment.NewLine); // Read testfile: string connectionString; List <string> layersList; if (!ReadTextfile(textfileLocation, out connectionString, out layersList)) { throw new Exception("Cannot read text file"); } // Connect to data source: var ds = new OgrDatasource { GlobalCallback = theForm }; if (!ds.Open(connectionString)) { throw new Exception("Failed to open datasource: " + ds.GdalLastErrorMsg); } // Get queries: foreach (var layerName in layersList) { var layer = ds.GetLayerByName(layerName, true); if (layer == null) { continue; } layer.MaxFeatureCount = 10000; layer.GlobalCallback = theForm; theForm.Progress("Opening " + layerName); var handle = Map.AddLayer(layer, true); if (handle == -1) { theForm.WriteError("Failed to add database layer " + layerName + " to the map."); numErrors++; } Application.DoEvents(); } // Close database connection: ds.Close(); theForm.Progress(string.Format("Opening PostGIS layers test has finished, with {0} errors", numErrors)); return(numErrors == 0); }
public bool StartEditingLayer(string name, bool saveAndStopWhenFinish = false, FeatureType featureType = FeatureType.Any) { ILayer editLayer = MapControlTools.Layers.Where(m => m.Name == name).FirstOrDefault(); if (editLayer == null) { return(false); } this.saveAndCloseWhenFinish = saveAndStopWhenFinish; Shapefile sf; var ogrLayer = AxMap.get_OgrLayer(editLayer.Handle); sf = AxMap.get_Shapefile(editLayer.Handle); _currentEditingLayer = editLayer; if (ogrLayer != null) { // Add the editing layer DBConnectionTool dBConnection = new DBConnectionTool(AxMap, MapControlTools); OgrDatasource ds = new OgrDatasource(); if (!ds.Open(dBConnection.GetGdalConnectionString())) { Events.MapControl_Error error = new Events.MapControl_Error() { ErrorCode = Events.ErrorCodes.CouldNotConnectDatabase, InMethod = "AddPostGISLayer", AxMapError = ds.GdalLastErrorMsg }; On_Error(error); return(false); } OgrLayer editlayer = null; if (featureType == FeatureType.Point) { editlayer = ds.GetLayerByName(((ResTBPostGISLayer)editLayer).SQL_Layer + "(point)", true); if (editLayer.GetType() == typeof(ResTBDamagePotentialLayer)) { editLayer.Handle = ((ResTBDamagePotentialLayer)editLayer).PointHandle; } } else if (featureType == FeatureType.Line) { editlayer = ds.GetLayerByName(((ResTBPostGISLayer)editLayer).SQL_Layer + "(line)", true); if (editLayer.GetType() == typeof(ResTBDamagePotentialLayer)) { editLayer.Handle = ((ResTBDamagePotentialLayer)editLayer).LineHandle; } } else if (featureType == FeatureType.Polygon) { editlayer = ds.GetLayerByName(((ResTBPostGISLayer)editLayer).SQL_Layer + "(polygon)", true); if (editLayer.GetType() == typeof(ResTBDamagePotentialLayer)) { editLayer.Handle = ((ResTBDamagePotentialLayer)editLayer).PolygonHandle; } } else { editlayer = ds.GetLayerByName(((ResTBPostGISLayer)editLayer).SQL_Layer, true); } int editinghandle = AxMap.AddLayer(editlayer, false); ((ResTBPostGISLayer)editLayer).EditingLayer = editlayer; ((ResTBPostGISLayer)editLayer).EditingLayerHandle = editinghandle; _currentEditingLayer = editLayer; OgrLayer ogrLayer2 = ((ResTBPostGISLayer)editLayer).EditingLayer; if (ogrLayer2.DynamicLoading) { Events.MapControl_Error error = new Events.MapControl_Error() { ErrorCode = Events.ErrorCodes.EditingNotAllowed, InMethod = "StartEditingLayer", AxMapError = "" }; On_Error(error); return(false); } if (!ogrLayer2.SupportsEditing[tkOgrSaveType.ostSaveAll]) { Events.MapControl_Error error = new Events.MapControl_Error() { ErrorCode = Events.ErrorCodes.EditingNotSupported, InMethod = "StartEditingLayer", AxMapError = ogrLayer2.ErrorMsg[ogrLayer.LastErrorCode] }; On_Error(error); return(false); } AxMap.set_LayerVisible(editLayer.Handle, false); AxMap.set_LayerVisible(((ResTBPostGISLayer)editLayer).EditingLayerHandle, true); sf = AxMap.get_Shapefile(((ResTBPostGISLayer)editLayer).EditingLayerHandle); Utils utils = new Utils(); if (featureType == FeatureType.Point) { sf.DefaultDrawingOptions.PointSize = 15; sf.DefaultDrawingOptions.FillColor = utils.ColorByName(tkMapColor.Blue); } else { sf.DefaultDrawingOptions.LineWidth = 7; sf.DefaultDrawingOptions.FillColor = utils.ColorByName(tkMapColor.Blue); sf.DefaultDrawingOptions.LineColor = utils.ColorByName(tkMapColor.Blue); AxMap.ShapeEditor.FillColor = utils.ColorByName(tkMapColor.Blue); } //AxMap.ShapeEditor.LineWidth = 20; AxMap.ShapeEditor.LineColor = utils.ColorByName(tkMapColor.Blue); sf.VisibilityExpression = ((ResTBPostGISLayer)editLayer).VisibilityExpression; } AxMap.SendMouseDown = true; AxMap.SendMouseUp = true; AxMap.ChooseLayer += AxMap_ChooseLayer; AxMap.AfterShapeEdit += _map_AfterShapeEdit; AxMap.BeforeDeleteShape += _map_BeforeDeleteShape; AxMap.BeforeShapeEdit += _map_BeforeShapeEdit; AxMap.ShapeValidationFailed += _map_ShapeValidationFailed; AxMap.ValidateShape += _map_ValidateShape; AxMap.ShapeEditor.IndicesVisible = false; AxMap.ShapeEditor.ShowLength = false; AxMap.ShapeEditor.ShowArea = false; AxMap.ShapeEditor.ValidationMode = tkEditorValidation.evFixWithGeos; if ((featureType == FeatureType.Point) || (featureType == FeatureType.Line)) { AxMap.ShapeEditor.SnapBehavior = tkLayerSelection.lsNoLayer; } else { AxMap.ShapeEditor.SnapBehavior = tkLayerSelection.lsAllLayers; } sf.InteractiveEditing = true; Events.MapControl_EditingStateChange editingStateChange = new Events.MapControl_EditingStateChange() { EditingState = Events.EditingState.StartEditing, EditingLayer = editLayer }; On_EditingStateChange(editingStateChange); return(true); }