这里 solr 这块主要说说如何实现附近功能,主要实现的方法有下面几种

1.使用LatLonType(用于平面坐标,而不是大地坐标)版本比较老 好像不怎么用了

2.SpatialRecursivePrefixTreeFieldType(缩写为RPT)  我用的就是这个 下面主要讲这个部分

3.BBoxField(用于边界索引查询)  没用这个 具体的还不太了解

因为我主要使用的是第2种方式来做的 所以主要写第2种方式RPT

首先的话需要在solr的配置文件中加上经纬度的配置 比如我的经纬度起的名称叫latitude_longitude  那么在配置中就需要加上这个的配置

<field name="latitude_longitude" type="location_rpt" indexed="true" stored="true"/>

<fieldType name="location_rpt" class="solr.SpatialRecursivePrefixTreeFieldType"  geo="true" distErrPct="0.025" maxDistErr="0.000009" units="degrees" />

这里的type类型为location_rpt  然后下面的class引用就是我们的第2种-——SpatialRecursivePrefixTreeFieldType

对solr.SpatialRecursivePrefixTreeFieldType的配置说明:SpatialRecursivePrefixTreeFieldType 用于深度遍历前缀树的FieldType,主要用于获得基于Lucene中的RecursivePrefixTreeStrategy。

geo默认为true,值为true的情况下坐标基于球面坐标系,采用Geohash的方式;值为false的情况下坐标基于2D平面的坐标系,采用Euclidean/Cartesian的方式。

distErrPct 定义非Point图形的精度,范围在0-0.5之间。该值决定了非Point的图形索引或查询时的level(如geohash模式时就是geohash编码的长度)。当为0时取maxLevels,即精度最大,精度越大将花费更多的空间和时间去建索引。

maxDistErr/maxLevels:maxDistErr

定义了索引数据的最高层maxLevels,上述定义为0.000009,根据 GeohashUtils.lookupHashLenForWidthHeight(0.000009, 0.000009)算出编码长度为11位,精度在1米左右,直接决定了Point索引的term数。maxLevels优先级高于maxDistErr, 即有maxLevels的话maxDistErr失效。详见SpatialPrefixTreeFactory.init()方法。不过一般使用 maxDistErr。
units    单位是degrees。

接下来经纬度的数据从数据库读取出来 会有一个精度和一个纬度的字段,而在solr当中我们需要把这2个字段组合在一起 可以使用2种表达方式  比如114.31,30.52 或者114.31 30.52  一种是使用逗号隔开,另一种是使用空格的方式隔开 这里要记住一点 精度和纬度不要弄反了 不然会报错的  我之前就是因为把这2个值组合在一起写反了 然后报的异常信息:

Can't parse point '30.570000 114.020000' because: Bad Y value 114.02 is not in boundary Rect(minX=-180.0,maxX=180.0,minY=-90.0,maxY=90.0)

报错也非常的明显 就是超出了正常范围的值。所以在这里提一个醒 注意一下就行了。

接下来看代码

Map<String, Object> params = new HashMap<String, Object>(); // 查询参数solrServer = SolrServerClient.getInstance(ConstantUtil.getResourceString("solr_core_map2"));params.put("keyword", queryString);params.put("pageNo", pageNo);params.put("pageSize", pageSize);params.put("facet", true); // 分类统计数量params.put("facet.mincount", 1); // 至少有一条记录的分类才返回params.put("facet.field", new String[] {"instrSort"});if (!StringUtil.isNull(Latitude_longitude)) {params.put("fq", "{!geofilt}");//距离过滤函数params.put("pt", Latitude_longitude);//当前经纬度params.put("sfield", "latitude_longitude");  //经纬度的字段params.put("d", 30+""); //就近 30 km的所有数据params.put("sort", "geodist() asc");//距离排序params.put("fl","*,dist:geodist()");//返回的距离数据
        }params.put("defType", "edismax");params.put("qf", "instrName^1.5  text^1");params.put("mm", "2<70% 4<-45% 7<-30%");params.put("pf", "instrName^1.5");// 高亮params.put("hl", true);params.put("hl.fl", "instrName");params.put("hl.simple.pre", "<em style=\"color: #e72028;font-style: normal;\">");params.put("hl.simple.post", "</em>");params.put("resultClass", SearchOrgnInstr.class); // 指定返回结果的类型Map queryResult =  solrServer.query(params);return queryResult;

