Work with Esri Gdb file format in C#
Contents
[
Hide
]
ESRI File GeoDatabases (FileGDB)
ESRI File GeoDatabases (FileGDB) are one of the most widely used native formats among GIS Software. Aspose.GIS lets you work with the FileGDB file formats and iterate over its features.
Iterate over Layers in FileGDB File
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// For complete examples and data files, please go to https://github.com/aspose-gis/Aspose.GIS-for-.NET | |
//File GDB is a multi layer format. This example shows how to open File GDB as a dataset (collection of layers) and access layers in it. | |
using (var dataset = Dataset.Open(dataDir + "ThreeLayers.gdb", Drivers.FileGdb)) | |
{ | |
Console.WriteLine("FileGDB has {0} layers", dataset.LayersCount); | |
for (int i = 0; i < dataset.LayersCount; ++i) | |
{ | |
Console.WriteLine("Layer {0} name: {1}", i, dataset.GetLayerName(i)); | |
using (var layer = dataset.OpenLayerAt(i)) | |
{ | |
Console.WriteLine("Layer has {0} features", layer.Count); | |
foreach (var feature in layer) | |
{ | |
Console.WriteLine(feature.Geometry.AsText()); | |
} | |
} | |
Console.WriteLine(""); | |
} | |
} |
Convert FileGDB to GeoJSON
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// For complete examples and data files, please go to https://github.com/aspose-gis/Aspose.GIS-for-.NET | |
//This will convert FileGDB dataset with three layers into single layered GeoJSON. | |
VectorLayer.Convert(dataDir + "ThreeLayers.gdb", Drivers.FileGdb, dataDir + "ThreeLayers_out.json", Drivers.GeoJson); |
Reading FileGDB as Layer
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// For complete examples and data files, please go to https://github.com/aspose-gis/Aspose.GIS-for-.NET | |
//FileGDB can still be opened as a single layer. In this case, the opened layer will merge all layers inside FileGDB. | |
using (var layer = VectorLayer.Open(dataDir + "ThreeLayers.gdb", Drivers.FileGdb)) | |
{ | |
Console.WriteLine("All layers in FileGDB has {0} features", layer.Count); | |
foreach (var feature in layer) | |
{ | |
Console.WriteLine(feature.Geometry.AsText()); | |
} | |
} | |
Open ShapeFile as Dataset
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// For complete examples and data files, please go to https://github.com/aspose-gis/Aspose.GIS-for-.NET | |
//FileGDB can still be opened as a single layer. In this case, the opened layer will merge all layers inside FileGDB. | |
using (var layer = VectorLayer.Open(dataDir + "ThreeLayers.gdb", Drivers.FileGdb)) | |
{ | |
Console.WriteLine("All layers in FileGDB has {0} features", layer.Count); | |
foreach (var feature in layer) | |
{ | |
Console.WriteLine(feature.Geometry.AsText()); | |
} | |
} | |
Add Layer to FileGDB Dataset
Open existing FileGDB dataset and adds new layers to it
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// For complete examples and data files, please go to https://github.com/aspose-gis/Aspose.GIS-for-.NET | |
// -- copy test dataset, to avoid modification of test data. | |
var path = RunExamples.GetDataDir() + "ThreeLayers.gdb"; | |
var datasetPath = RunExamples.GetDataDir() + "AddLayerToFileGdbDataset_out.gdb"; | |
RunExamples.CopyDirectory(path, datasetPath); | |
// -- | |
using (var dataset = Dataset.Open(datasetPath, Drivers.FileGdb)) | |
{ | |
Console.WriteLine(dataset.CanCreateLayers); // True | |
using (var layer = dataset.CreateLayer("data", SpatialReferenceSystem.Wgs84)) | |
{ | |
layer.Attributes.Add(new FeatureAttribute("Name", AttributeDataType.String)); | |
var feature = layer.ConstructFeature(); | |
feature.SetValue("Name", "Name_1"); | |
feature.Geometry = new Point(12.21, 23.123, 20, -200); | |
layer.Add(feature); | |
} | |
using (var layer = dataset.OpenLayer("data")) | |
{ | |
Console.WriteLine(layer.Count); // 1 | |
Console.WriteLine(layer[0].GetValue<string>("Name")); // "Name_1" | |
} | |
} |
Remove Layer from FileGDB Dataset
Open an existing FileGDB dataset and remove layers from it.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// For complete examples and data files, please go to https://github.com/aspose-gis/Aspose.GIS-for-.NET | |
// -- copy test dataset, to avoid modification of test data. | |
//var datasetPath = GetOutputPath(".gdb"); | |
var path = RunExamples.GetDataDir() + "ThreeLayers.gdb"; | |
var datasetPath = RunExamples.GetDataDir() + "RemoveLayersFromFileGdbDataset_out.gdb"; | |
RunExamples.CopyDirectory(path, datasetPath); | |
// -- | |
using (var dataset = Dataset.Open(datasetPath, Drivers.FileGdb)) | |
{ | |
Console.WriteLine(dataset.CanRemoveLayers); // True | |
Console.WriteLine(dataset.LayersCount); // 3 | |
// remove layer by index | |
dataset.RemoveLayerAt(2); | |
Console.WriteLine(dataset.LayersCount); // 2 | |
// remove layer by name | |
dataset.RemoveLayer("layer1"); | |
Console.WriteLine(dataset.LayersCount); // 1 | |
} |
Create FileGDB Dataset
Creates a new FileGDB dataset and add layers to it.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// For complete examples and data files, please go to https://github.com/aspose-gis/Aspose.GIS-for-.NET | |
Console.WriteLine(Drivers.FileGdb.CanCreateDatasets); // True | |
var path = RunExamples.GetDataDir() + "CreateFileGdbDataset_out.gdb"; | |
using (var dataset = Dataset.Create(path, Drivers.FileGdb)) | |
{ | |
Console.WriteLine(dataset.LayersCount); // 0 | |
using (var layer = dataset.CreateLayer("layer_1")) | |
{ | |
layer.Attributes.Add(new FeatureAttribute("value", AttributeDataType.Integer)); | |
for (int i = 0; i < 10; ++i) | |
{ | |
var feature = layer.ConstructFeature(); | |
feature.SetValue("value", i); | |
feature.Geometry = new Point(i, i); | |
layer.Add(feature); | |
} | |
} | |
using (var layer = dataset.CreateLayer("layer_2")) | |
{ | |
var feature = layer.ConstructFeature(); | |
feature.Geometry = new LineString(new[] | |
{ | |
new Point(1, 2), | |
new Point(3, 4), | |
}); | |
layer.Add(feature); | |
} | |
Console.WriteLine(dataset.LayersCount); // 2 | |
} |
Create FileGDB Dataset with one Layer using VectorLayer API
This example creates a FileGDB dataset with one layer using VectorLayer API.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// For complete examples and data files, please go to https://github.com/aspose-gis/Aspose.GIS-for-.NET | |
var path = RunExamples.GetDataDir() + "CreateFileGdbDatasetWithSingleLayer_out.gdb"; | |
var options = new FileGdbOptions(); | |
using (var layer = VectorLayer.Create(path, Drivers.FileGdb, options, SpatialReferenceSystem.Wgs84)) | |
// this 'using' is equivalent to | |
// using (var dataset = Dataset.Create(path, Drivers.FileGdb)) | |
// using (var layer = Dataset.CreateLayer("layer")) | |
{ | |
var feature = layer.ConstructFeature(); | |
feature.Geometry = new LineString(new[] | |
{ | |
new Point(1, 2), | |
new Point(3, 4), | |
}); | |
layer.Add(feature); | |
} | |
using (var dataset = Dataset.Open(path, Drivers.FileGdb)) | |
using (var layer = dataset.OpenLayer("layer")) | |
{ | |
Console.WriteLine("Features count: {0}", layer.Count); // 1 | |
} |
Convert GeoJSON Layer to FileGDB Dataset Layer
Create new Layer in FileGDB and add data from GeoJSON Layer into it.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// For complete examples and data files, please go to https://github.com/aspose-gis/Aspose.GIS-for-.NET | |
var geoJsonPath = RunExamples.GetDataDir() + "ConvertGeoJsonLayerToLayerInFileGdbDataset_out.json"; | |
using (VectorLayer layer = VectorLayer.Create(geoJsonPath, Drivers.GeoJson)) | |
{ | |
layer.Attributes.Add(new FeatureAttribute("name", AttributeDataType.String)); | |
layer.Attributes.Add(new FeatureAttribute("age", AttributeDataType.Integer)); | |
Feature firstFeature = layer.ConstructFeature(); | |
firstFeature.Geometry = new Point(33.97, -118.25); | |
firstFeature.SetValue("name", "John"); | |
firstFeature.SetValue("age", 23); | |
layer.Add(firstFeature); | |
Feature secondFeature = layer.ConstructFeature(); | |
secondFeature.Geometry = new Point(35.81, -96.28); | |
secondFeature.SetValue("name", "Mary"); | |
secondFeature.SetValue("age", 54); | |
layer.Add(secondFeature); | |
} | |
// -- | |
// -- copy test dataset, to avoid modification of test data. | |
var sourceFile = RunExamples.GetDataDir() + "ThreeLayers.gdb"; | |
var destinationFile = RunExamples.GetDataDir() + "ThreeLayersCopy_out.gdb"; | |
RunExamples.CopyDirectory(sourceFile, destinationFile); | |
// -- | |
using (var geoJsonLayer = VectorLayer.Open(geoJsonPath, Drivers.GeoJson)) | |
{ | |
using (var fileGdbDataset = Dataset.Open(destinationFile, Drivers.FileGdb)) | |
using (var fileGdbLayer = fileGdbDataset.CreateLayer("new_layer", SpatialReferenceSystem.Wgs84)) | |
{ | |
fileGdbLayer.CopyAttributes(geoJsonLayer); | |
foreach (var feature in geoJsonLayer) | |
{ | |
fileGdbLayer.Add(feature); | |
} | |
} | |
} |
Read OBJECTID from FileGDB Dataset Layer
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// For complete examples and data files, please go to https://github.com/aspose-gis/Aspose.GIS-for-.NET | |
using (var dataset = Dataset.Open(path, Drivers.FileGdb)) | |
using (var layer = dataset.OpenLayer("layer")) | |
{ | |
foreach (var feature in layer) | |
{ | |
Console.WriteLine(feature.GetValue<int>("OBJECTID")); | |
} | |
} |
Specify Precision Grid for FileGDB Layer
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// For complete examples and data files, please go to https://github.com/aspose-gis/Aspose.GIS-for-.NET | |
var path = RunExamples.GetDataDir() + "PrecisionGrid_out.gdb"; | |
using (var dataset = Dataset.Create(path, Drivers.FileGdb)) | |
{ | |
var options = new FileGdbOptions | |
{ | |
// specify coordinate precision grid parameters (origins and scales for coordinates) | |
CoordinatePrecisionGrid = new FileGdbCoordinatePrecisionGrid | |
{ | |
// all our coordinates must be more than (-400, -400) point | |
XOrigin = -400, | |
YOrigin = -400, | |
// the write precision is 10 digits after the decimal point | |
XYScale = 1e10, | |
// M values are started at 0 and precision is 4 digits after the decimal point | |
MOrigin = 0, | |
MScale = 1e4, | |
}, | |
// throw whenever an attempt to write coordinate that does not fit precision grid is detected | |
EnsureValidCoordinatesRange = true, | |
}; | |
using (var layer = dataset.CreateLayer("layer_name", options, SpatialReferenceSystem.Wgs84)) | |
{ | |
var feature = layer.ConstructFeature(); | |
feature.Geometry = new Point(10, 20) { M = 10.1282 }; | |
layer.Add(feature); | |
feature = layer.ConstructFeature(); | |
// X == -410 is less than XOrigin, so an exception is thrown | |
feature.Geometry = new Point(-410, 0) { M = 20.2343 }; | |
try | |
{ | |
layer.Add(feature); | |
} | |
catch (GisException e) | |
{ | |
Console.WriteLine(e.Message); // X value -410 is out of valid range. | |
} | |
} | |
} |
Specify Tolerances for FileGDB Layer
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// For complete examples and data files, please go to https://github.com/aspose-gis/Aspose.GIS-for-.NET | |
var path = RunExamples.GetDataDir() + "TolerancesForFileGdbLayer_out.gdb"; | |
using (var dataset = Dataset.Create(path, Drivers.FileGdb)) | |
{ | |
var options = new FileGdbOptions | |
{ | |
XYTolerance = 0.001, | |
ZTolerance = 0.1, | |
MTolerance = 0.1, | |
}; | |
using (var layer = dataset.CreateLayer("layer_name", options)) | |
{ | |
// layer is created with the provided tolerances and some ArcGIS features/tools will use it | |
} | |
} |
Specify Names of ObjectId and Geometry Fields
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// For complete examples and data files, please go to https://github.com/aspose-gis/Aspose.GIS-for-.NET | |
var path = RunExamples.GetDataDir() + "NamesOfObjectIdAndGeometryFields_out.gdb"; | |
using (var dataset = Dataset.Create(path, Drivers.FileGdb)) | |
{ | |
var options = new FileGdbOptions | |
{ | |
// name object ID field 'OID' rather than the default 'OBJECTID'. | |
ObjectIdFieldName = "OID", | |
// name geometry field 'POINT' rather than the default 'SHAPE'. | |
GeometryFieldName = "POINT", | |
}; | |
using (var layer = dataset.CreateLayer("layer_name", options, SpatialReferenceSystem.Wgs84)) | |
{ | |
var feature = layer.ConstructFeature(); | |
feature.Geometry = new Point(12.32, 34.21); | |
layer.Add(feature); | |
} | |
using (var layer = dataset.OpenLayer("layer_name")) | |
{ | |
var feature = layer[0]; | |
Console.WriteLine(feature.GetValue<int>("OID")); // 1 | |
} | |
} |