在GIS行业的应用越来越广泛,GIS最常用根据区域进行空间数据查询

    我定义了两个方法,一起来看一下:
  1.     /**
    
         * geodistance filter
    
         * 一个过滤器来过滤基于一个特定的距离从一个特定的地理位置/点。
    
         * @author chenjie
    
         * @param x
    
         * @param y
    
         * @param distance
    
         * @return
    
         */
    
        protected static FilterBuilder geoDistanceFilter(Double x,Double y,Double distance) {
    
            return FilterBuilders.geoDistanceFilter("the_geom")
    
                    .point(x, y)
    
                    .distance(distance, DistanceUnit.METERS)
    
                    .optimizeBbox("memory")                   // Can be also "indexed" or "none"
    
                    .geoDistance(GeoDistance.ARC);            // Or GeoDistance.PLANE
    
        }
    
        /**
    
         * geo bounding box filter
    
         * 定义一个过滤器来过滤基于边界框左上角和右下角的位置/分
    
         * @author chenjie
    
         * @return FilterBuilder
    
         */
    
        protected static FilterBuilder geoBoundingBoxFilter(Double topleft_x,Double topleft_y,Double bottomRight_x,Double bottomRight_y) {
    
            return FilterBuilders.geoBoundingBoxFilter("the_geom")
    
                    .topLeft(topleft_x, topleft_y)
    
                    .bottomRight(bottomRight_x, bottomRight_y);
    
        }
  我们可以看的到这两个方法分是做距离查询(可以用于周边查询,注意方法中DistanceUnit.METERS指的是计算单位)和距形查询
  我们再看看elasticsearch是如何查询数据的,我封装了一个方法

    public List<Map<String, Object>> searchByQuery(String indexName, String docType, QueryBuilder queryBuilder, FilterBuilder filterBuilder, int from, int size, SortBuilder... sort) throws Exception {

        ArrayList list = new ArrayList();

        SearchRequestBuilder request = this.elasticSearchClient.prepareSearch(new String[]{indexName}).setTypes(new String[]{docType}).setQuery(queryBuilder);

        if(sort != null) {

            SortBuilder[] sr = sort;

            int shs = sort.length;

            for(int arr$ = 0; arr$ < shs; ++arr$) {

                SortBuilder len$ = sr[arr$];

                request.addSort(len$);

            }

        }

        SearchResponse var17 = (SearchResponse)request.setPostFilter(filterBuilder).setFrom(from).setSize(size).execute().actionGet();

        SearchHit[] var18 = var17.getHits().hits();

        SearchHit[] var19 = var18;

        int var20 = var18.length;

        for(int i$ = 0; i$ < var20; ++i$) {

            SearchHit sh = var19[i$];

            Map map = sh.getSource();

            map.put("_index_id", sh.getId());

            list.add(map);

        }

        return list;

    }
各位一定要注意,所查询字段必须是geo_point类型,否则是无法进行空间查询的,本人开始也犯了这个错误。
如图:我查询的是the_geom 字段,我们可以看到是geo_point 。elasticsearch对GIS数据的支持还是蛮强大的。

    

