0
我有一个包含文本和地理栏目的数据库。文本是关键字的CSV,地理位置是地图上的点。SQL空间数据从特定区域获取数据
我想查询一个特定的地理区域的前X个循环关键字,并按照从最频繁到最不频繁的顺序返回它们。我不知道这是甚至可能的,或者从哪里开始。任何指针都会很棒!
我正在运行SQL Server 2012.
我有一个包含文本和地理栏目的数据库。文本是关键字的CSV,地理位置是地图上的点。SQL空间数据从特定区域获取数据
我想查询一个特定的地理区域的前X个循环关键字,并按照从最频繁到最不频繁的顺序返回它们。我不知道这是甚至可能的,或者从哪里开始。任何指针都会很棒!
我正在运行SQL Server 2012.
是的,这是可能的。 SQL Server(2008及更高版本)确实有两种空间类型,几何和地理。
您的数据模型可能包含两个表格,一个是几何图形,另一个是每个区域的术语/关键字。
例如:
create table a(id int, geo geometry);
create table b(a_id int, term nvarchar(50));
-- geometry with id 1
insert into a values(1, geometry::STGeomFromText('polygon((0 0,0 4,4 4,4 0,0 0))', 0));
-- keywords for geometry with id 1
insert into b values(1, 'term 1');
insert into b values(1, 'term 2');
insert into b values(1, 'term 2'); -- twice this term, on purpose
-- geometry with id 2
insert into a values(2, geometry::STGeomFromText('polygon((10 0,10 4,14 4,14 0,10 0))', 0));
-- keywords for geometry with id 2
insert into b values(2, 'term 3');
insert into b values(2, 'term 4');
insert into b values(2, 'term 1'); -- shared between 1 and 2
,然后创建一个空间查询,例如看起来像这样:
select a.id,b.term,COUNT(1) as frequency from a
join b on a.id=b.a_id
where a.geo.STIntersects(geometry::STGeomFromText('polygon((2 2,2 12,12 12,12 2,2 2))', 0)) = 1
group by a.id,b.term
order by frequency desc
这将导致到:
1 'term 2' 2
2 'term 3' 1
2 'term 4' 1
1 'term 1' 1
2 'term 1' 1
这是什么被要求。
+1我昨晚想到这个:)但是这几乎就是我最终的结果。谢谢 –
你可以更改数据库模式吗? – cha0site
是的,我可以完全控制db –
您是否有对数据库服务器的控制权?抛弃它并使用PostGIS - 免费的空间扩展来释放RDBMS PostgreSQL。然后你有空间数据结构和操作。它微不足道。 – Spacedman