Пространственные данные SQL получают данные из определенного региона - PullRequest
0 голосов
/ 19 января 2012

У меня есть база данных, которая содержит текстовые и географические столбцы.Текст представляет собой CSV ключевых слов, а география - это точки на карте.

Я хочу запросить в определенном географическом регионе наибольшее число повторяющихся ключевых слов X и вернуть их в порядке от наиболее частого к наименее частому.Я понятия не имею, возможно ли это вообще или с чего начать.Любые указатели были бы хороши!

Я использую SQL Server 2012.

1 Ответ

1 голос
/ 20 января 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

О чем и просили.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...