elasticsearch GIS空间查询问题解决的更多相关文章

  1. openlayers6结合geoserver实现地图空间查询(附源码下载)

    前言 之前写过一篇 openlayers4 版本的地图空间查询文章,但是由于是封装一层 js 代码写的,很多初学者看起来比较有点吃力,所以本篇文章重新写一篇地图空间查询文章,直接基于最新版本 open ...

  2. Elasticsearch(GEO)空间检索查询

    Elasticsearch(GEO)空间检索查询python版本 1.Elasticsearch ES的强大就不用多说了,当你安装上插件,搭建好集群,你就拥有了一个搜索系统. 当然,ES的集群优化和查 ...

  3. MYSQL的空间查询

    http://blog.sina.com.cn/s/blog_a48af8c001018q1p.html 本文将向各位介绍如何使用MySql5.x中的空间数据库,并展示一下它高效的性能(前提是正确使用 ...

  4. openlayers4 入门开发系列之地图空间查询篇(附源码下载)

    前言 openlayers4 官网的 api 文档介绍地址 openlayers4 api,里面详细的介绍 openlayers4 各个类的介绍,还有就是在线例子:openlayers4 官网在线例子 ...

  5. MYSQL的空间查询(转帖)

    SELECT x(location),y(location) FROM frddata.points; 本文将向各位介绍如何使用MySql5.x中的空间数据库,并展示一下它高效的性能(前提是正确使用) ...

  6. ArcGIS Engine空间查询功能的实现(QueryFilterClass+SpatialFilterClass)

    地图中包含大量的信息,为了快速地了解所需信息,必须借助为空间数据专门编写的空间查询功能. 空间查询主要有两种类型: 基于属性的查询,也称为属性查询. 基于空间位置的查询,也称为空间查询. 查询类的基本 ...

  7. leaflet 结合 geoserver 实现地图空间查询(附源码下载)

    前言 leaflet 入门开发系列环境知识点了解: leaflet api文档介绍,详细介绍 leaflet 每个类的函数以及属性等等 leaflet 在线例子 leaflet 插件,leaflet ...

  8. cesium结合geoserver实现地图空间查询(附源码下载)

    前言 cesium 官网的api文档介绍地址cesium官网api,里面详细的介绍 cesium 各个类的介绍,还有就是在线例子:cesium 官网在线例子,这个也是学习 cesium 的好素材. 内 ...

  9. 基于GIS空间分析的多边形提取技术

    现有基于矢量图形的骨架线提取方法主要包括数据预处理.基于约束 Delauny 三角剖分的骨架线结点生成和骨架线的连接 3 个过程,上述过程都可利用现有 GIS 系统的数据处理.空间分析和建模功能实现. ...

随机推荐

  1. Gridview里添加合计行

    ShowFooter="true" ; ; ; protected void gvIncomeYG_RowDataBound(object sender, GridViewRowE ...

  2. 不使用session,借助redis实现验证码

    1.首先看一下基本的流程 2.看一下代码 注:其中用到的一些工具类,可以到我的github上去下载  https://github.com/hjzgg/usually_util/tree/master ...

  3. 【开源】OSharp3.0框架解说系列(6.2):操作日志与数据日志

    OSharp是什么? OSharp是个快速开发框架,但不是一个大而全的包罗万象的框架,严格的说,OSharp中什么都没有实现.与其他大而全的框架最大的不同点,就是OSharp只做抽象封装,不做实现.依 ...

  4. js 根据屏幕大小调用不同的css文件

    原因:屏幕大小不一样,网站看起来总觉得怪怪的,所以,针对不同大小的屏幕,写了不同的css,写完了,要解决的问题就是:怎么根据屏幕的大小来引用不同的CSS,下面就是解决方法了. 解决方法:首先,在hea ...

  5. vc下的静态链接库与动态链接库(一)

    一.静态库与动态库的区别 目前以lib后缀的库有两种,一种为静态链接库(Static Libary,以下简称“静态库”),另一种为动态连接库(DLL,以下简称“动态库”)的导入库(Import Lib ...

  6. 改写yii2的listview功能

    在vendor\yiisoft\yii2\widgets路径下新增文件ListViewtest,将下列代码粘贴并保存 <?php namespace yii\widgets; use Yii;u ...

  7. 主机巡检脚本:OSWatcher.sh

    主机巡检脚本:OSWatcher.sh 2016-09-26更新,目前该脚本只支持Linux操作系统,后续有需求可以继续完善. 注意: 经测试,普通用户执行脚本可以顺利执行前9项检查: 第10项,普通 ...

  8. RAC某节点启动遭遇ORA-01105,ORA-01606

    环境:RHEL6.5 + Oracle11.2.0.4 双节点RAC 故障现象:节点1实例没有启动成功,节点2正常启动. 1.故障现象 2.解决过程 3.总结 1.故障现象 尝试启动RAC 节点1,遭 ...

  9. 用HTML5 CANVAS做自定义路径的动态效果图片!

    最近对HTML5开始感兴趣了,实现的效果如下图,大家可以从代码里换掉图片 我用的是canvas里面的2d绘图,其中上图的路径是网上在线绘制的,我太懒了,哈哈 下面是网址: http://www.vic ...

  10. MongoDB - basic

    mongoDB basic from:http://www.tutorialspoint.com/mongodb prject:https://github.com/chenxing12/l4mong ...