在 C# 中使用 Esri Gdb 文件格式
Contents
[
Hide
]
ESRI File GeoDatabases (FileGDB)
ESRI File GeoDatabases (FileGDB) 是 GIS 软件中最广泛使用的原生格式之一。Aspose.GIS 使您能够使用 FileGDB 文件格式并迭代其要素。
迭代 FileGDB 文件中的图层
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(""); | |
} | |
} |
将 FileGDB 转换为 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); |
将 FileGDB 作为图层读取
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()); | |
} | |
} | |
将 ShapeFile 作为数据集打开
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()); | |
} | |
} | |
将图层添加到 FileGDB 数据集
打开现有的 FileGDB 数据集并向其中添加新图层
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" | |
} | |
} |
从 FileGDB 数据集中删除图层
打开现有的 FileGDB 数据集并从中删除图层。
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 | |
} |
创建 FileGDB 数据集
创建一个新的 FileGDB 数据集并添加图层到其中。
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 | |
} |
使用 VectorLayer API 创建带有单个图层的 FileGDB 数据集
此示例创建了一个使用 VectorLayer API 的带有单个图层的 FileGDB 数据集。
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 | |
} |
将 GeoJSON 图层转换为 FileGDB 数据集图层
在 FileGDB 中创建新图层,并将来自 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 | |
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); | |
} | |
} | |
} |
从 FileGDB 数据集图层读取 OBJECTID
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")); | |
} | |
} |
为 FileGDB 图层指定精度网格
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. | |
} | |
} | |
} |
为 FileGDB 图层指定容差
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 | |
} | |
} |
指定 ObjectId 和 Geometry 字段的名称
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 | |
} | |
} |