【百度 JavaScript API v3.0】LocalSearch 位置检索、Autocomplete 结果提示

news2024/11/23 21:20:07

地名检索移动到指定坐标

需求

在输入框中搜索,在下拉列表中浮动,右侧出现高亮的列表集。选中之后移动到指定坐标。

技术点

官网地址: JavaScript API - 快速入门 | 百度地图API SDK

开发文档:百度地图JSAPI 3.0类参考

实现

第一步:在public的index.html中引入

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

第二步:组件中使用

<template>
  <div style="display: flex">
    
    <div>
      <!-- 地图 -->
      <div id="map"></div>
      <!-- 搜索框 -->
      <div id="r-result">请输入:<input type="text" id="suggestId" size="20" value="百度" style="width:150px;" /></div>
    </div>

    <!-- 右侧高亮值列表 -->
    <ul class="list">
      <li v-for="(item,index) in list" :key="index">
        <p>{{ item.index }}: {{ item.val }}</p>
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      map: null,
      point: null,
      list: []
    };
  },
  mounted() {
    let that = this
    this.map = new BMap.Map("map");
    this.point = new BMap.Point(116.8414, 39.925)
    this.map.centerAndZoom(this.point, 17);
    this.map.enableScrollWheelZoom();
    
    //建立一个自动完成的对象
    var ac = new BMap.Autocomplete({    
      "input" : "suggestId",
      "location" : this.map
    });

    //鼠标hover下拉列表
    ac.addEventListener("onhighlight", function(e) {  
      let val = e.toitem.value
      that.list.push({
        index: e.toitem.index,
        val: val.province + val.city +  val.district +  val.street +  val.business
      })
    });

    // 鼠标点击下拉列表
    ac.addEventListener("onconfirm", function(e) {    
      var v = e.item.value;
      var keyword = v.province +  v.city +  v.district +  v.street + v.business;

      //清除地图上所有覆盖物
      that.map.clearOverlays();    

      //智能搜索
      var local = new BMap.LocalSearch(that.map, { 
        onSearchComplete: function (){
          var p = local.getResults().getPoi(0).point;    //获取第一个智能搜索的结果
          that.map.centerAndZoom(p, 18);
          that.map.addOverlay(new BMap.Marker(p));    //添加标注
        }
      });

      local.search(keyword);
    });
  },
};
</script>

<style>
#map {
  width: 300px;
  height: 300px;
}
</style>

解析

设置一个自动完成类

<input type="text" id="suggestId"" value="百度"/></div>
//建立一个自动完成的对象
var ac = new BMap.Autocomplete({    
  "input" : "suggestId",
  "location" : this.map
});

 下拉列表展示,悬浮后右侧展示高亮值的列表

//鼠标hover下拉列表
ac.addEventListener("onhighlight", function(e) {  
  let val = e.toitem.value
  that.list.push({
    index: e.toitem.index,
    val: val.province + val.city +  val.district +  val.street +  val.business
  })
});

 onhighlight事件的返回值e:

下拉列表显示后,点击某一项进行智能搜索

// 鼠标点击下拉列表
ac.addEventListener("onconfirm", function(e) {    
  var v = e.item.value;
  var keyword = v.province +  v.city +  v.district +  v.street + v.business;

  //清除地图上所有覆盖物
  that.map.clearOverlays();    

  //智能搜索
  var local = new BMap.LocalSearch(that.map, { 
    onSearchComplete: function (){
      var p = local.getResults().getPoi(0).point;    //获取第一个智能搜索的结果
      that.map.centerAndZoom(p, 18);
      that.map.addOverlay(new BMap.Marker(p));    //添加标注
    }
  });

  local.search(keyword);
});

 

 

 

圆形区域内检索

需求

在圆形区域内检索,每页5条搜索结果。遍历所有结果后得到全部结果,然后添加所有的marker点。

技术点

官网地址: JavaScript API - 快速入门 | 百度地图API SDK

