首页 > 其他分享 >记一次百度地图JSAPI的使用

记一次百度地图JSAPI的使用

时间:2024-12-24 11:44:03浏览次数:3  
标签:map point JSAPI 地图 BMap 坐标 new 百度 location

百度开放平台

百度地图开放平台

  • 注册登录百度账号
  • 进入控制台
  • 创建应用,复制你的key(自己找,就在网页上,找不到就转行吧)

页面代码

引入百度地图JS代码

<script type="text/javascript" src="https://api.map.baidu.com/api?v=3.0&ak=你的key"></script>

在哪引都没事,无论你是Vue项目还是普通的web项目,只要你最后能访问到里面的对象就可以

地图显示区域

<div id="map"></div>

初始化地图

// 这里第一个参数map要么是一个选择器,要么是一个dom元素,具体是什么我也没看,反正就这样用
let map = new BMap.Map("map", {
	coordsType: 5 // coordsType指定输入输出的坐标类型,3为gcj02坐标,5为bd0ll坐标,默认为5。
	// 指定完成后API将以指定的坐标类型处理您传入的坐标
});          // 创建地图实例
let point;
if(userStore.location.point){
	point = new BMap.Point(userStore.location.point.lng,userStore.location.point.lat);  // 创建点坐标
}else{
	point = new BMap.Point(116.404, 39.915);  // 创建点坐标
}

map.centerAndZoom(point, 15);                 // 初始化地图,设置中心点坐标和地图级别
map.enableScrollWheelZoom(true);     //开启鼠标滚轮缩放

let marker = new BMap.Marker(point);        // 创建标注
map.addOverlay(marker);                     // 将标注添加到地图中

// 这几个控制组件是我复制文档里的,具体是什么自己控制变量法试一下
map.addControl(new BMap.NavigationControl());
map.addControl(new BMap.ScaleControl());
map.addControl(new BMap.OverviewMapControl());
map.addControl(new BMap.MapTypeControl());
map.setCurrentCity("北京"); // 仅当设置城市信息时,MapTypeControl的切换功能才能可用

手动搜索并选择地点

local = new BMap.LocalSearch(map, { //智能搜索
	onSearchComplete: (e) => {
		// 这里参数e就是搜索结果,e.qk就是具体的搜索结果列表,其他当然还包含其他数据,自己输出看看
		// 想办法保存下来,我是在Vue里用的,所以这里这样存
		searchResult.value = e.qk;
	}
});
local.search(location.value);
function onClickSearchResult(item) {
    userStore.setLocation(item) // 记录到pinia里
    showBottom.value = false // 隐藏搜索面板

    map.clearOverlays();    //清除地图上所有覆盖物
    var pp = item.point;    //获取第一个智能搜索的结果
    map.centerAndZoom(pp, 18);
    map.addOverlay(new BMap.Marker(pp));    //添加标注
}

搜索结果里的qk属性是一个数组,里面一个个对象包含地点的名称,区域代码,经纬度等信息,自己想办法用

我的完整代码

因为我用的Vue,所以开始的脚本引入我放在index.html文件里了,这里不展示

<template>
    <div class="map-container">
        <div id="map"></div>
        <van-floating-bubble axis="xy" icon="location" magnetic="x" @click="showBottom = true" />
        <!-- 圆角弹窗(底部) -->
        <van-popup v-model:show="showBottom" round position="bottom" :style="{ height: '50%' }">
            <van-cell inset>
                <van-field v-model="location" label="你的位置:" label-width="auto" placeholder="请输入你的位置"
                    @update:model-value="onUpdateLocation" />
            </van-cell>

            <van-list v-model:loading="loading" finished-text="没有更多了" :disabled="true">
                <van-cell inset v-for="item in searchResult" :key="item.uid" :title="item.title" :label="item.address"
                    @click="onClickSearchResult(item)" />
            </van-list>
        </van-popup>
    </div>
</template>
<script lang="js" setup>
import { onMounted, ref } from 'vue';
import { useRouter } from 'vue-router'
import lodash from 'lodash'
import { useUserStore } from '@/stores/user';
const userStore = useUserStore()
const router = useRouter()
const showBottom = ref(false)
const location = ref(userStore.location?.title)
const searchResult = ref([])
const loading = ref(false)
let map;
let point;
let marker;
let local;
function onUpdateLocation() {
    if (location.value.length < 2) {
        searchResult.value = []
        return
    }
    searchLocationThrottle()
}
function searchLocation() {
    local = new BMap.LocalSearch(map, { //智能搜索
        onSearchComplete: (e) => {
            searchResult.value = e.qk;
        }
    });
    local.search(location.value);
}
const searchLocationThrottle = lodash.throttle(searchLocation, 500)

