写在前面 :
为什么要在 SQL Server 内创建空间要素?
该需求来自于千万级别POI数据的存储与可视化。
存储部分使用 SQL Server 即可,并且筛选查询的效率也比较高。
可视化方面用的比较多的是 ArcGIS , 分析起来也比较方便,但对于大批量数据的处理效率比较低。
因此就希望能够把数据库的存储与查询能力,和 ArcGIS 的空间数据可视化与分析能力结合起来。经过一番搜索,得到了以下的解决方案。
1. 在 SQL Server 内创建空间要素
在数据库内创建空间要素的方法来自于微软官方文档 创建、构造和查询几何图形实例,在 SQL Server 2014 上测试可用。
此处以创建点要素为例: geometry::STPointFromText('POINT (x y)', SRID)
其中 x, y 为坐标值。SRID为空间参考编号,可在 ArcGIS 内空间参考设置处找到不同坐标系的ID, WGS 1984 坐标系的 SRID 为 4326 。
因此可用以下代码创建一个经纬度为121.15545, 31.65894
的点。
2. 构造一个 ArcGIS 可直接连接的数据表
要在 ArcGIS 内直接显示 SQL Server 数据表内的空间要素,则对数据表的结构有一定要求。
以点要素为例,创建的表需要以int
类型的OBJECTID
字段作为主键,并有一个geometry
数据类型的字段。
示例代码:
Tip :
快速获得原数据表的数据结构代码,可对原数据表右键-编写表脚本为-CREATE 到-新查询编辑器窗口
3. 使用 ArcGIS 显示 SQL Server 内存储的数据
ArcGIS 软件提供了丰富的数据源方式,其中就包括 SQL Server。
- ArcMap 内,
目录
窗口,双击数据库连接
-添加数据库连接
。 - 在弹出的窗口内,数据库平台选择
SQL Server
,实例填写 SQL Server 服务器名(SQL Server 安装在本机的话,可填写localhost
或本机计算机名),身份验证类型按需选择,默认为操作系统身份验证
,然后在下拉列表内选择数据表所在数据库,确定即可。 - 在
数据库连接
下找到新添加的连接,双击打开,将包含空间数据的表拖到显示窗口内即可。如果数据量较大,计算范围时间过程,可选择使用空间参考范围
跳过此步骤。
如果只需要显示部分的数据,可在图层的属性-定义查询
内填入筛选查询语句。筛选操作由数据库后台完成,因此效率还可以接受。
本文来自 i.xdc.at/2016/10/05/geometry-in-SQL-Server/
Tip :
如果想创建存储其他空间要素类型的数据表,如线要素的表,可在 ArcGIS 内将已有的线数据图层右键-数据-导出数据...
,输出要素类的保存类型选择数据库要素类
,将数据保存到数据库连接里的一张新表内,然后在 SQL Server 内查看这张表的结构,具体操作为对这张表右键-编写表脚本为-CREATE 到-新查询编辑器窗口
。
UPDATE: 2016-10-06
为提高数据在 ArcGIS 内显示的效率,最好对数据表创建空间索引,参见 创建、修改和删除空间索引 。