开发文档:百度地图JSAPI 3.0类参考

实现

第一步:在public的index.html中引入

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

第二步:组件中使用

<template>
  <div>
    <div id="map"></div>
    <p>{{ info }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      map: null,
      point: null,
      info: ''
    };
  },
  mounted() {
    let that = this
    this.map = new BMap.Map("map");
    this.point = new BMap.Point(116.331398,39.897445)
    this.map.centerAndZoom(this.point, 17);
    this.map.enableScrollWheelZoom();
    
    // 范围
    var circle = new BMap.Circle(this.point, 1000, {
        fillColor:"blue", 
        strokeWeight: 1 ,
        fillOpacity: 0.3, 
        strokeOpacity: 0.3
    });
    that.map.addOverlay(circle);
    circle.disableMassClear();

    // 检索点
    var ResultArray = [];
    var local = new BMap.LocalSearch(that.map,{
      renderOptions : { 
        map : that.map,
      },
      pageCapacity : 5,
      onMarkersSet:function (array) { 
        console.log('标注添加完成后',array);
      },
      onInfoHtmlSet:function (LocalResultPoi) { 
        console.log('标注气泡内容创建后',LocalResultPoi);
      },
      onResultsHtmlSet:function (element) {
        console.log('结果列表添加完成后',element);
      },
      onSearchComplete : function(results) {
        console.log('检索完成后',results)

        // 获取当前搜索总共有多少条结果
        var totalPages = results.getNumPages();//总页数
        var currPage = results.getPageIndex();// 当前第几页
        if (currPage < totalPages - 1) {
            ResultArray.push(...local.getResults().Ir);
            local.gotoPage(currPage + 1); 
        } else {
            // 已经到达最后一页结果
            ResultArray.push(...local.getResults().Ir);
            that.map.clearOverlays();
            for (var store of ResultArray){
                var marker = new BMap.Marker(store.point);
                that.map.addOverlay(marker);
            }
            that.info = "全部结果有:" + ResultArray.length + "------原本搜索结果有:" + results.getNumPois() + "------最近检索poi条数:" + results.getCurrentNumPois()
        }
      },
      
    });
    local.searchNearby('餐饮',that.point,1000);

  },
};
</script>
<style>
#map {
  width: 1300px;
  height: 1300px;
}
</style>

解析

在地图中先绘制圆形区域

circle.disableMassClear(); 保留这块覆盖物不被删除

// 范围
var circle = new BMap.Circle(this.point, 1000, {
    fillColor:"blue", 
    strokeWeight: 1 ,
    fillOpacity: 0.3, 
    strokeOpacity: 0.3
});
that.map.addOverlay(circle);
circle.disableMassClear();

onMarkersSet 检索完成后

 

 onInfoHtmlSet 标注气泡内容创建后

 onMarkersSet 标注添加完成后

 获取当前搜索总共有多少条结果

pageCapacity : 5, 每页展示条数 