function onClickSearchResult(item) {
    userStore.setLocation(item)
    showBottom.value = false
    
    map.clearOverlays();    //清除地图上所有覆盖物
    var pp = item.point;    //获取第一个智能搜索的结果
    map.centerAndZoom(pp, 18);
    map.addOverlay(new BMap.Marker(pp));    //添加标注
}
onMounted(() => {
    map = new BMap.Map("map", {
        coordsType: 5 // coordsType指定输入输出的坐标类型,3为gcj02坐标,5为bd0ll坐标,默认为5。
        // 指定完成后API将以指定的坐标类型处理您传入的坐标
    });          // 创建地图实例  
    if(userStore.location.point){
        point = new BMap.Point(userStore.location.point.lng,userStore.location.point.lat);  // 创建点坐标  
    }else{
        point = new BMap.Point(116.404, 39.915);  // 创建点坐标  
    }

    map.centerAndZoom(point, 15);                 // 初始化地图,设置中心点坐标和地图级别  
    map.enableScrollWheelZoom(true);     //开启鼠标滚轮缩放

    marker = new BMap.Marker(point);        // 创建标注    
    map.addOverlay(marker);                     // 将标注添加到地图中 

    map.addControl(new BMap.NavigationControl());
    map.addControl(new BMap.ScaleControl());
    map.addControl(new BMap.OverviewMapControl());
    map.addControl(new BMap.MapTypeControl());
    map.setCurrentCity("北京"); // 仅当设置城市信息时,MapTypeControl的切换功能才能可用   

    /* var opts = {
        width: 200,     // 信息窗口宽度
        height: 100,     // 信息窗口高度
        title: "海底捞王府井店", // 信息窗口标题
        enableMessage: true,//设置允许信息窗发送短息
        message: "亲耐滴,晚上一起吃个饭吧?戳下面的链接看下地址喔~"
    } */
    // 这只能在PC用
    /* var infoWindow = new BMap.InfoWindow("地址:北京市东城区王府井大街88号乐天银泰百货八层", opts);  // 创建信息窗口对象 
    marker.addEventListener("click", function () {
        map.openInfoWindow(infoWindow, point); //开启信息窗口
    }); */

})

</script>
<style lang="css" scoped>
.map-container,
#map {
    width: 100%;
    height: 100%;
}

.van-nav-bar {
    background-color: transparent;
    pointer-events: none;
}

.van-nav-bar .van-icon {
    color: #000 !important;
}
</style>

标签:map,point,JSAPI,地图,BMap,坐标,new,百度,location
From: https://www.cnblogs.com/immengxin/p/18626982

相关文章

  • 问答网站地图优化:提升用户体验与搜索引擎效率的艺术
    在当今信息爆炸的时代,问答网站作为用户获取知识和解答疑问的重要平台,其内容的组织与呈现方式对于提升用户体验和搜索引擎效率至关重要。网站地图作为网站的导航蓝图,不仅帮助用户快速定位所需信息,还是搜索引擎理解和索引网站内容的关键工具。本文将深入探讨问答网站地图的优化......
  • 天地图接口Python代码详解
    天地图是中国国家测绘地理信息局推出的一款权威、全面的在线地理信息系统,提供了丰富的卫星影像、地形、矢量图等地图资源。开发者可以通过天地图提供的API接口,实现地图的展示、搜索、定位等功能。本文将详细介绍如何使用Python调用天地图接口,包括理论概述和详细的代码示例。一、......
  • 你有做过基于地图的应用吗?
    是的,我曾经参与过基于地图的前端应用开发。这类应用通常涉及到地图的展示、用户交互、地点搜索、路径规划等功能。以下是一些我在开发基于地图的应用时的主要经验和所用技术:地图库选择:常见的JavaScript地图库包括GoogleMapsJavaScriptAPI、MapboxGLJS、Leaflet等。这些......
  • 百度机器翻译SDK实验
    软件构造实验作业实验名称:班级:信2205-3    学号:20223753    姓名:邓睿智 实验一:百度机器翻译SDK实验一、实验要求实验一:百度机器翻译SDK实验(2024.11.15日完成)  任务一:下载配置百度翻译Java相关库及环境(占10%)。    任务二:了解百度翻译相关功能并进行总结......
  • Hexo Next主题集成百度统计
    个人博客地址:HexoNext主题集成百度统计|一张假钞的真实世界。首先,需要在百度统计控制台新增自己的站点。点击“新增网站”按钮:按照要求输入相关信息并保存,页面跳转至代码获取页面。从代码页面中拷贝网站的ID:......
  • 智能工厂的设计软件 三种处理单元(NPU/GPU/CPU)及其在深度学习框架中的作用 之3(百度文库
    Q&A(百度文库)Q1、今天聊聊“智能工厂的设计软件”中的三种处理单元(NPU/GPU/CPU)。一般来说提起这三者就不得不说“深度学习”。那我们就从这里开始。请先给出一个程序例子来说明NPU如何协作CPU和GPU来完成深度学习任务在深度学习任务中,NPU(神经网络处理单元)、GPU(图形处理单元)......
  • 智能工厂的设计软件 三种处理单元(NPU/GPU/CPU)及其在深度学习框架中的作用 之4(百度文库
    Q10、前面的所有编程都是利用三种处理单元(NPU/GPU/CPU)来建造深度学习模型的例子,并且细节度和复杂度,即难度逐步增加,可以分别视为在软件架构、程序框架和编码实现三个不同的阶段要考虑的不同问题(以不同的视角在不同的立场上)。下面我们来看看深度学习本身。本人认为,深度学习......
  • 百度云磁盘CDS、对象存储BOS技术深度解析
    在BAT中,百度在公有云也有很多技术创新。比如2013年引起广泛关注的ARM存储服务器就是一个很好的例子。最近两年,百度云开始发力,其云存储体系有诸多创新之处。目前百度云存储形成了以块存储、对象存储、文件存储为核心,VPN/专线、数据导入、存储网关为支撑的产品体系。其中百度对象存......
  • 每日一道算法题之宽度优先遍历之地图分析
    classSolution{publicintmaxDistance(int[][]grid){//思路:宽度优先遍历。//第一层有一个或者多个。单源+多源。//遍历到每一层的时候,看当前层有多少个数,然后就操作多少次。intm=grid.length;intn=grid[0].len......
  • 【Unity功能】动态锚点缩放平移UI(可用于缩放移动图片或者地图等)
    前言在UnityUGUI开发中,我们经常需要实现图片缩放功能,传统的缩放方式通常是以UI元素的中心点为基准进行缩放,这种方式在某些场景下可能不够直观,本文将介绍一种以鼠标位置为基准点的动态锚点缩放方案,让缩放效果更加自然和符合用户预期。一、效果演示二、制作过程简言该......