在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. MySQL密码忘记,怎么办?

    如果哪天你忘记了线上MySQL数据库的root密码,怎么办? 大家往往会想到skip-grant-tables参数,具体步骤如下: 1. 关闭MySQL数据库,因为root密码忘记了,mysqladm ...

  2. MyCAT报java.lang.OutOfMemoryError: Java heap space

    早上同事反映,mycat又假死了,估计还是内存溢出,查看了一下错误日志. INFO | jvm | // :: | java.lang.OutOfMemoryError: Java heap spac ...

  3. 构建自己的PHP框架--定义ORM的接口

    在上一篇博客中,我们抽象出了Controller的基类,实现了页面的渲染和返回JSON字符串的功能. 那作为一个框架,我们现在还缺少什么?是的,大家应该已经注意到了,我们在这之前从来没有连接过数据库, ...

  4. geotrellis使用(十三)数据导入BUG解决方案说明

    Geotrellis系列文章链接地址http://www.cnblogs.com/shoufengwei/p/5619419.html 目录 前言 BUG说明 解决方案 总结 一.前言         ...

  5. 微软的坑:Url重写竟然会引起IIS内核模式缓存不工作

    万万没有想到!当初为了解决使用负载均衡时记录客户端IP地址的问题,在IIS URL Rewrite Module中增加了一条URL重写规则(详见迁入阿里云后遇到的Request.UserHostAdd ...

  6. Thymeleaf 模板的使用

    Thymeleaf是现代化服务器端的Java模板引擎,不同与JSP和FreeMarker,Thymeleaf的语法更加接近HTML,并且也有不错的扩展性.详细资料可以浏览官网.本文主要介绍Thymel ...

  7. hibernate笔记--单向一对多映射方法

    上一篇讲的是单向多对一的表关系,与单向一对多的关系正好相反,如下图所示关系: ,可以看出年级表和学生表是一对多的关系,一条年级信息对应多条学生信息,在hibernate中成为单向的一对多的映射关系,应 ...

  8. Win8.1安装mysql-installer-community-5.6.21.0.mis

    引言 我本机是win8.1,在官网下载的这个安装是32位和64位都能装,安装步骤参考:http://jingyan.baidu.com/article/67662997305dcd54d51b84d4 ...

  9. 【集合框架】JDK1.8源码分析HashSet && LinkedHashSet(八)

    一.前言 分析完了List的两个主要类之后,我们来分析Set接口下的类,HashSet和LinkedHashSet,其实,在分析完HashMap与LinkedHashMap之后,再来分析HashSet ...

  10. Sql Server之使用T_SQL创建,修改,查看数据库信息

    一.使用Transact_SQL创建数据库 Transact_SQL语法如下:  create database database_name   [ on     [primary]  [<fi ...