The latest release of Aspose.GIS for .NET (version 24.7, MSI) simplifies geospatial data management, analysis, and visualization. This update helps developers seamlessly integrate geospatial capabilities into their C# apps.
Utilize the improved integration with persistent geospatial information storage systems using the latest version of the .NET GIS data processing API and efficiently manage your data.
This code example demonstrates сalсulating GPS Overlapping Coordinates effectively:
Developers can now benefit from faster methods for updating original data in GDB files that enable more efficient spatial analysis workflows.
public class FileGdbEditTests : TestFixtureBase
{
public string TestOutPath => "file_gdb";
[Test]
public void AddFeatureTest()
{
var driver = Drivers.FileGdb;
var path = Path.Combine(TestOutPath, "add.gdbtable");
var field = "field";
// arrange: create temp file
using (var vectorLayer = driver.CreateLayer(path))
{
vectorLayer.Attributes.Add(new FeatureAttribute(field, AttributeDataType.String));
AddFeature(vectorLayer, field, "0");
AddFeature(vectorLayer, field, "1");
AddFeature(vectorLayer, field, "2");
AddFeature(vectorLayer, field, "3");
AddFeature(vectorLayer, field, "4");
}
// act: add to end
using (var layer = driver.EditLayer(AbstractPath.FromLocalPath(path)))
{
AddFeature(layer, field, "5");
}
// assert
using (var resultLayer = driver.OpenLayer(path))
{
Assert.AreEqual(6, resultLayer.Count);
Assert.AreEqual("0", resultLayer[0].GetValue(field));
Assert.AreEqual("5", resultLayer[5].GetValue(field));
Assert.AreEqual(GeometryType.Point, resultLayer.GeometryType);
Assert.AreEqual(new Point(5, 5) { SpatialReferenceSystem = resultLayer.SpatialReferenceSystem }, resultLayer[5].Geometry);
}
}
[Test]
public void RemoveFeatureTest()
{
var driver = Drivers.FileGdb;
var path = Path.Combine(TestOutPath, "remove.gdbtable");
var field = "field";
// arrange: create temp file
using (var vectorLayer = driver.CreateLayer(path))
{
vectorLayer.Attributes.Add(new FeatureAttribute(field, AttributeDataType.String));
AddFeature(vectorLayer, field, "0");
AddFeature(vectorLayer, field, "1");
AddFeature(vectorLayer, field, "2");
AddFeature(vectorLayer, field, "3");
AddFeature(vectorLayer, field, "4");
}
// act
using (var layer = driver.EditLayer(AbstractPath.FromLocalPath(path)))
{
layer.RemoveAt(1);
layer.RemoveAt(2);
}
// assert
using (var resultLayer = driver.OpenLayer(path))
{
Assert.AreEqual(3, resultLayer.Count);
Assert.AreEqual("0", resultLayer[0].GetValue(field));
Assert.AreEqual("2", resultLayer[1].GetValue(field));
Assert.AreEqual("4", resultLayer[2].GetValue(field));
}
}
[Test]
public void UpdateFeatureTest()
{
var driver = Drivers.FileGdb;
var path = Path.Combine(TestOutPath, "update.gdbtable");
var field = "field";
// arrange: create temp file
using (var vectorLayer = driver.CreateLayer(path))
{
vectorLayer.Attributes.Add(new FeatureAttribute(field, AttributeDataType.String));
AddFeature(vectorLayer, field, "0");
AddFeature(vectorLayer, field, "1");
AddFeature(vectorLayer, field, "2");
}
// act: update feature
using (var layer = driver.EditLayer(AbstractPath.FromLocalPath(path)))
{
var feature = layer.ConstructFeature();
feature.SetValue(field, "7");
feature.Geometry = new Point(7, 7);
layer.ReplaceAt(1, feature);
}
// assert
using (var resultLayer = driver.OpenLayer(path))
{
Assert.AreEqual(3, resultLayer.Count);
Assert.AreEqual("0", resultLayer[0].GetValue(field));
Assert.AreEqual("7", resultLayer[1].GetValue(field));
Assert.AreEqual("2", resultLayer[2].GetValue(field));
Assert.AreEqual(new Point(7, 7) { SpatialReferenceSystem = resultLayer.SpatialReferenceSystem }, resultLayer[1].Geometry);
}
}
[Test]
public void RemoveThenAddAndUpdateFeatureTest()
{
var driver = Drivers.FileGdb;
var path = Path.Combine(TestOutPath, "remove-add.gdbtable");
var field = "field";
// arrange: create temp file
using (var vectorLayer = driver.CreateLayer(path))
{
vectorLayer.Attributes.Add(new FeatureAttribute(field, AttributeDataType.String));
AddFeature(vectorLayer, field, "0");
AddFeature(vectorLayer, field, "1");
AddFeature(vectorLayer, field, "2");
AddFeature(vectorLayer, field, "3");
AddFeature(vectorLayer, field, "4");
}
// act: add to end
using (var layer = driver.EditLayer(AbstractPath.FromLocalPath(path)))
{
// original list: // 0,1,2,3,4
layer.RemoveAt(0);//-> [0], 1,2,3,4
layer.RemoveAt(0);//-> [1], 2,3,4
layer.RemoveAt(1);//-> 2, [3] ,4
AddFeature(layer, field, "x0"); //-> 2,4, [x0]
var feature = layer.ConstructFeature();
feature.SetValue(field, 7);
feature.Geometry = new Point(9, 9);
layer.ReplaceAt(1, feature);
}
// assert
using (var resultLayer = driver.OpenLayer(path))
{
Assert.AreEqual(3, resultLayer.Count);
Assert.AreEqual("2", resultLayer[0].GetValue(field));
Assert.AreEqual("7", resultLayer[1].GetValue(field));
Assert.AreEqual("x0", resultLayer[2].GetValue(field));
Assert.AreEqual(new Point(9, 9) { SpatialReferenceSystem = resultLayer.SpatialReferenceSystem }, resultLayer[1].Geometry);
}
}
[Test]
public void AddNewFeatureWithOption()
{
var driver = Drivers.FileGdb;
var outfile = Path.Combine(TestOutPath, "edit-points-new-options.gdbtable");
// arrange
using (var layer = driver.CreateLayer(outfile))
{
var createdGeometries = new IGeometry[] { new Point(1, 1), new Point(2, 2) };
DriverAssert.StoreGeometries(createdGeometries, layer);
}
var options = new FileGdbOptions() { XYPrecisionModel = PrecisionModel.Rounding(1) };
// act
using (var layer = driver.EditLayer(outfile, options))
{
var feature = layer.ConstructFeature();
feature.Geometry = new Point(3.3333, 3.3333);
layer.Add(feature);
}
// assert
using (var layer = driver.OpenLayer(outfile, options))
{
Assert.AreEqual(3, layer.Count);
Assert.AreEqual(null, layer.SpatialReferenceSystem);
Assert.AreEqual(GeometryType.Point, layer.GeometryType);
Assert.AreEqual("Min (X = 1, Y = 1), Max (X = 3.3, Y = 3.3)", layer.GetExtent().ToString());
Assert.AreEqual(new Point(1, 1), layer[0].Geometry);
Assert.AreEqual(new Point(2, 2), layer[1].Geometry);
Assert.AreEqual(new Point(3.3, 3.3), layer[2].Geometry);
}
}
[Test]
public void PerformanceDeleteTest()
{
var driver = Drivers.FileGdb;
var path = Path.Combine(TestOutPath, "performanceRemove.gdbtable");
var field = "field";
// arrange: create temp file
using (var vectorLayer = driver.CreateLayer(path))
{
vectorLayer.Attributes.Add(new FeatureAttribute(field, AttributeDataType.String));
GenerateFeatures(vectorLayer, field, 999002);
}
// act
using (var layer = driver.EditLayer(AbstractPath.FromLocalPath(path)))
{
layer.RemoveAt(499123);
}
// assert
using (var resultLayer = driver.OpenLayer(path))
{
Assert.AreEqual(999001, resultLayer.Count);
}
}
[Test]
public void PerformanceReplaceTest()
{
var driver = Drivers.FileGdb;
var path = Path.Combine(TestOutPath, "performanceRemove.gdbtable");
var field = "field";
// arrange: create temp file
using (var vectorLayer = driver.CreateLayer(path))
{
vectorLayer.Attributes.Add(new FeatureAttribute(field, AttributeDataType.String));
GenerateFeatures(vectorLayer, field, 999000);
}
// act
using (var layer = driver.EditLayer(AbstractPath.FromLocalPath(path)))
{
var feature = layer.ConstructFeature();
feature.SetValue(field, "7");
feature.Geometry = new Point(7, 7);
layer.ReplaceAt(499000, feature);
}
// assert
using (var resultLayer = driver.OpenLayer(path))
{
Assert.AreEqual("7", resultLayer[499000].GetValue(field));
Assert.AreEqual(new Point(7, 7) { SpatialReferenceSystem = resultLayer.SpatialReferenceSystem }, resultLayer[499000].Geometry);
}
}
private void AddFeature(VectorLayer layer, string attributeName, string value)
{
var feature = layer.ConstructFeature();
feature.SetValue(attributeName, value);
feature.Geometry = new Point(5, 5);
layer.Add(feature);
}
private void GenerateFeatures(VectorLayer layer, string attributeName, long count)
{
for (int i = 0; i < count; i++)
{
var feature = layer.ConstructFeature();
feature.SetValue(attributeName, i);
layer.Add(feature);
}
}
}
Enjoy the added support for the GDAL driver for Linux in the latest .NET API release, and broaden your compatibility with various geospatial data sources.