问题标签 [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 投票
1 回答
148 浏览

c# - 无法使用空间 LINQ 查询在多边形内找到多边形

我在我的 PostgreSQL 数据库和 .NET Core Web Api 中加载了这个(魁北克)OSM PBF 文件,我正在尝试执行基本查询,例如在指定区域内查找多边形,但没有得到任何结果。

我已经DbContext使用这个命令搭建了一个脚手架:

我得到了这个错误:

找不到数据类型为“几何(几何,3857)”的列“public.planet_osm_polygon.way”的类型映射。跳过列。无法构建索引“planet_osm_polygon_way_idx”。以下列无法搭建脚手架:方式。

所以我手动将此属性添加到PlanetOsmPolygon.cs由命令生成的

奇怪的是我确实有Geometry可用的,因为我可以声明该类型的变量并正确编译....

我想我已经为 PostgreSQL 和 PostGIS 正确设置了上下文

这是API方法代码

如您所见,我已经尝试了几种解决方法,但没有任何结果。space是有效的(IsValid返回真)。

我使用的值space可能是个问题吗?还是那个脚手架问题?

0 投票
1 回答
509 浏览

sql-server - 部署到 Azure 后出错:“传入的表格数据流 (TDS) 远程过程调用 (RPC) 协议流不正确。”

我正在使用 Visual Studio 2019 在 .NET Core 3.1 中开发应用程序,并且在装有 Windows 10 Pro 的本地计算机上一切正常。但是部署到 Azure 后会出现这个问题:

将 Post 添加到数据库时会发生此错误。Post 具有 type 属性,NetTopologySuite.Geometries.Point并且设置如下: location = new Point(longitude, latitude) { SRID = 4326 };经度和纬度是双倍的。

当我将位置设置为空时,不会出现错误。我尝试使用较低的精度,例如点之前的 2 位数字和之后的 6 位数字 - 这仍然会导致错误。

我使用实体框架核心。它将 db 列生成为Location (geography, null).

编辑:我正在将 lat 和 lon 字符串转换为这样的双精度:Convert.ToDouble(longitude.Replace(".", ",")). 我删除.Replace(".", ",")了它,现在它可以在 Azure 上运行,但同样的错误出现在本地环境中。我在两个数据库上都有 id 4326 的空间。

0 投票
1 回答
258 浏览

c# - 如何在 C# 中从 OpenStreetMap 边界关系创建一个或多个多边形?

我正在使用OSMSharp(C# OpenStreetMap 库)从 osm.pbf 文件中获取区域(例如城市、州)的边界。我得到的结构是一个包含Ways的Relation ,它由Nodes组成。Ways 包含一组 WGS84 点(纬度、经度),这些点由作为 Ways 一部分的节点表示。组合方式(方式就像具有多个点的线)可以产生一个或多个表示区域区域的多边形。我需要帮助才能到达那里。

方式的顺序不是连续的,并且不清楚哪个方式是哪个区域多边形的一部分(如果有多个)。我认为 C# NetTopologySuite 有一种方法可以将这些方法组合到一个或多个多边形中,以便使用OsmSharp.FilterSpatial方法。但我找不到它。有没有人知道可以执行此操作的 C# 库?

0 投票
1 回答
258 浏览

asp.net - 如何将 HTML 地理位置纬度和经度值从视图发送到控制器操作方法

我希望用户能够获得最近的用户。所以,我必须从浏览器中获取用户的经度和纬度,并将其发送到下面的 OnPost 操作方法。每次用户访问网站时,位置都会更新。注意:在控制器中获取坐标的点类来自用于建模和操作二维线性几何的 NetTopologySuite 库

在视图中,我试图将坐标设置为脚本中表单中定义的 asp-routes,以便我可以在控制器中使用它,但纬度和经度不会发送到上面的操作方法。我是 jQuery 新手

PS - 即使我解决了这个问题,我也不确定这是否是实现目标的最佳方式,即消费者请求供应商并将最接近的供应商之一发送给他,就像优步一样。关于如何最好地实现这一目标的建议将不胜感激。

0 投票
2 回答
219 浏览

asp.net - 如何将数据从 ajax 发送到在每个访问的页面上运行的基本控制器方法

我希望在访问的每个页面上更新用户的纬度和经度。为了不重复,我创建了一个基本控制器,在其中我还实现了 onActionExecuting,它允许该方法每次都在派生控制器的每个操作上运行,但我不知道如何传递纬度和经度参数,因为它们仅通过 Ajax 调用从浏览器传递。

我将此脚本放置在布局中。它检索位置数据并将其发送到操作方法。

0 投票
1 回答
353 浏览

c# - 如何在 C# 中使用 IGeometry (NetTopolgy) 创建圆并存储为 IGeometry 类型

现在,我正在使用 NetTopologySuite 在 C# 中创建多边形,我也需要保存圆,但是我找不到如何实现如果有人帮助我吗?

0 投票
1 回答
276 浏览

nettopologysuite - LineString 长度计算的 .NET TopologySuite 和 ProjNet 问题

我有下面的代码来计算从 A(60.054166,-35.542222)到 B(-48.175833,-8.541111)的距离。以上坐标采用 EPSG:4326 系统(这是标准 GPS 纬度/经度坐标)。

默认测量单位是角度,所以我将所有内容转换为 EPSG:3857,其中测量单位是米

我得到的输出是: 14,855.22 公里,但谷歌地图测量工具输出 12,343.32 相同的坐标

有些东西告诉我谷歌的输出是正确的,所以问题是我在这里遗漏了什么?

0 投票
1 回答
386 浏览

sql-server - EF Core:如何通过解析空间数据创建几何

我需要存储带有一些多边形的静态空间数据,我将 GeoJson 导入我的 SQL Server 以处理辅助数据,一旦我拥有正确的数据,我将我的数据导出到 Json 中(使用FOR JSON PATH)。

现在由于几何是 CLR 类型,我需要将其转换为字符串以允许导出到 JSON。

现在这产生了一个 JSON 文件,其效果是

我需要使用它来播种初始静态数据,这些数据将从中加载,但我不知道如何将字符串几何转换为 NetTopology 几何。

我去了哪里,或者我错过了什么?有没有更好的方法让我播种这些数据?或者有没有办法解析我在 EF Core 中的文本来填充几何?

0 投票
1 回答
2517 浏览

c# - 如何找到覆盖多边形的圆的最小扇区?

给定圆 C: (O, r) 和多边形 P,如何找到 C 中覆盖 P 的最小扇区?

在此处输入图像描述

假设圆的半径足够大,那么主要的问题是找到扇区的初始角和最终角。

我试图从圆心向多边形的每个角度绘制光线,并检查光线是否与多边形重叠。但是可能有不止两条光线只接触多边形。由于双精度,我不能依赖于根据方向角选择独特的光线。所以在接触光线列表中找到最小和最大角度是没有用的。除此之外,我在选择由两个终端角度创建的扇区中的任何一个时遇到问题,因为在计算时初始角度可能大于最终角度atan2在此处输入图像描述

那么找到这样一个部门的正确方法是什么?

编辑: 三个示例多边形(WKT 格式):

所有示例的圆心和半径:

0 投票
1 回答
144 浏览

c# - 是否可以使用实体框架在唯一性键约束中使用 NetTopologySuite 点?

我正在使用 .net 核心和实体框架核心和 .net 构建一个NetTopologySuite.CoreAPI Microsoft.EntityFrameworkCore.SqlServer.NetTopologySuite

我有一个用例,我想存储一组共同构建网络的地理位置。我想有多个网络,所以我还添加了一个NetId代表不同网络的。

Location属性的类型为NetTopologySuite.Geometries.Point

为了确保同一个Point网络不会被添加两次,我想使用PointNetId作为唯一键约束的组合。

我试图这样做:

启动我的应用程序时,我收到此错误:

如何确保不会将完全相同的位置两次添加到同一个网络中?