【问题标题】:SQL Spatial Data get data from particular regionSQL Spatial Data 从特定区域获取数据
【发布时间】:2012-02-14 07:10:04
【问题描述】:

我有一个包含文本和地理列的数据库。文本是关键字的 CSV,地理是地图上的点。

我想在特定地理区域查询前 X 个重复关键字,并按从最频繁到最不频繁的顺序返回它们。我不知道这是否可能或从哪里开始。任何指针都会很棒!

我正在运行 SQL Server 2012。

【问题讨论】:

  • 可以更改数据库架构吗?
  • 是的,我可以完全控制数据库
  • 您对数据库服务器有任何控制权吗?放弃它并使用 PostGIS——免费的 RDBMS PostgreSQL 的免费空间扩展。然后你有空间数据结构和操作。它微不足道。

标签: sql geometry geospatial


【解决方案1】:

是的,这是可能的。 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 我昨晚想通了 :) 但这几乎就是我最终得到的结果。谢谢
猜你喜欢
  • 1970-01-01
  • 2019-04-04
  • 2015-12-14
  • 1970-01-01
  • 2015-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多