问题标签 [sqlgeography]

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 回答
515 浏览

geometry - 以给定半径为中心点计算地球上的正方形边界

我正在尝试计算具有特定半径的正方形的边界,并且当正方形的中心已知时(经度,纬度)。但我遇到了麻烦。

我尝试从这里使用 hasrsine 公式:

半正弦公式

但是当半径很大时,我会遇到麻烦。

目前找到1)。我使用的以弧度表示的纬度增量:

  • radiusInMeters / EARTH_RADIUS_METERS

2)。我使用的弧度经度增量:

  • 2.0 * | arcsin( |sin(radiusInMeters/(EARTH_RADIUS_METERS*2.0)) / |cos(latitudeStart)| | ) |

我从haversine公式得到的这些公式。

请有人指出我的确切通用计算公式,这对我的情况来说对大小距离都有好处。

另外,当半径超过经度-180˚/180˚或纬度-90˚/90˚时,应该如何处理?

更新

一些澄清。假设我停留在坐标为 (lon, lat) 的某个特定点,其中 lon 是 -113˚ 和 lat 50˚。

我想从数据库中查询某个感兴趣半径内的点。为此,我需要计算“正方形”的边界。(然后过滤掉不在有趣范围内的东西)。上面的公式在小距离上运行良好(假设'直到 100 公里(63 英里)。但是我从赤道点到两极的距离越多,我得到的舍入误差就越多。)

提前致谢

0 投票
1 回答
1576 浏览

sql-server - 使用 .NET 创建 sqlGeography LINESTRING

我正在构建一个分析各种外部地图文件格式(即 ShapeFiles、MapPoint、KML 等)并将形状存储在中央数据库中的应用程序,该数据库将用于中央映射/报告库。我有一个例程,它现在有一条由点的抽象数组表示的线,我正试图将其转换为一个 sqlGeography 对象,该对象将存储在我的数据库中(目前是 SQL2012 Express)。

这是我的 LINESTRING 语句的示例(存储在字符串 strGeo 中):

然后我对该字符串执行此操作(VB.NET)

我已经从 SQL Server 2012 功能包中添加了对 Microsoft.SqlServer.Types 的适当引用,但是当我的调试器点击 SqlGeography 行时,我得到了这个:

我在计算机上的任何地方都找不到 SqlServerSpatial110.dll。我安装了 SQL Express 2012,并且可以在 SYSTEM32 和 SYSWOW64 中找到 SqlerverSpatial.dll,但是 VS 不允许我注册这些文件中的任何一个。

我注意到,如果我像这样在我的 LINESTRING 中使用两个括号,我会得到一个不同的错误:

(在计算字符之前,位置 27 是第一个 lat/lon 组合之间的空格)

我希望我的第一个字符串格式是正确的格式,但此时我不确定,我不确定如何处理 SqlServerSpatial110.dll 问题。

有人走过这条路吗?我错过了什么吗?

0 投票
1 回答
17750 浏览

c# - 将 SQL 地理转换为 C#

此地理空间 T-SQL 代码的 C# 等效项是什么?

我正在尝试使用SqlGeometry数据类型在多边形中找到一个点——并且可以使用上面的 T-SQL;但我不明白如何实现等效的 C# 代码。

0 投票
1 回答
275 浏览

sql - 在 SQL 中有效地查找 2 lat/longs 之间的距离

我正在处理数十亿行数据,每一行都有一个关联的起始纬度/经度和结束纬度/经度。我需要计算每个起点/终点之间的距离——但这需要很长时间。我真的需要让我正在做的事情更有效率。

目前我使用一个函数(如下)来计算点之间的斜边。有什么方法可以提高效率吗?我应该说我已经尝试将纬度/经度转换为空间地理并使用 STDistance() 函数中内置的 SQL(未编入索引),但这甚至更慢。

任何帮助将非常感激。我希望有某种方法可以加快该功能,即使它会稍微降低精度(最近 100m 可能还可以)。提前致谢!

0 投票
2 回答
1374 浏览

c# - 使用 SqlGeography 和 C# 的 DataTable 值不匹配

所以,下面的代码给了我一个相当混乱的异常。

myTable.Rows.Add(6, "Test", myGeography); 是我得到以下异常的地方:

我不明白为什么这会失败。在调试时我尝试了这个:

我的输出是:

因此,我肯定会尝试将 SqlGeography 对象放在一个采用 SqlGeography 对象的列中。

0 投票
0 回答
862 浏览

sql - 无法使用 SQL 视图和地理调用 varbinary 上的方法

此行有错误

说:

无法在 varbinary 上调用方法

请注意,这Operation.vw_AllRecord是一个视图

0 投票
1 回答
187 浏览

tsql - T-SQL 中的地理查询:使用索引

假设我们有一个生日小丑数据库,其中包含一个地理列,该列包含每个小丑所在的点的二进制表示(根据小丑家庭住址的纬度和经度生成)。地理列上有一个地理索引。

一家大型国际软件公司的 CEO 向我们发送了一份 CSV 文件,其中包含他们在美国的所有员工以及他们的街道地址,包括纬度和经度;我们必须生成一份报告,说明每个员工在 15 英里范围内有多少生日小丑。

我们的 where 条件可能如下所示:

或像这样:

两个 where 子句都会利用我们在 BirthdayClowns 表上创建的索引吗?或者他们中的一个使用它而不是另一个?如果是这样,哪个是哪个?

0 投票
1 回答
951 浏览

azure - 无法将地理数据类型与 Azure 云服务一起使用

我在尝试将 SQL Server 地理数据类型与 Azure 云服务一起使用时遇到问题。我已按照http://alastaira.wordpress.com/2011/08/19/spatial-applications-in-windows-azure-redux-include-denali提供的说明进行操作,但是,当我进行空间查询时(特别是,我正在使用 STDistance 方法),我收到以下消息:

试图加载格式不正确的程序。(来自 HRESULT 的异常:0x8007000B)","exceptionType":"System.BadImageFormatException","stackTrace":" 在 Microsoft.SqlServer.Types.GLNativeMethods.GeodeticPointDistance(Point p1, Point p2, EllipsoidParameters ep)\r\n 在 Microsoft .SqlServer.Types.SqlGeography.STDistance(SqlGeography 其他)

我也尝试了http://social.msdn.microsoft.com/Forums/en-US/windowsazurewebsitespreview/thread/6f68a726-bddb-4312-ae75-043b775da271中写的所有建议,但总是没有成功。

有人可以帮我解决这个问题吗?

提前致谢!

0 投票
1 回答
134 浏览

sql - 递归几何查询:五个最近的实体

问题是下面描述的查询是否可以在不求助于过程逻辑的情况下完成,即是否可以单独由 SQL 和 CTE 和窗口函数处理?我正在使用 SQL Server 2012,但问题不仅限于该引擎。

假设我们有一个包含 250,000 行的全国音乐教师数据库:

其中geolocation列是geography::point具有最佳细分索引的数据类型。

用户想要五位离他最近的吉他老师。如果我们选择任意距离截断值,例如 50 英里,则使用窗口函数的查询性能足够好,这样我们就不会选择所有 250,000 行,然后按距离对它们进行排序并取最近的 5 行。

但是,如果用户选择来自不同文化的乐器,例如西塔琴或乌德琴或巴拉莱卡琴,那么任意 50 英里半径截断可能并不总是成功地包含 5 位教师;在她所在的 50 英里范围内可能没有五位此类乐器的老师。

另外,现在假设我们有一个查询,音乐学院向我们发送了 250 名歌手的名单,这些歌手是来年被学校录取的学生,他们希望我们向他们发送最接近的五位语音教练名单上的每个人,以便这些学生可以在到达校园之前安排接受一些辅导。我们必须扫描教师数据库 250 次(即扫描地理定位索引),因为这些学生都住在全国不同的地方。

所以,我想知道,对于后一个涉及 250 个学生位置列表的查询,是否有可能编写一个递归查询,其中半径开始很小,例如 10 英里,然后每次迭代增加 10 英里,直到是否已达到 100 英里的最大半径或已找到所需的五 (5) 名教师?能不能只针对还没有匹配到所需5名老师的学生?

我认为它不能单独使用 SQL 来完成,必须通过循环和临时表来完成——但也许那是因为我还没有弄清楚如何单独使用 SQL 来完成。

PS primaryInstrument 列也可以减少按距离排序的集合的大小,但为了这个问题,忘记这一点。

编辑:这是一个示例查询。SINGER(提交的)数据集包含一个具有任意半径的列,以将地理结果限制为较小的子集,但如上所述,该半径可能定义一个可能不包含所需数量的圆(其中心点是学生的地理位置)的老师。有时提供的数据集包含数千个地址,而不仅仅是几百个。

0 投票
1 回答
1215 浏览

c# - 即使我知道没有交集,SqlGeography.STIntersection() 也会返回

关于应用程序的一些信息;

该应用程序允许用户在 bing 地图 WPF api 上绘制和保存多边形。

我们感兴趣的代码是查找某个点是否在多边形内的天气。下面的函数简单地循环遍历LocationCollectionbing 地图上的多边形,并创建SqlGeography object (OpenGisGeographyType.Polygon)一个多边形实例。

然后我们将鼠标点击转换SqlGeography object (OpenGisGeographyType.Point)为纬度和经度,并使用 SqlGeography.STIntersection 来查找我们的点是否位于多边形内。

如图所示,即使该点在多边形之外,SqlGeography.STIntersection 仍然返回一个交点。(您可以在图片中看出这一点,因为我将标签设置为“在交付区域内”或“我们的区域内的客户”,具体取决于 polyalSearch() 函数返回的内容。

当在多边形内测试位置时,图片中的右侧示例具有预期结果。

图片中左边的例子包含了意想不到的结果——这表明一个点在一个多边形内,而它显然不是!

在此处输入图像描述

笔记:

  • 我使用 SqlGeography (myShape) 将形状放在地图上,所以我知道形状是用适当的顶点构造的。
  • 我使用 SqlGeography (myPoint) 将图钉放在地图上,所以我知道图钉正在正确的顶点进行测试。
    • 这只在大多边形上失败

下面我给出了在内存中创建多边形以及将鼠标单击事件转换为纬度、经度的代码片段。(我已经在注释中包含了多边形顶点,这样就可以在不需要 bing api 的情况下查看它,只需将 for 循环替换为上面的注释)虽然,您需要引用Microsoft.SqlServer.Types.dll 来创建 SqlGeography 对象。它在 SQL Express 2008 中是免费的,可以在C:\Program Files (x86)\Microsoft SQL Server\100\SDK\Assemblies

非常感谢任何帮助,我开始让我的老板为这个问题发疯>.<

这可能与 SRID 有关吗?