文章版权由做者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/前端
在实际项目运行中,时常会出现但愿搜索周边全部数据的需求。可是以常规的存储方案,每种资源均为一个图层或一个表,好比人员轨迹表、车辆轨迹表、各种空间图层表等。在进行全文空间收索时,基于传统空间关系库或后台图层服务的遍历查询则过于耗时。这里,咱们研究基于ElasticSearch来进行全部数据的整合,以及全文查询服务的提供,而且分别从查询效率、查询精度、查询类型、存储空间四个维度来进行方案的验证。微信
试验数据包含5个行政面图层、3个线图层(1、2、三级道路中心线)以及75个点图层。一共83个图层。数据结构
a.一个shp对应一个索引。索引中记录shp图层的属性信息和几何信息。elasticsearch
b.增长wkt字段以保存原始坐标。因为ES的空间查询仅支持wgs84坐标,在导入数据时咱们将即利用wkt字段保留原始坐标,而es的location字段则保存转换后的wgs84坐标数据结构设计:工具
如下为点、线、面的存储结构:大数据
点spa
线设计
面3d
83张图层的占用存储空间变化:blog
表名 |
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 |
以网格面fid为122的面进行查询。
http请求
GET /_all/_search
{
"query":{
"bool": {
"filter": {
"geo_shape": {
"location": {
"shape": wkt,
"relation": "within"
}
}
}
}
}
}
效率:
查询到137个结果,耗时517毫秒
精度:
以街道面fid为2的面进行查询三种道路中心线。
http请求
GET /一级道路中心线,二级道路中心线,三级道路中心线/_search
{
"query":{
"bool": {
"filter": {
"geo_shape": {
"location": {
"shape": wkt,
"relation": "within"
}
}
}
}
}
}
效率:
35条结果,耗时151毫秒
精度:
一样以街道面fid为2的面进行查询社区面
http请求
GET /社区面/_search
{
"query":{
"bool": {
"filter": {
"geo_shape": {
"location": {
"shape": wkt,
"relation": "within"
}
}
}
}
}
}
效率:
7条结果,耗时1406毫秒
精度:
查找井盖fid为10929的点落在哪一块网格、社区、街道内。
http请求
GET /index/_search
{
"query":{
"bool": {
"filter": {
"geo_shape": {
"location": {
"shape": wkt
}
}
}
}
}
}
效率和精度:
查询结果是正确的,耗时都在5毫秒之内。
利用ES来进行空间大数据的存储和运用不管从精度、效率、存储利用空间上均是很是合适的选择。可是从项目实施的角度,仍然有如下内容须要完成:
a.elasticsearch的脚本化搭建。
b.入库工具开发
c.后台服务接口封装,对输入参数(坐标等)以及输出结果(坐标等)根据对应环境转换
d.前端将全文检索——文本或空间,以标准功能开发
-----欢迎转载,但保留版权,请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/
若是您以为本文确实帮助了您,能够微信扫一扫,进行小额的打赏和鼓励,谢谢 ^_^