问题标签 [nettopologysuite]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
168 浏览

c# - 如何在 .NET 5.0 中使用 Entity Framework 6.4 中的空间类型?

我们正在尝试将 .NET 4.5.2 项目移植到 5.0。

我的特殊问题是让空间查询工作。现有代码广泛使用 System.Data.Entity.Spatial.DbGeometry 类型,这在 .NET 5.0 中似乎不可用。

环顾四周,当针对 SqlServer 运行时,建议是使用 NetTopologySuite,这很容易,因为我们已经在使用它了。

说明在这里:

空间数据

要通过 NTS 启用到空间类型的映射,请在提供程序的 DbContext 选项构建器上调用 UseNetTopologySuite 方法。例如,对于 SQL Server,您可以这样称呼它。

我的问题是我们没有调用 options.UseSqlServer。在我们旅程的这一点上,我们正在使用try-convert将我们的项目从 .NET 4.5 移动到 .NET 5.0,这并没有使用 options.UseSqlServer() 配置 EntityFramework,它仍在使用 app.config 文件进行配置.

对于这个项目,我们的 EF 配置如下:

关于我们如何配置 EF 以将 NTS 类型用于地理空间数据的任何想法?

===

从评论:

您不能混合使用 EF Core 和 EF Classic。– ErikEJ 6 分钟前

这似乎正是我们正在做的事情。

我们在 .NET 5.0 项目中使用 Entity Framework 6.4.0,我引用的文档页面是关于 Entity Framework Core 的。

这可能会使整个方法无效。我无法将 EF Classic 配置为将 NTS 类型用于空间数据。

但它仍然给我们留下了潜在的问题。

每当我们尝试访问 Microsoft.SqlServer.Types 对象时,都会出现异常:

System.InvalidOperationException:此提供程序无法使用空间类型和函数,因为找不到程序集 'Microsoft.SqlServer.Types' 版本 10 或更高版本。

而且我们仍然需要能够进行空间查询。

我们有哪些选择?

0 投票
1 回答
156 浏览

json.net - 如何在 NewtonSoft.Json 中配置返回 json 而不是字符串的自定义转换器?

我有一个包含 NetTopologySuite 多边形的简单模型:

我已经使用 NetTopologySuite.IO.GeoJson 构建了一个自定义转换器:

然后我创建一个模型对象并将其序列化:

我得到的包含 Polygon 作为转义的 GeoJson 字符串:

我想要的是多边形作为json,在json对象中:

我在想的是我根本不应该使用 JsonConverter ,而是别的东西。

但是什么?

0 投票
0 回答
367 浏览

c# - 一个函数调用中两个几何/多边形的 C# 联合和交集

我们正在使用该库NetTopologySuite来处理几何/(多)多边形(在 C# 中)。

在某些时候,我们需要两个几何的“并集”和“交集”(从功能上讲,我们想要两个几何的并集并确定该并集的重复部分)。

我知道我可以CascadedPolygonUnion.Union(new List<Geometry> { geometry1, geometry2 }))使用geometry1.Intersection(geometry2).

但是由于两个多边形的“交集”基本上是联合的“重复”部分,难道没有一个例程可以在一个函数调用中确定交集和联合吗?

前任。

问题的主要原因是假设可能存在这样的例程,因为它比两个单独的例程执行得更快,因为例程共享一些关于重复区域的常识......

0 投票
2 回答
424 浏览

c# - 使用 NetTopologySuite 计算点之间的地理距离

我正在尝试使用 NetTopologySuite 计算两点之间的距离。由于我引用了 Microsoft 文档,因此我想出了以下 GeometryExtension 和 GeometryHelper 类:

为了测试我的距离是否被正确计算,我打开了谷歌地图并选择了计算 3 对不同点之间的距离。然后我复制粘贴测试中的值以查看它们是否匹配。我从代码中获得的值是从谷歌地图获得的值的 2 倍。我究竟做错了什么?这是我的测试:

0 投票
1 回答
507 浏览

c# - 使用 ef core 5 将 GeoJson 转换为 FeatureCollection 并保存在 NetTopologySuite.Geometries.Geometry 列中

我有一个名为Layer.cs的模型,它有一个名为Geometry的属性,例如:

我想将示例 GeoJson 文件(您可以在此处找到)转换为特征集合(NetTopologySuite.Features.FeatureCollection):

然后将其保存到 Layer.Geomerty 使用:

或者

但是在调用 save change 之后(在这两种情况下)我得到了休闲错误:

传入的表格数据流 (TDS) 远程过程调用 (RPC) 协议流不正确。参数 3 ("@p2"):提供的值不是数据类型 geography 的有效实例。检查源数据中的无效值。无效值的一个示例是小数位数大于精度的数值类型数据。

是否有任何干净的解决方案可以使用 EF Core 5 将 GeoJson 文件保存为 NetTopologySuite.Geometries.Geometry?

