Net Topology Suite 2.0 版发生了什么?我的主要考虑是:
- 它不再实现 Geo API(我喜欢它的想法)
- 接口在哪里
ICoordinateSystem
(如何使用 NTS 将几何从一个坐标系转换到另一个坐标系)?
Net Topology Suite 2.0 版发生了什么?我的主要考虑是:
ICoordinateSystem
(如何使用 NTS 将几何从一个坐标系转换到另一个坐标系)?Net Topology Suite 2.0 版发生了什么?
对于大多数听起来像这样的问题,您可以将大部分责任归咎于我。
一般来说,请参阅https://github.com/NetTopologySuite/NetTopologySuite/wiki/Upgrading-to-2.0-from-1.x了解 NetTopologySuite 2.0 中发生的变化的详细信息,包括如何从旧的东西迁移到新的东西和简要解释为什么我们推动导致如此痛苦的变化。
- 它不再实现 Geo API(我喜欢它的想法)
我们就这个话题进行了很多讨论:https ://github.com/NetTopologySuite/GeoAPI/issues/70
简短版本:将这个单独的GeoAPI项目作为几何材料的抽象听起来是个好主意,但在我们拥有它的 10 年中,很明显没有人真正将它作为独立的无论如何,独立于 NTS 的事情。
它给我们带来了很多摩擦,让新用户感到困惑,最终 NTS 本身已经是几何学东西的抽象,所以我主张我们在进行其他重大更改的同时摆脱它对于 v2。
接口在哪里
ICoordinateSystem
(如何使用 NTS 将几何从一个坐标系转换到另一个坐标系)?
这东西是由ProjNet4GeoAPI
. 由于我们停止维护我们用来调用 GeoAPI 的东西,我们开始在“ProjNet”包下发布它,在迁移到 v2 时它有类似的变化。
坐标系的抽象现在是抽象类ProjNet.CoordinateSystems.CoordinateSystem
。
与上述两者非常非常相关的是我努力推动的另一个,我们最终在 v2 过渡中实现了:https ://github.com/NetTopologySuite/GeoAPI/issues/68
在 NetTopologySuite 问题中检查此问题。你可以投影。 https://github.com/NetTopologySuite/NetTopologySuite/issues/346
添加到空气呼吸器的注释/代码中,您需要将 ICoordinateSystemServices 更改为 CoordinateSystemServices 并且 SRID 4326 和 3857 尚未预定义。
/*
static readonly ICoordinateSystemServices _coordinateSystemServices = new CoordinateSystemServices(
new CoordinateSystemFactory(), new CoordinateTransformationFactory(),
new Dictionary<int, string>
*/
static readonly CoordinateSystemServices _coordinateSystemServices = new CoordinateSystemServices(
new CoordinateSystemFactory(), new CoordinateTransformationFactory(),
new Dictionary<int, string>
{
[4326] = @"
GEOGCS[""WGS 84"",
DATUM[""WGS_1984"",
SPHEROID[""WGS 84"", 6378137, 298.257223563,
AUTHORITY[""EPSG"", ""7030""]],
AUTHORITY[""EPSG"", ""6326""]],
PRIMEM[""Greenwich"", 0,
AUTHORITY[""EPSG"", ""8901""]],
UNIT[""degree"", 0.0174532925199433,
AUTHORITY[""EPSG"", ""9122""]],
AUTHORITY[""EPSG"", ""4326""]]
",
//(additional projections....)
""
}
public static Geometry ProjectTo(this Geometry geometry, int srid)
{
var transformation = _coordinateSystemServices.CreateTransformation(geometry.SRID, srid);
return Transform(geometry, transformation.MathTransform);
}