Browse our Products
Aspose.GIS for .NET 24.10 Release Notes
This page contains release notes information for Aspose.GIS for .NET 24.10.
Full List of Issues Covering all Changes in this Release
Key | Summary | Category |
---|---|---|
GISNET-1687 | Ability to create empty layer with specific properties | Feature |
GISNET-1408 | Ability to render map as svg collection, Tile Generator | Feature |
GISNET-1696 | Implementation of the possibility to update data in the database by using the Aspose.GIS library. | Feature |
Public API and Backward Incompatible Changes
Following members have been added:
- P:Aspose.Gis.Formats.FileGdb.FileGdbOptions.ExpectedGeometryType
- P:Aspose.Gis.Formats.FileGdb.FileGdbOptions.HasZ
- P:Aspose.Gis.Formats.FileGdb.FileGdbOptions.HasM
- T:Aspose.Gis.GeoTools.GeneratorTilesRenderOptions
- M:Aspose.Gis.GeoTools.GeneratorTilesRenderOptions.#ctor
- P:Aspose.Gis.GeoTools.GeneratorTilesRenderOptions.TileSize
- P:Aspose.Gis.GeoTools.GeneratorTilesRenderOptions.TileNameTemplate
- P:Aspose.Gis.GeoTools.GeneratorTilesRenderOptions.BackgroundColor
- P:Aspose.Gis.GeoTools.GeneratorTilesRenderOptions.GeometrySymbolizer
- T:Aspose.Gis.GeoTools.GeneratorTiles
- M:Aspose.Gis.GeoTools.GeneratorTiles.GenerateTiles(System.Collections.Generic.IEnumerable{Aspose.Gis.VectorLayer},System.String,System.Int32,Aspose.Gis.GeoTools.GeneratorTilesRenderOptions)
- M:Aspose.Gis.GeoTools.GeneratorTiles.GenerateTiles(Aspose.Gis.VectorLayer,System.String,System.Int32,Aspose.Gis.GeoTools.GeneratorTilesRenderOptions)
- M:Aspose.Gis.Formats.PostGis.PostGisDriver.FromQuery(System.String)
- M:Aspose.Gis.Formats.Database.DatabaseExternalSrsSettingsBuilder.EndExternalSrs
- M:Aspose.Gis.Formats.Database.DatabaseQueryDataSourceBuilder.Build
- M:Aspose.Gis.Formats.Database.DatabaseQueryDataSourceBuilder.AddAttribute(System.String,Aspose.Gis.AttributeDataType,System.Data.DbType)
- M:Aspose.Gis.Formats.Database.DatabaseQueryDataSourceBuilder.AsTrackableForChanges(System.String,System.String,System.Boolean,System.String)
- T:Aspose.Gis.Formats.Database.IDatabaseDataSource
- M:Aspose.Gis.Formats.Database.IDatabaseDataSource.ReadAsync(System.Data.Common.DbConnection)
- T:Aspose.Gis.Formats.Database.DataEditing.IDatabaseEditableDataSource
- M:Aspose.Gis.Formats.Database.DataEditing.IDatabaseEditableDataSource.SubmitChangesAsync(Aspose.Gis.VectorLayer,System.Data.Common.DbConnection,System.Data.Common.DbTransaction)
- T:Aspose.Gis.Formats.Database.DataEditing.DatabaseEditableDataSourceBuilder
- M:Aspose.Gis.Formats.Database.DataEditing.DatabaseEditableDataSourceBuilder.Build
Following members have been removed:
- T:Aspose.Gis.Formats.Database.DatabaseDataSource
- M:Aspose.Gis.Formats.Database.DatabaseDataSource.#ctor
- M:Aspose.Gis.Formats.Database.DatabaseDataSource.ReadAsync(System.Data.Common.DbConnection)
- M:Aspose.Gis.Formats.Database.DatabaseDataSourceBuilder.Build
What’s can you help in developement:
Please check new features in Tile Rendering and integration with different types of Databases.
Usage examples:
GISNET-1687. Ability to create empty layer with specific properties
string outputPath = "new_filegdb_data.gdb";
using (var dataset = Dataset.Create(outputPath, Drivers.FileGdb))
{
using (var layer = dataset.CreateLayer("point_layer", new FileGdbOptions() { HasZ = false, HasM = false }, SpatialReferenceSystem.Wgs72))
{
var feature = layer.ConstructFeature();
feature.Geometry = new Point(1, 2);
layer.Add(feature);
}
using (var layer = dataset.CreateLayer("point_Z_layer", new FileGdbOptions() { HasM = false }, SpatialReferenceSystem.Wgs72))
{
var feature = layer.ConstructFeature();
feature.Geometry = new Point(1, 2, 3);
layer.Add(feature);
}
using (var layer = dataset.CreateLayer("point_M_layer", new FileGdbOptions() { HasZ = false }, SpatialReferenceSystem.Wgs72))
{
var feature = layer.ConstructFeature();
feature.Geometry = new Point(1, 2) { M = 4 };
layer.Add(feature);
}
}
GISNET-1408. Ability to render map as svg collection, Tile Generator
// Draw Tiles
string remoteUri = "tiles" + @"tile_zxy.png";
using (var webLayer = Drivers.XyzTiles.OpenLayer(new XyzConnection(remoteUri)))
{
var extent = new Extent(-20037508, -20037508, 20037508, 20037508)
{ SpatialReferenceSystem = SpatialReferenceSystem.WebMercator };
var tiles = webLayer.GetTiles(1, extent);
using (var map = new Map(256, 256))
{
map.BackgroundColor = System.Drawing.Color.Beige;
map.Extent = new Extent(0, 0, 250, 250)
{ SpatialReferenceSystem = SpatialReferenceSystem.Wgs84 };
foreach (var tile in tiles)
{
var raster = tile.AsRaster();
map.Add(raster);
}
map.Render("tiled-polar-local.png", Renderers.Png);
}
}
GISNET-1696. Implementation of the possibility to update data in the database by using the Aspose.GIS library.
public async Task ReplaceDatabaseDataWithOverwriteSameKeyFalse()
{
var vitebsk = -59506; // Vitebsk region
var magilyov = -59162; // Magilyov region
var grodno = -59275; // Grodno region
var ds = Drivers.PostGis
.FromQuery($@"
SELECT osm_id, name, admin_level, boundary, population, way_area, ST_AsEWKB(way) AS way
FROM tmp_planet_osm_belarus
WHERE osm_id IN ({vitebsk}, {magilyov}, {grodno});
")
.GeometryField("way")
.AddAttribute("osm_id", AttributeDataType.Long)
.AddAttribute("name", AttributeDataType.String)
.AddAttribute("boundary", AttributeDataType.String)
.AsTrackableForChanges("tmp_planet_osm_belarus", "osm_id")
.Build();
using (var transaction = _conn.BeginTransaction())
{
var layer = await ds.ReadAsync(_conn);
var newFeature = layer.ConstructFeature();
newFeature.SetValue("osm_id", grodno);
newFeature.SetValue("name", "fake Grodno");
newFeature.Geometry =
new LineString(
new Point[] {
new Point(1, 1),
new Point(1, 2),
new Point(1, 3)
}
)
{
SpatialReferenceSystem = SpatialReferenceSystem.CreateFromEpsg(3857)
};
Assert.Throws(
Is.TypeOf<InvalidOperationException>(),
() => layer.ReplaceAt(0, newFeature));
}
}
public async Task ReplaceDatabaseDataWithDbTypes()
{
var vitebsk = -59506; // Vitebsk region
var magilyov = -59162; // Magilyov region
var grodno = -59275; // Grodno region
var ds = Drivers.PostGis
.FromQuery($@"
SELECT osm_id, name, admin_level, boundary, population, way_area, ST_AsEWKB(way) AS way
FROM tmp_planet_osm_belarus
WHERE osm_id IN ({vitebsk}, {magilyov}, {grodno});
")
.GeometryField("way")
.AddAttribute("osm_id", AttributeDataType.Long, System.Data.DbType.Int64)
.AddAttribute("name", AttributeDataType.String, System.Data.DbType.String)
.AddAttribute("boundary", AttributeDataType.String, System.Data.DbType.String)
.AsTrackableForChanges("tmp_planet_osm_belarus", "osm_id", true)
.Build();
using (var transaction = _conn.BeginTransaction())
{
var layer = await ds.ReadAsync(_conn);
var newFeature = layer.ConstructFeature();
newFeature.SetValue("osm_id", grodno);
newFeature.SetValue("name", "fake Grodno");
newFeature.Geometry =
new LineString(
new Point[] {
new Point(1, 1),
new Point(1, 2),
new Point(1, 3)
}
)
{
SpatialReferenceSystem = SpatialReferenceSystem.CreateFromEpsg(3857)
};
layer.ReplaceAt(0, newFeature);
await ds.SubmitChangesAsync(layer, _conn, transaction);
transaction.Commit();
}
var resultLayer = await ds.ReadAsync(_conn);
var resultVitebsk = resultLayer.WhereEqual("osm_id", vitebsk).FirstOrDefault();
var resultMagilyov = resultLayer.WhereEqual("osm_id", magilyov).First();
var resultGrodno = resultLayer.WhereEqual("osm_id", grodno).First();
// Replaced item has been removed from DB
Assert.Null(resultVitebsk);
// Magilev exists as it was.
Assert.IsNotNull(resultMagilyov);
Assert.AreEqual("Магілёўская вобласць", resultMagilyov.GetValue("name"));
// Grodno exists but data has been replaced to new one due to the OverwriteSameKey setting was enabled
Assert.IsNotNull(resultGrodno);
Assert.AreEqual("fake Grodno", resultGrodno.GetValue("name"));
}
public async Task NeighboringRegionsWithAdditionalSrsQuery()
{
var ds = Drivers.PostGis
.FromQuery(@"
SELECT
a.osm_id, a.name, ST_AsEWKB(ST_Transform(a.way, 4284)) AS way
FROM
tmp_planet_osm_belarus AS a
JOIN
tmp_planet_osm_belarus AS b ON b.name = 'Гомельская вобласць'
WHERE
ST_Touches(a.way, b.way);
")
.GeometryField("way")
.AddAttribute("osm_id", AttributeDataType.Long)
.AddAttribute("name", AttributeDataType.String)
.UseExternalSrsFromQuery(
@"SELECT auth_srid, srtext FROM spatial_ref_sys
WHERE srid = 4284"
)
.ExternalSrsFields("auth_srid", "srtext")
.EndExternalSrs()
.AsTrackableForChanges("tmp_planet_osm_belarus", "osm_id")
.Build();
using (var transaction = _conn.BeginTransaction())
{
var layer = await ds.ReadAsync(_conn);
foreach (var feature in layer)
{
feature.SetValue("name", "test");
}
await ds.SubmitChangesAsync(layer, _conn, transaction);
transaction.Commit();
}
var resultLayer = await ds.ReadAsync(_conn);
Assert.That(resultLayer.Select(x => (string)x.GetValue("name")), Is.All.Contains("test"));
}