主要是这段代码

 if (!StringUtil.isNull(Latitude_longitude)) {params.put("fq", "{!geofilt}");//距离过滤函数params.put("pt", Latitude_longitude);//当前经纬度params.put("sfield", "latitude_longitude");  //经纬度的字段params.put("d", 30+""); //就近 30 km的所有数据params.put("sort", "geodist() asc");//距离排序params.put("fl","*,dist:geodist()");//返回的距离数据}

最后返回的应该就是你需要的数据了。数据出来了,那怎么在地图上去绘制点了。请看下一章节

转载于:https://www.cnblogs.com/w1995w/p/10558715.html

百度地图和solr展示资源和附近等功能的实现 二相关推荐

  1. 【百度地图API】暑假放假回老家——城市切换功能

    原文:[百度地图API]暑假放假回老家--城市切换功能 任务描述: 酸奶小妹放寒假啦,要从北京呼啦一下飞回重庆呢.现在百度地图API上不能直接切换城市,怎么办呢? 如何实现: 利用API先搜索到要去城 ...

  2. android开发百度地图坐标偏差,利用百度地图Android sdk高仿微信发送位置功能及遇到的问题...

    接触了百度地图开发平台半个月了,这2天试着模仿了微信给好友发送位置功能,对百度地图的操作能力又上了一个台阶 我在实现这个功能的时候,遇到一些困难,可能也是别人将会遇到的困难,特在此列出 1.在微信发送 ...

  3. 实现百度地图-区域高亮展示

    一.功能步骤 1. 创建springboot项目,并导入以下依赖 <dependencies><dependency><groupId>org.springfram ...

  4. 百度地图js轨迹展示

    <script type="text/javascript"     src="http://api.map.baidu.com/api?v=3.0&ak= ...

  5. 利用百度地图Android sdk高仿微信发送位置功能

    接触了百度地图开发平台半个月了,这2天试着模仿了微信给好友发送位置功能,对百度地图的操作能力又上了一个台阶    我在实现这个功能的时候,遇到一些困难,可能也是别人将会遇到的困难,特在此列出 1.在微 ...

  6. 百度地图实现普通地图、定位、周边搜索功能

    //--------------一下是普通地图的实现----------------------------------- 1:打开百度地图APi进去,如果没有注册过的需要注册,注册过的登录进入 2: ...

  7. 百度地图实现只展示某一个省份地图,点击市以后高亮

    一.弯路记录 刚开始走了弯路,各种百度以后使用的以下方法. 实现效果是将地图上当前省份以外的地方添加覆盖物,当前省份的地图可以缩小放大,遇到的问题是地图div边缘始终有一道细细的白边,未找到方法去除, ...

  8. 地图统计_博客 城市访问量统计并且通过Echarts+百度地图展示

    本篇讲解一下 如何在Vue 中使用 Echarts + 百度地图 统计 博客访问量 并且通过QQWry 解析 ip 地址 利用Echarts 展示出来 效果图如下: 1.纯真Ip地址库 QQWry 这 ...

  9. react项目使用百度地图API

    文章目录 前言 一.接入API 1.登录百度地图 2.创建应用,获取密钥 3.引入API 4.当作模块导入BMap 二.使用 1.引入 2.展示地图 三.效果展示 总结 前言 最近在开发一款react ...

最新文章

  1. Python PhantomJS 爬虫 示例
  2. 那些年,我的数据结构课设,现在满满的回忆!(现如今身处内卷之中,已经很难出现当初那份乐趣了)
  3. 【图像处理】——鼠标点击图像的一处,获得点击点的坐标值
  4. sprintf 、vsprintf 、_vsntprintf
  5. git reset与git revert比較
  6. vbs表白代码+整人代码,抖音vbscript表白代码
  7. Python 进阶之路
  8. android reshare.c病毒,恶意软件分析 URL链接扫描 免费在线病毒分析平台 | 魔盾安全分析...
  9. 需要缺少的Web组件才能加载,以及项目加载后显示“不可用”的解决方法
  10. latex参考文献编译不成功
  11. 基于 VisualStudio2019 的 ASP.NET 后台环境搭建
  12. MySQL如何复制表结构,及如何复制表内容,以及临时表
  13. [html] 你有使用过blockquote标签吗?说说它的用途有哪些?
  14. MTTF,MTBF,MTTF
  15. [BUUCTF-pwn] zer0ptts_2020_protrude
  16. FPS能重塑英雄联盟的辉煌吗?Valorant公测半年有什么优势和不足?
  17. PHP从基础到高级详细教程(完整版)
  18. 小米手机权限开启方法9
  19. wxPython控件大全
  20. OC10_数组的内存管理

热门文章

  1. CentOS6.X内核升级
  2. 2016打算做运维的人员必知必晓的知识
  3. 2016年3月8日----Javascript的函数
  4. mac osx vi 设置tab 四个空格
  5. Oracle数据库脚本学习:建用户、删用户、建表、改表、删表
  6. 如果要在mFC客户区添加控件怎么办
  7. spymemcached 的 useNagle 问题与 TCP/IP延迟发送数据
  8. 酷盘API C# 测试版
  9. LeetCode 775. Global and Local Inversions
  10. python openpyxl创建excel文件-python之openpyxl生成excel文件