zoukankan      html  css  js  c++  java
  • GIS大数据存储预研

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

    1. 背景

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

    2.实验数据准备

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

    3.存储设计和对比

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

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

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

     

                                              点

                                            线

                                           面

    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的面进行查询。

    http请求

    GET /_all/_search

    {

        "query":{

            "bool": {

               "filter": {

                    "geo_shape": {

                        "location": {

                            "shape": wkt,

    "relation": "within"

                        }

                    }

                }

            }

        }

    }

    效率:

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

    精度:

     

    4.2查询类型—面查线

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

     

    http请求

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

    {

        "query":{

            "bool": {

               "filter": {

                    "geo_shape": {

                        "location": {

                            "shape": wkt,

    "relation": "within"

                        }

                    }

                }

            }

        }

    }

    效率:

    35条结果,耗时151毫秒

    精度:

     

    4.3查询类型—面查面

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

    http请求

    GET /社区面/_search

    {

        "query":{

            "bool": {

               "filter": {

                    "geo_shape": {

                        "location": {

                            "shape": wkt,

    "relation": "within"

                        }

                    }

                }

            }

        }

    }

    效率:

    7条结果,耗时1406毫秒

    精度:

     

    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/

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

                                                                                                                                 

  • 相关阅读:
    http与websocket(基于SignalR)两种协议下的跨域基于ASP.NET MVC--竹子整理
    让Visual Studio 2015 支持ASP.NET MVC4.0.0.1
    自定义滚动条CSS样式
    使用NuGet发布自己的类库包(Library Package)
    基于EF的数据外键关联查询
    基于EF创建数据库迁移
    用SQL命令查看Mysql数据库大小
    Python之MySQL数据操作
    Python之MySQL基础
    Python网络编程之黏包问题
  • 原文地址:https://www.cnblogs.com/naaoveGIS/p/9871754.html
Copyright © 2011-2022 走看看