0

我一直在努力解决这个问题,但一无所获,所以我希望比我更有技能的人能找到答案。

我有两张表,其中一张是一组纬度和经度坐标作为单独的列。在第二个中,我将多边形形状设置为空间几何列。

目标是从表 1 中选择所有的纬度和经度对,可以分别称为:

SQLSTRING = "从 dbo.Table1 中选择 LAT、LONG;"

可以使用脚本语言循环调用第二个表,以使用以下查询逐个解析每个结果:

SQLSTRING = "SELECT * FROM dbo.Table2 a WHERE a.POLY.STContains(geometry::STPointFromText('POINT(" & - 表 1 中的文本经度值- & " " & - 表 1 中的文本纬度值- & ") ',0))=1;"

所以,我的困境是肯定有可能从表 1 中选择所有项目并通过查询运行它们,该查询仅返回表 1 中的纬度和经度包含在表 2 中存储的任何指定多边形内的结果。脚本语言循环显然效率低下,因此可以替换它并返回任何匹配项的单个 SQL 查询将节省大量时间和资源。

任何帮助或指示将不胜感激。预先感谢您的建议。

4

1 回答 1

0

由于您使用的是空间数据,因此您可以进行交叉连接(将两个表中的所有行连接在一起),然后过滤掉匹配的内容。

SELECT  *
FROM   dbo.Table2 AS a
       , dbo.Table1 AS b
WHERE  a.POLY.STContains(geometry::STPointFromText('POINT('+CAST(b.LONG AS VARCHAR)+' '+CAST(b.LAT AS VARCHAR)+')',0))=1;

这里的一个性能问题是它需要重复生成几何对象。如果您可以创建一个列来保存 table1 的几何图形会更好。确保您在 Table2 中的 POLY 上也有空间索引。

于 2013-05-08T22:26:15.103 回答