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

sql-server-2008-r2 - 空间索引减慢查询

背景

我有一个表,其中包含代表客户区域的 POLYGONS/MULTIPOLYGONS:

  • 该表包含大约 8,000 行
  • 大约 90% 的多边形是圆形
  • 其余的多边形代表一个或多个州、省或其他地理区域。这些形状的原始多边形数据是从美国人口普查数据中导入的。
  • 该表在主键上有一个空间索引和一个聚集索引。未对默认 SQL Server 2008 R2 设置进行任何更改。每个对象 16 个单元格,所有级别中等。

这是一个简化的查询,它将重现我遇到的问题:

看似简单、直接的查询需要 12 或 13 秒才能执行,并且对于这样一个简单的查询,执行计划似乎非常复杂。

执行计划

在我的研究中,一些消息来源建议在查询中添加索引提示,以确保查询优化器正确使用空间索引。添加WITH(INDEX(idx_terr_territory))没有任何效果,从执行计划中可以清楚地看出,无论提示如何,它都在引用我的索引。

减少多边形

从美国人口普查数据导入的领土多边形似乎过于复杂,因此我创建了第二列,并测试了具有不同程度公差的缩减多边形(使用Reduce() 方法)。对新列运行与上述相同的查询会产生以下结果:

  • 不减少:12649ms
  • 减少10:7194ms
  • 减少20:6077ms
  • 减少 30:4793ms
  • 减少 40:4397ms
  • 减少50:4290ms

显然朝着正确的方向前进,但降低精度似乎是一个不雅的解决方案。这不是索引应该用于的吗?对于这样一个基本查询,执行计划似乎仍然异常复杂。

空间索引

出于好奇,我去掉了空间索引,结果惊呆了:

  1. 在没有索引的情况下查询更快(低于 3 秒,不减少,低于 1 秒,减少容差 >= 30)
  2. 执行计划看起来要简单得多:

不带索引的执行计划

我的问题

  1. 为什么我的空间索引会减慢速度?
  2. 为了加快查询速度,真的有必要降低我的多边形复杂性吗?降低精度可能会导致问题出现,并且似乎不会很好地扩展。

其他注意事项

  • 已应用 SQL Server 2008 R2 Service Pack 1
  • 进一步的研究建议在存储过程中运行查询。试过这个,似乎没有任何改变。
0 投票
1 回答
2467 浏览

sql - 将地理类型返回为 XML 的 SQL 查询

我正在尝试从包含 Geography 类型的表中返回 XML。
SQL查询:

我收到以下错误:

如何将此地理专栏转换为可读的内容?
谢谢。

0 投票
1 回答
412 浏览

sql - 从两个表中选择一个 XML

我正在尝试执行以下 SQL:

这很好用,但是因为我想获得 XML 格式的结果并且必须转换地理列,所以我将第一行更改为:

并将这一行添加到末尾:

现在我正在获取 XML,但仅包含来自 Table2 的数据。
欢迎任何建议。

0 投票
2 回答
5990 浏览

sql - GROUP BY 子句中的 SQL 地理数据类型列

我正在使用 SQL Server 并创建一个脚本,该脚本将从我的数据库中获取工作人员的地理位置。脚本如下。

问题是我想添加GROUP BY w.display_name, w.geo_location到脚本中,因为显示了重复的记录。将数据类型为 geography 的列添加到 group by 子句会导致引发错误。

当我添加它时抛出的错误是:

“地理”类型没有可比性。它不能在 GROUP BY 子句中使用。

有没有解决的办法?我无法转换w.geo_locationVARCHAR地理数据类型中需要的 a 。

0 投票
1 回答
4034 浏览

sql - 从地理列中搜索附近的点

我的表中有一个带有空间索引的地理类型列。如何在使用索引提高性能的同时选择给定纬度/经度 X 米内的前 N ​​行?

0 投票
1 回答
2804 浏览

entity-framework - 首先使用实体​​框架代码映射 SqlGeography

我正在玩 Entity Framework 4 和sqlgeography数据类型。我无法让实体框架将我的 sqlgeography 类型映射到数据库。我已将我的类定义为 POCO,并希望实体框架为我创建表。我没有成功,然后尝试自己创建表格也没有成功。

我的课看起来像这样:

这是我得到的错误:

0 投票
1 回答
2451 浏览

sql-server-2008 - GML 到 SQL 地理 - 24200:指定的输入不代表有效的地理实例

我目前正在将谷歌地图集成到我们的一个应用程序中。要求之一是将用户定义的区域存储到数据库中。为此,我一直在 SQL Server 2008 中使用 Geography 类型。虽然我大部分时间都在使用它,但我遇到了一个阻塞问题。

下面我有一些示例代码。我正在用 GML XML 字符串填充 Geography 对象,有些实例可以工作,有些则不能,我看不出它们不工作的逻辑原因。

正在工作的多边形定义了一个巨大的区域(跨越几个国家的大小),而没有定义一个大城镇大小的多边形。只有这些“较小”的领域在失败。令人讨厌的是,这个较小的并不足以满足我的需要。谁能告诉我为什么会这样?

0 投票
1 回答
9397 浏览

sql - SQL Server - 从经度和纬度到几何数据类型

可能重复:
SQL Server 2008 空间:在多边形中找到一个点

我正在开发一个使用 SQL Server 2008 数据库的应用程序。在这个数据库中,我有一个名为 Session 的表,它有两个字段 Longitude 和 latitude,它们指示用户的位置。在另一个名为 Zone 的表上,我有一个几何类型的 area 属性。如何检查用户的经纬度坐标是否属于某个几何?

谢谢

0 投票
1 回答
466 浏览

sql-server-2008 - 从地理列中获取位置

我正在使用地理列(在 SQL Server 2008 中)将包含纬度、经度等地理信息的表迁移到一个表。

我需要更新一个返回这些值的存储过程。

我可以做这个:

但是我不想更改的 SP 的签名需要这个:

如何获得正确的值,如浮点数?

我可以使用http://sqltutorials.blogspot.com.au/2007/09/sql-function-split.html或类似的,但这肯定不应该那么复杂吗?

谢谢梅兰妮

0 投票
1 回答
8863 浏览

c# - 从中心和半径创建一个 SqlGeography 多边形圆

我想使用 c# 在 sql-server 2008 地理字段中保存一个圆圈。

在 c# 中,我有一个纬度、一个经度和一个半径,但我找不到一种方法来计算代表圆的多边形并SqlGeography从中创建一个。

我尝试使用以下函数来创建多边形:

然后尝试将其转换List<Coordinate>为可解析的字符串:

但它总是抱怨多边形必须在一个半球上,我敢肯定是这样。

我在正确的轨道上吗?有没有其他(更简单)的方法可以做到这一点?