Great news for .NET developers working with GIS data. Aspose.GIS for .NET 24.7 (DLLs-only) is now available, and it lets you manage geospatial data, analyze, and visualize it within your C# apps. With this update, you can conveniently integrate geospatial manipulation features into your solutions.
Leverage the enhanced integration with persistent geospatial information storage systems using the newly released .NET GIS data processing API version and efficiently manage your data.
This code example illustrates сalсulating GPS Overlapping Coordinates effectively:
You can now use robust methods for updating the original GDB file data that allow more effective spatial analysis workflows in your cross-platform solutions.
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);
}
}
}
Experience the support for the GDAL driver for Linux added to the latest release of the .NET API, and expand your compatibility with different geospatial data sources.