gpt4 book ai didi

c# - 将 NetTopologySuite FeaturesCollection 序列化为 GeoJSON 时遇到问题

转载 作者:太空狗 更新时间:2023-10-29 20:27:24 25 4
gpt4 key购买 nike

尝试返回一些非常简单的 GeoJSON 数据。我找到了 NetTopologySuite,并设置了一个简单的 FeaturesCollection 并尝试将其序列化为 GeoJson 字符串,结果出现以下错误:

"Self referencing loop detected for property 'CoordinateValue' with type 'GeoAPI.Geometries.Coordinate'. Path 'Features[0].Geometry.Coordinates[0]'."

查看类 header ,Point 使用 Coordinate,它确实具有 Coordinate 属性,因此我可以理解为什么会有循环引用。问题是,大多数(如果不是全部)几何体似乎都使用点,所以这将使得不可能序列化任何东西……除非我遗漏了什么。

这是错误还是我遗漏了什么?

只用一个 Point 进行测试并得到相同的错误,所以这里是代码:

using NTS = NetTopologySuite;

var ret = new NTS.Geometries.Point(42.9074, -78.7911);

var jsonSerializer = NTS.IO.GeoJsonSerializer.Create();

var sw = new System.IO.StringWriter();
jsonSerializer.Serialize(sw, ret);

var json = sw.ToString();

最佳答案

更新

GeoJsonSerializer已移至NetTopologySuite.IO.GeoJSON现在有自己的静态 Create()方法:

/// <summary>
/// Factory method to create a (Geo)JsonSerializer
/// </summary>
/// <remarks>Calls <see cref="GeoJsonSerializer.CreateDefault()"/> internally</remarks>
/// <returns>A <see cref="JsonSerializer"/></returns>
public new static JsonSerializer Create()
{
return CreateDefault();
}

使用 direct constructor已弃用:

[Obsolete("Use GeoJsonSerializer.Create...() functions")]
public GeoJsonSerializer() : this(Wgs84Factory) { }

问题中的代码现在应该可以按预期工作。


原始答案

使用 GeoJsonSerializer 的默认构造函数类:

var jsonSerializer = new NetTopologySuite.IO.GeoJsonSerializer();

附加一个 CoordinateConverter这可以防止出现问题。

GeoJsonSerializer 实际上并没有静态的 Create() 方法,因此您将求助于基类的 JsonSerializer.Create() .事实上,以下会导致编译器错误:

GeoJsonSerializer jsonSerializer = NTS.IO.GeoJsonSerializer.Create();

关于c# - 将 NetTopologySuite FeaturesCollection 序列化为 GeoJSON 时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26763564/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com