空间索引化

6

我希望创建一个大型的GPS坐标数据库,可以通过说“返回所有与[这个坐标]相距'n'米以内的坐标”来查询。

我想知道如何在Sqlserver2008中实现四叉树索引?

我想编写一个.NET模块,调用使用四叉树的查询,以便我可以快速检索对象。

如何实现上述功能?

提前感谢。

2个回答

5
CREATE TABLE mytable (id INT NOT NULL, mypoint GEOGRAPHY NOT NULL, ...)

CREATE SPATIAL INDEX SX_mytable_mypoint ON mytable (mypoint)

SELECT  *
FROM    mytable
WHERE   mypoint.STDistance(geography::STGeomFromText(N'POINT (latitude longitude)', 4326) <= @N

谢谢你的回复。但是我的Sqlserver2008数据类型是几何类型而不是地理类型。实际上,我想知道在sqlserver2008中四叉树的实现方式是什么?如果我在我的表上创建空间索引,那是否意味着它是四叉树实现? - user98454
不,这是一种索引块的B-Tree算法,用于在镶嵌表面上索引单元。SQL Server没有本地支持R-TreeQ-Tree。但即便如此,它仍然具有良好的性能。如果涉及到GPS数据,最好将位置保存为GEOGRAPHY,因为GEOMETRY假定平面坐标(而不是球形坐标)。 - Quassnoi
SQL Server 2008不支持q-tree实现吗? - user98454
这篇文章:http://research.microsoft.com/pubs/64532/tr-2005-122.pdf 给出了一些提示,尽管我必须承认我从未尝试过。至于 2008,所有由 SQL Server 本地实现的索引都是 B-Tree - Quassnoi
非常感谢。我还有一个关于从Navteq地图导出数据到Sqlserver2008的疑问。如果我将数据类型设置为地理或几何,地图中的值就无法导出。但是,如果我使用varchar,它们就可以导出。你有任何想法吗? - user98454

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接