NetTopologySuite.IO.GeoJSON 反序列化无效的 GeoJSON

NetTopologySuite.IO.GeoJSON deserializing invalid GeoJSON

提问人:Valuator 提问时间:11/11/2023 更新时间:11/11/2023 访问量:20

问:

我们使用 Google Javascript API 将前端中使用的 GeoJSON 转换为存储在数据库中的数据。映射器类用于处理传入的包含 GeoJSON 并从中返回:NetTopologySuite.IO.GeoJSON4STJstringFeatureCollection

GeometryFactory geometryFactory = NtsGeometryServices.Instance.CreateGeometryFactory();
JsonSerializerOptions options = new JsonSerializerOptions();
options.Converters.Add(new GeoJsonConverterFactory(geometryFactory));

FeatureCollection? features = JsonSerializer.Deserialize<FeatureCollection>(geoJsonString, options);

如果传入的 GeoJSON 包含仅包含单个 Point 的要素(如 LineString 或 Polygon),例如:

{"type":"FeatureCollection","features":[{"type":"Feature","geometry":{"type":"LineString","coordinates":[[-122.43652826547623,47.64769550647011]]},"properties":{}}]}

抛出:ArgumentException

LineString 中的点数无效(找到 1 - 必须为 0 或 >= 2)

我无法在前端轻松处理这个问题,因为数据可能来自使用此转换器的多个外部来源。我只想忽略任何无效的此类功能。处理它的唯一方法是捕获并返回一个空的功能集合,但我仍然希望反序列化集合中有效的其他功能并包含它们。我在 NTS 选项中没有找到任何可以处理此问题的内容。有吗?ArgumentException

C# GeoJSON system.text.json NetTopologySuite

评论

0赞 MakePeaceGreatAgain 11/11/2023
您可以尝试在解析之前验证 JSON,例如使用 geojsonlint.com,不确定它们是否有任何 API。

答: 暂无答案