0 投票
0 回答
84 浏览

entity-framework-core - 将 Entity Framework Core 与 Net Topology Suite 一起使用时调整 CurvePolygon SQL 空间类型

有没有一种使用 Entity Framework Core 将 SQL 空间 CurvePolygon 几何列转换为简单多边形的好方法?NetTopologySuite 不支持 CurvePolygon 类型,因此我正在寻找一种在我的 .Net Core 客户端中读取/写入此列的方法。

背景: 我有一个 SQL 空间数据库,它使用 CurvePolygons 来描述圆。Entity Frame Core 5.0.6 和 NetTopologySuite 2.1.0 用于通过使用 EF Core Power Tools 对现有数据库进行逆向工程的代码优先模型来访问数据库。当几何列包含多边形时,代码按预期工作。但是,当我阅读 CurvePolygon 列时,代码无法尝试加载 SqlServerTypes.dll(可能是 .Net Core 应用程序甚至不应该使用的后备路径。)

目标: 我可以使用数据库中的计算列以及 CurvePolygon 形状的中心和半径轻松地重新创建这些圆。读取时一个合理的解决方法是将 CurvedPolygons 转换为近似圆形的多边形。在写入时,一个选项是生成一个描述圆的 OpenGIS 字符串并写入它而不是近似的圆多边形。

在最坏的情况下,我认为我有一个触发器,可以在写入时将 Polygons 转换为 CurvePoly,然后查看排除几何体的表格视图,然后在第二次行程中获取非曲线几何体,但这些选项都感觉不是很好。我希望在某个地方我可以注册一个没有出现在我的搜索中的适配器类......

下面是生成的代码第一表的简化版本:

谢谢你的帮助

0 投票
1 回答
525 浏览

c# - 确定两个特定几何形状之间的差异时,NetTopology 'found non-noded intersection' 异常

在 C# 中使用 NetTopology 在确定两个特定几何形状之间的差异时,我得到一个“找到的非节点交集”异常。

这些几何图形是使用几个例程(如CascadedPolygonUnion.UnionIntersection和)的结果Difference

在某些时候,我们有一个MultiPolygon我们想要从中切出另一个几何图形 ( Polygon): 图片

我们使用此代码尝试切断“红色”多边形:

但随后我们收到一条NetTopologySuite.Geometries.TopologyException消息:

我也在NetTopologySuite 讨论论坛中问了这个问题,因为我们即将发布日期,我希望有人可以提供一些额外的见解(关于解决方法的想法),因为这看起来像 de 库中的一个错误,因为多边形本身似乎是有效的.

可以在此处找到有关多边形的数据- 我们使用“RDNew”数据来执行Difference操作,但我还添加了这些多边形的 WGS84 版本,以便能够在 geojson.io 等工具中查看它们。

0 投票
0 回答
125 浏览

c# - 更新后无法使用 EF Core 中的空间数据按距离(米)过滤

我有一个使用EF Core 空间数据Npgsql.EntityFrameworkCore.PostgreSQL 提供程序的几何列的表

我曾经以这种方式按距离过滤

更新后我收到以下错误:

无法翻译 LINQ 表达式“DbSet()...”。附加信息:方法“App.GeometryExtensions.ProjectTo”的翻译失败。

它不使用ProjectTo()但按度数计算。有没有办法再次翻译此查询以使用仪表?

0 投票
2 回答
318 浏览

c# - 在 .NET Core 中使用 NTS 几何体批量插入

您可能知道,当您尝试插入大量行时,以“实体框架”方式将数据插入表中非常慢。另一种方法是使用 SqlBulkCopy,它在提高性能方面做得很好。问题是 SqlBulkCopy(根据我的阅读和测试)不支持 .NET Core 中的 SQL 几何类型。

这是在 EF Core 中,C# 属性类型是不能更改的 NTS 几何。

使用旧库 Microsoft.SqlServer.Types 不是一种选择,因为它们在 .NET Core 中不起作用。数据当前作为 NTS 几何从另一个 SQL Server 数据库加载。

有没有人找到一种插入多行的有效方法?

0 投票
0 回答
36 浏览

nettopologysuite - NTS(C#) 中有关 PrecisionModel 的错误?

我在 NTS(C#) 中使用 PrecisionModel 为几何中的坐标指定一个固定的小数位(即 0.1、0.01、0.001 ...)。

我为同一个 LineString 尝试了三个固定小数位:0.1、0.01、0.001。但是当我做一些联合操作时,0.1的精度总是会出错,而0.01和0.001的效果很好。

源代码如下:

很明显,初始lineStr的小数位是0.1,所以我觉得给PrecisionModel指定0.1就够了,真希望结果的精度也在0.1以内,不然就得做一些四舍五入的操作了。

使用 PrecisionModel 是否正确?谢谢你的帮助。