问题标签 [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.
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 英里)。但是我从赤道点到两极的距离越多,我得到的舍入误差就越多。)
提前致谢
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 问题。
有人走过这条路吗?我错过了什么吗?
c# - 将 SQL 地理转换为 C#
此地理空间 T-SQL 代码的 C# 等效项是什么?
我正在尝试使用SqlGeometry
数据类型在多边形中找到一个点——并且可以使用上面的 T-SQL;但我不明白如何实现等效的 C# 代码。
sql - 在 SQL 中有效地查找 2 lat/longs 之间的距离
我正在处理数十亿行数据,每一行都有一个关联的起始纬度/经度和结束纬度/经度。我需要计算每个起点/终点之间的距离——但这需要很长时间。我真的需要让我正在做的事情更有效率。
目前我使用一个函数(如下)来计算点之间的斜边。有什么方法可以提高效率吗?我应该说我已经尝试将纬度/经度转换为空间地理并使用 STDistance() 函数中内置的 SQL(未编入索引),但这甚至更慢。
任何帮助将非常感激。我希望有某种方法可以加快该功能,即使它会稍微降低精度(最近 100m 可能还可以)。提前致谢!
c# - 使用 SqlGeography 和 C# 的 DataTable 值不匹配
所以,下面的代码给了我一个相当混乱的异常。
行myTable.Rows.Add(6, "Test", myGeography); 是我得到以下异常的地方:
我不明白为什么这会失败。在调试时我尝试了这个:
我的输出是:
因此,我肯定会尝试将 SqlGeography 对象放在一个采用 SqlGeography 对象的列中。
sql - 无法使用 SQL 视图和地理调用 varbinary 上的方法
此行有错误
说:
无法在 varbinary 上调用方法
请注意,这Operation.vw_AllRecord
是一个视图
tsql - T-SQL 中的地理查询:使用索引
假设我们有一个生日小丑数据库,其中包含一个地理列,该列包含每个小丑所在的点的二进制表示(根据小丑家庭住址的纬度和经度生成)。地理列上有一个地理索引。
一家大型国际软件公司的 CEO 向我们发送了一份 CSV 文件,其中包含他们在美国的所有员工以及他们的街道地址,包括纬度和经度;我们必须生成一份报告,说明每个员工在 15 英里范围内有多少生日小丑。
我们的 where 条件可能如下所示:
或像这样:
两个 where 子句都会利用我们在 BirthdayClowns 表上创建的索引吗?或者他们中的一个使用它而不是另一个?如果是这样,哪个是哪个?
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中写的所有建议,但总是没有成功。
有人可以帮我解决这个问题吗?
提前致谢!
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(提交的)数据集包含一个具有任意半径的列,以将地理结果限制为较小的子集,但如上所述,该半径可能定义一个可能不包含所需数量的圆(其中心点是学生的地理位置)的老师。有时提供的数据集包含数千个地址,而不仅仅是几百个。
c# - 即使我知道没有交集,SqlGeography.STIntersection() 也会返回
关于应用程序的一些信息;
该应用程序允许用户在 bing 地图 WPF api 上绘制和保存多边形。
我们感兴趣的代码是查找某个点是否在多边形内的天气。下面的函数简单地循环遍历LocationCollection
bing 地图上的多边形,并创建SqlGeography object (OpenGisGeographyType.Polygon)
一个多边形实例。
然后我们将鼠标点击转换SqlGeography object (OpenGisGeographyType.Point)
为纬度和经度,并使用 SqlGeography.STIntersection 来查找我们的点是否位于多边形内。
如图所示,即使该点在多边形之外,SqlGeography.STIntersection 仍然返回一个交点。(您可以在图片中看出这一点,因为我将标签设置为“在交付区域内”或“我们的区域内的客户”,具体取决于 polyalSearch() 函数返回的内容。
当在多边形内测试位置时,图片中的右侧示例具有预期结果。
图片中左边的例子包含了意想不到的结果——这表明一个点在一个多边形内,而它显然不是!
笔记:
- 我使用 SqlGeography (myShape) 将形状放在地图上,所以我知道形状是用适当的顶点构造的。
- 我使用 SqlGeography (myPoint) 将图钉放在地图上,所以我知道图钉正在正确的顶点进行测试。
- 这只在大多边形上失败
下面我给出了在内存中创建多边形以及将鼠标单击事件转换为纬度、经度的代码片段。(我已经在注释中包含了多边形顶点,这样就可以在不需要 bing api 的情况下查看它,只需将 for 循环替换为上面的注释)虽然,您需要引用Microsoft.SqlServer.Types.dl
l 来创建 SqlGeography 对象。它在 SQL Express 2008 中是免费的,可以在C:\Program Files (x86)\Microsoft SQL Server\100\SDK\Assemblies
非常感谢任何帮助,我开始让我的老板为这个问题发疯>.<
这可能与 SRID 有关吗?