// 获取当前搜索总共有多少条结果
var totalPages = results.getNumPages();//总页数
var currPage = results.getPageIndex();// 当前第几页
if (currPage < totalPages - 1) {
    ResultArray.push(...local.getResults().Ir);
    local.gotoPage(currPage + 1); 
} else {
    // 已经到达最后一页结果
    ResultArray.push(...local.getResults().Ir);
    that.map.clearOverlays();
    for (var store of ResultArray){
        var marker = new BMap.Marker(store.point);
        that.map.addOverlay(marker);
    }
    that.info = "全部结果有:" + ResultArray.length + "------原本搜索结果有:" + results.getNumPois() + "------最近检索poi条数:" + results.getCurrentNumPois()
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/346773.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Pillow图像处理(PIL.Image类的详细使用)

文章目录Opencv、Matplotlib(plt)、Pillow(PIL)、Pytorch读取数据的通道顺序Python图像处理库&#xff08;PIL、Pillow、Scikit-image、Opencv&#xff09;Pillow 官方文档&#xff08;超详细&#xff0c;超推荐&#xff09;一、PIL库与Pillow库的区别二、Pillow库&#xff08;…

Vue3 目录结构

Vue3 目录结构 架构搭建 请确保你的电脑上成功安装 Node.js&#xff0c;本项目使用 Vite 构建工具&#xff0c;需要 Node.js 版本 > 12.0.0。 查看 Node.js 版本&#xff1a; node -v建议将 Node.js 升级到最新的稳定版本&#xff1a; 使用 nvm 安装最新稳定版 Node.js…

使用docker配置mysql主从复制

1.新建主服务器容器实例&#xff1a; docker run -p 3307:3306 --name mysql \ -v /docker/mysql/data:/var/lib/mysql \ -v /docker/mysql/conf:/etc/mysql/conf \ -v /docker/mysql/log:/var/log/mysql \ -e MYSQL_ROOT_PASSWORDroot \ -d mysql:5.7 设置容器卷之后&#xf…

Java网络编程之UDP和TCP套接字

文章目录一. 网络编程概述二. UDP网络编程1. UDP套接字2. UDP客户端回显服务器程序2.1 UDP回显服务器2.2 UDP客户端2.3 UDP实现查词典的服务器三. TCP网络编程1. TCP套接字2. TCP客户端回显服务器程序2.1 TCP回显服务器2.2 TCP客户端2.3 解决服务器无法同时出力多个客户端的问题…

牛客专访ChatGPT:2023校园招聘如何做?附校招趋势

春招在即&#xff0c;牛客作为新一代数智化校园招聘引领者&#xff0c;为大家采访了当下“顶流ChatGPT”&#xff0c;关于近几年校园招聘的变化及2023企业做校招的建议。以下&#xff0c;为“ChatGPT专访”实录。01. ChatGPT眼中近3年校园招聘的变化牛客&#xff1a;很高兴作为…

Unity Material详解

一、创建 二、属性 1.Shader:Unity内置了一些shader&#xff0c;用户自定义的shader也在这里出现. Edit: 可以编辑一些shader可编辑的内容&#xff0c;如一些属性. 2.Rendering Mode:渲染模式 Opaque-不透明-石头适用于所有的不透明的物体Cutout-镂空-破布透明度只有0%和100…

go语言环境配置 项目启动

一 安装go语言 go语言各个版本之间兼容性比较差。所以可能你需要安装固定的版本 1 安装最新版的go brew install go2 查看go可以安装的版本 brew search go3 安装指定版本的go brew install go1.134 查看安装的go语言的版本 go version5 查看go的安装路径 which go || w…

【软件测试】稳定性测试怎么做,这篇文章彻底讲透了~

稳定性对产品的重要性不言而喻。 而作为质量保障&#xff0c;在稳定性测试方面的探索也在不断演化。记得两年前我们做稳定性测试还是基于恒定的压力&#xff0c;7*24小时长时间运行&#xff0c;关注的指标无非是吞吐量TPS的抖动、响应时间的变化趋势&#xff0c;以及各种资源是…

《机器学习系统:设计和实现》读后感和一些思考

目录 计算图、编译器前端、编译器后端 计算图 计算图的作用 计算图的组成 静态计算图与动态计算图 编译器前端 IR中间表示 机器学习框架的中间表示 常见编译器前端优化方法 编译器后端 概述 通用硬件优化&#xff1a;算子拆分和算子融合 算子信息 数据精度和存储…

opencv访问图像(MAT)的属性

大家好&#xff0c;我是csdn的博主&#xff1a;lqj_本人 这是我的个人博客主页&#xff1a; lqj_本人的博客_CSDN博客-微信小程序,前端,python领域博主lqj_本人擅长微信小程序,前端,python,等方面的知识https://blog.csdn.net/lbcyllqj?spm1011.2415.3001.5343哔哩哔哩欢迎关注…

设计模式:装饰模式

1、装饰模式 1&#xff09;定义 动态&#xff08;组合&#xff09;地给一个对象增加一些额外的职责。就增加功能而言&#xff0c;Decorator模式比生成子类&#xff08;继承&#xff09;更为灵活&#xff08;消除重复代码&减少子类个数&#xff09;。 2&#xff09;动机&…

Harbor安装部署实战详细手册

文章目录前言一、安装docker二、安装docker-compose1.下载2.赋权3.测试三、安装harbor1.下载2.解压3.修改配置文件4.部署5.配置开机自启动6.登录验证7.补充说明四、harbor使用问题1.docker login问题&#xff1a;Error response from daemon: Get https://: http: server gave …

Ubuntu 安装 Qt5.7.0

下载 地址&#xff1a;https://download.qt.io/https://download.qt.io/ 文件夹说明&#xff1a; snapshots&#xff1a;预览版&#xff0c;该文件夹中包含最新的测试版本。 online&#xff1a;在线安装包。 official_releases&#xff1a;最终发布版。 new_archive&#…

netcore构建webservice以及调用的完整流程

目录构建前置准备编写服务挂载服务处理SoapHeader调用添加服务调用服务补充内容构建 前置准备 框架版本要求&#xff1a;netcore3.1以上 引入nuget包 SoapCore 编写服务 1.编写服务接口 示例 using System.ServiceModel;namespace Services;[ServiceContract(Namespace &…

Elasticsearch 安装(二)

目录前言一、Linux 安装1、下载安装包⑴、选择需要的安装包⑵、下载解压到安装目录2、查看解压后目录结构3、启动 Elasticsearch⑴、正常启动流程⑵、启动过程遇到的问题①、启动报错②、创建运行 Elasticsearch 的用户&#xff0c;启动成功&#xff0c;但无法访问③、停止Elas…

【pytorch框架】对模型知识的基本了解

文章目录TensorBoard的使用1、TensorBoard启动&#xff1a;2、使用TensorBoard查看一张图片3、transforms的使用pytorch框架基础知识1 nn.module的使用2 nn.conv2d的使用3、池化(MaxPool2d)4 非线性激活5 线性层6 Sequential的使用7 损失函数与反向传播8 优化器9 对现有网络的使…

Flink X Hologres 构建企业级 Streaming Warehouse

摘要&#xff1a;本文整理自阿里云资深技术专家&#xff0c;阿里云 Hologres 负责人姜伟华&#xff08;果贝&#xff09;&#xff0c;在 FFA 实时湖仓专场的分享。本篇内容主要分为四个部分&#xff1a;实时数仓分层的技术需求阿里云一站式实时数仓 Hologres 介绍Flink x Holog…

30个题型+代码(冲刺2023蓝桥杯)

愿意的可以跟我一起刷&#xff0c;每个类型做1~5题 &#xff0c;4月前还可以回来系统复习 2月13日 ~ 3月28日&#xff0c;一共32天 一个月时间&#xff0c;0基础省三 --> 省二&#xff1b;基础好点的&#xff0c;省二 --> 省一 目录 &#x1f33c;前言 &#x1f33c…

1.1配置单区域OSPF

实验1:配置单区域OSPF[1] 1.实验目的 实现单区域OSPF的配置描述OSPF在多路访问网络中邻居关系建立的过程2.实验拓扑 单区域的OSPF实验拓扑如图1-2所示。 图1-2 配置单区域OSPF 3.实验步骤 IP地址的配置[2] R1的配置

Framebuffer驱动程序框架

Framebuffer驱动程序框架 文章目录Framebuffer驱动程序框架一、 怎么编写字符设备驱动程序二、 Framebuffer驱动程序框架三、 怎么编写Framebuffer驱动程序致谢一、 怎么编写字符设备驱动程序 驱动主设备号构造file_operations结构体&#xff0c;填充open/read/write等成员函数…