GIS大数据存储预研 1. 背景 2.实验数据准备 3.存储设计和对比   4.查询验证(类型、效率、精度) 5.总结

 文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/

在实际项目运行中,时常会出现希望搜索周边所有数据的需求。但是以常规的存储方案,每种资源均为一个图层或一个表,比如人员轨迹表、车辆轨迹表、各类空间图层表等。在进行全文空间收索时,基于传统空间关系库或后台图层服务的遍历查询则过于耗时。这里,我们研究基于ElasticSearch来进行所有数据的整合,以及全文查询服务的提供,并且分别从查询效率、查询精度、查询类型、存储空间四个维度来进行方案的验证。

2.实验数据准备

试验数据包含5个行政面图层、3个线图层(一、二、三级道路中心线)以及75个点图层。一共83个图层。

3.存储设计和对比

a.一个shp对应一个索引。索引中记录shp图层的属性信息和几何信息。

b.增加wkt字段以保存原始坐标。由于ES的空间查询仅支持wgs84坐标,在导入数据时我们将即利用wkt字段保留原始坐标,而es的location字段则保存转换后的wgs84坐标数据结构设计:

以下为点、线、面的存储结构:

 GIS大数据存储预研
1. 背景
2.实验数据准备
3.存储设计和对比
 
4.查询验证(类型、效率、精度)
5.总结

                                          点

GIS大数据存储预研
1. 背景
2.实验数据准备
3.存储设计和对比
 
4.查询验证(类型、效率、精度)
5.总结

                                        线

GIS大数据存储预研
1. 背景
2.实验数据准备
3.存储设计和对比
 
4.查询验证(类型、效率、精度)
5.总结

                                       面

83张图层的占用存储空间变化:

  表名

Shp大小

储存占用空间

9.91mb

3.3mb
行道树

25.3mb

8.3mb

X1井盖

23.6mb

7.7mb

X2井盖

24.1kb

10kb

X3井盖

729 kb

458.8kb

合计

198mb

72.5mb

 

4.查询验证(类型、效率、精度)

4.1查询类型—面查点

以网格面fid为122的面进行查询。

GIS大数据存储预研
1. 背景
2.实验数据准备
3.存储设计和对比
 
4.查询验证(类型、效率、精度)
5.总结

http请求

GET /_all/_search

{

    "query":{

        "bool": {

           "filter": {

                "geo_shape": {

                    "location": {

                        "shape": wkt,

"relation": "within"

                    }

                }

            }

        }

    }

}

效率:

查询到137个结果,耗时517毫秒

精度:

 GIS大数据存储预研
1. 背景
2.实验数据准备
3.存储设计和对比
 
4.查询验证(类型、效率、精度)
5.总结

4.2查询类型—面查线

以街道面fid为2的面进行查询三种道路中心线。

 GIS大数据存储预研
1. 背景
2.实验数据准备
3.存储设计和对比
 
4.查询验证(类型、效率、精度)
5.总结

http请求

GET /一级道路中心线,二级道路中心线,三级道路中心线/_search

{

    "query":{

        "bool": {

           "filter": {

                "geo_shape": {

                    "location": {

                        "shape": wkt,

"relation": "within"

                    }

                }

            }

        }

    }

}

效率:

35条结果,耗时151毫秒

精度:

 GIS大数据存储预研
1. 背景
2.实验数据准备
3.存储设计和对比
 
4.查询验证(类型、效率、精度)
5.总结

4.3查询类型—面查面

同样以街道面fid为2的面进行查询社区面

http请求

GET /社区面/_search

{

    "query":{

        "bool": {

           "filter": {

                "geo_shape": {

                    "location": {

                        "shape": wkt,

"relation": "within"

                    }

                }

            }

        }

    }

}

效率:

7条结果,耗时1406毫秒

精度:

 GIS大数据存储预研
1. 背景
2.实验数据准备
3.存储设计和对比
 
4.查询验证(类型、效率、精度)
5.总结

4.4查询类型—点查面

查找井盖fid为10929的点落在哪一块网格、社区、街道内。

http请求

GET /index/_search

{

    "query":{

        "bool": {

           "filter": {

                "geo_shape": {

                    "location": {

                        "shape": wkt

                    }

                }

            }

        }

    }

}

效率和精度:

查询结果是正确的,耗时都在5毫秒以内。

5.总结

利用ES来进行空间大数据的存储和运用无论从精度、效率、存储利用空间上均是非常合适的选择。但是从项目实施的角度,仍然有以下内容需要完成:

a.elasticsearch的脚本化搭建。

b.入库工具开发

c.后台服务接口封装,对输入参数(坐标等)以及输出结果(坐标等)根据对应环境转换

d.前端将全文检索——文本或空间,以标准功能开发

                     -----欢迎转载,但保留版权,请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/

                                                                           如果您觉得本文确实帮助了您,可以微信扫一扫,进行小额的打赏和鼓励,谢谢 ^_^

                                                                                                                             GIS大数据存储预研
1. 背景
2.实验数据准备
3.存储设计和对比
 
4.查询验证(类型、效率、精度)
5.总结