react hooks 高德地图的应用

一、准备

1.登录控制台

登录 高德开放平台控制台,如果没有开发者账号,请 注册开发者。

2.创建 key

进入应用管理,创建新应用,新应用中添加 key,服务平台选择 Web端(JS API)。

3.获取 key 和密钥

创建成功后,可获取 key 和安全密钥。

 

二、初始化地图

1.下载依赖包

npm i @amap/amap-jsapi-loader --save

2.引入 JS API  Loader

import AMapLoader from '@amap/amap-jsapi-loader'; 

3.新建 MapContainer.jsx 文件

在项目中新建 MapContainer.jsx 文件,用作地图组件脚本。

import AMapLoader from '@amap/amap-jsapi-loader';
import { useEffect } from 'react';
import styles from './MapContainer.css';export default function MapContainer() {let map: any = null;useEffect(() => {AMapLoader.load({key: 'key', // 申请好的Web端开发者Key,首次调用 load 时必填version: '2.0', // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15}).then((AMap: any) => {//创建地图实例map = new AMap.Map('container', {// 设置地图容器idviewMode: '2D', // 是否为3D地图模式zoom: 10, // 初始化地图级别center: [116.397428, 39.90923], // 初始化地图中心点位置});};).catch((e) => {console.log(e);});return () => {map?.destroy(); //销毁地图};}, []);return (<divid="container"className={styles.container}style={{ height: '800px' }}></div>);
}

4.新建 MapContainer.less 文件

在项目中新建 MapContainer.less 文件,用作地图组件样式。

.container{padding: 0px;margin: 0px;width: 100%;
}

5.效果图

三、插件的使用

1.基础插件引入

AMap.plugin(['AMap.Scale', 'AMap.Geolocation', 'AMap.ToolBar', 'AMap.ControlBar'],function () {//在回调函数中实例化插件,并使用插件功能map.addControl(new AMap.Scale()); //比例尺map.addControl(new AMap.ToolBar()); //缩放工具条map.addControl(new AMap.ControlBar()); //控制罗盘map.addControl(new AMap.Geolocation({position: {bottom: '80px',left: '15px',},}),); //定位控件,用来获取和展示用户主机所在的经纬度位置},
);

更多插件参考官方文档~

 2.信息窗体 InfoWindow

默认信息窗体封装了关闭按钮,使用 API 默认的信息窗体样式,这个时候只需要对 InfoWindow 设定 content 属性即可,content 可以是 dom 对象,也可以是 html 识别的字符串。

        //定义信息窗口let infoWindow: any = null;//打开信息窗体map.on('click', function (e: any) {//构建信息窗体中显示的内容let info = [];info.push('<div class=\'input-card content-window-card\'><div><img style="float:left;width:67px;height:16px;" src=" https://webapi.amap.com/images/autonavi.png "/></div> ',);info.push('<div style="padding:7px 0px 0px 0px;"><h4>高德软件</h4>');info.push("<p class='input-item'>电话 : 010-84107000   邮编 : 100102</p>",);info.push("<p class='input-item'>地址 :北京市朝阳区望京阜荣街10号首开广场4层</p></div></div>",);infoWindow = new AMap.InfoWindow({content: info.join(''), //使用默认信息窗体框样式,显示信息内容});infoWindow?.open(map, e.lnglat);});// 关闭信息窗体// infoWindow?.close();

3.右键菜单 ContextMenu

        //添加右键点击事件let contextMenu: any = null;//地图绑定鼠标右击事件——弹出右键菜单map.on('rightclick', function (e: any) {let contextMenuPositon: any = null;contextMenu = new AMap.ContextMenu({ isOpen: false });//右键放大contextMenu?.addItem('放大一级',function () {map.zoomIn();},0,);//右键缩小contextMenu?.addItem('缩小一级',function () {map.zoomOut();},1,);//右键显示全国范围contextMenu?.addItem('缩放至全国范围',function () {map.setZoomAndCenter(4, [108.946609, 34.262324]);},2,);//右键添加Marker标记contextMenu?.addItem('添加标记',function () {new AMap.Marker({map: map,position: contextMenuPositon, //基点位置});},3,);contextMenu?.open(map, e.lnglat);contextMenuPositon = e.lnglat;});// 关闭右键弹框// contextMenu?.close();

4.输入提示与 POI 搜索示例

首先需要设置一下密钥

window._AMapSecurityConfig = {securityJsCode: 'b4fcd93bbbaead6bcc38957a0f0e3df6',
};

创建id为tipinput的输入框 

<input id="tipinput" /> 

配置 

        // 搜索let auto = new AMap.AutoComplete({ input: 'tipinput' });let placeSearch = new AMap.PlaceSearch({map: map,}); //构造地点查询类auto.on('select', function (e: any) {placeSearch.setCity(e.poi.adcode);placeSearch.search(e.poi.name); //关键字查询查询}); //注册监听,当选中某条记录时会触发

 

四、完整代码

1.效果图

2.代码 

import AMapLoader from '@amap/amap-jsapi-loader';
import { Input } from 'antd';
import { useEffect } from 'react';
import './MapContainer.less';
window._AMapSecurityConfig = {securityJsCode: 'b4fcd93bbbaead6bcc38957a0f0e3df6',
};
export default function MapContainer() {let map: any = null;const createMap = (AMap: any) => {//1.创建地图实例map = new AMap.Map('container', {// 设置地图容器idviewMode: '2D', // 是否为3D地图模式zoom: 10, // 初始化地图级别center: [116.397428, 39.90923], // 初始化地图中心点位置resizeEnable: true, // 调整大小启用//   layers: [new AMap.TileLayer.Satellite()], //设置图层,可设置成包含一个或多个图层的数组//   mapStyle: 'amap://styles/whitesmoke', //设置地图的显示样式});// 2.加载插件AMap.plugin(['AMap.ToolBar','AMap.Scale','AMap.HawkEye','AMap.ControlBar','AMap.MapType','AMap.Geolocation','AMap.ContextMenu','AMap.AutoComplete','AMap.PlaceSearch',],function () {//在回调函数中实例化插件,并使用插件功能map.addControl(new AMap.ControlBar({position: {top: '10px',right: '10px',},}),); //控制罗盘map.addControl(new AMap.HawkEye()); //鹰眼map.addControl(new AMap.Geolocation({position: {bottom: '160px',left: '20px',},}),); //定位控件,用来获取和展示用户主机所在的经纬度位置map.addControl(new AMap.ToolBar({position: {bottom: '80px',left: '21px',},}),); //缩放工具条map.addControl(new AMap.Scale({position: {bottom: '35px',left: '20px',},}),); //比例尺// map.addControl(//   new AMap.MapType({//     position: {//       bottom: '300px',//       right: '0',//     },//   }),// ); //类别切换控件//3.添加右键点击事件let contextMenu: any = null;//4.信息窗口let infoWindow: any = null;//地图绑定鼠标右击事件——弹出右键菜单map.on('rightclick', function (e: any) {infoWindow?.close(); //清空点击事件弹框let contextMenuPositon: any = null;contextMenu = new AMap.ContextMenu({ isOpen: false });//右键放大contextMenu?.addItem('放大一级',function () {map.zoomIn();},0,);//右键缩小contextMenu?.addItem('缩小一级',function () {map.zoomOut();},1,);//右键显示全国范围contextMenu?.addItem('缩放至全国范围',function () {map.setZoomAndCenter(4, [108.946609, 34.262324]);},2,);//右键添加Marker标记contextMenu?.addItem('添加标记',function () {new AMap.Marker({map: map,position: contextMenuPositon, //基点位置});},3,);contextMenu?.open(map, e.lnglat);contextMenuPositon = e.lnglat;});//打开信息窗体map.on('click', function (e: any) {contextMenu?.close(); //关闭右键弹框//构建信息窗体中显示的内容let info = [];info.push('<div class=\'input-card content-window-card\'><div><img style="float:left;width:67px;height:16px;" src=" https://webapi.amap.com/images/autonavi.png "/></div> ',);info.push('<div style="padding:7px 0px 0px 0px;"><h4>高德软件</h4>');info.push("<p class='input-item'>电话 : 010-84107000   邮编 : 100102</p>",);info.push("<p class='input-item'>地址 :北京市朝阳区望京阜荣街10号首开广场4层</p></div></div>",);infoWindow = new AMap.InfoWindow({content: info.join(''), //使用默认信息窗体框样式,显示信息内容});infoWindow?.open(map, e.lnglat);});// 4.搜索let auto = new AMap.AutoComplete({ input: 'tipinput' });let placeSearch = new AMap.PlaceSearch({map: map,}); //构造地点查询类auto.on('select', function (e: any) {placeSearch.setCity(e.poi.adcode);placeSearch.search(e.poi.name); //关键字查询查询}); //注册监听,当选中某条记录时会触发},);};const onCatch = (e: any) => {console.log(e);};const mountMap = () => {map?.destroy(); //销毁地图};useEffect(() => {AMapLoader.load({key: 'e558ae3e565bc8f545a98d88794aada5', // 申请好的Web端开发者Key,首次调用 load 时必填version: '2.0', // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15plugins: [], // 需要使用的的插件列表,如比例尺'AMap.Scale'等}).then(createMap).catch(onCatch);return mountMap;}, []);return (<div className="map"><div id="container" style={{ height: '800px' }}></div><Input id="tipinput" placeholder="请输入搜索内容" /></div>);
}

3.样式 

.map {position: relative;.container {padding: 0px;margin: 0px;width: 100%;}#tipinput {position: absolute;left: 10px;top: 10px;width: 200px;}.amap-sug-result {z-index: 9999;visibility: visible;}
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

游戏服务器开发资源群共享

大家好&#xff0c;我邀请了来自腾讯和多多自走棋等多个爆款游戏项目的主程序和相关核心项目负责人建立的一个游戏服务器知识付费群&#xff1a; 相关社区活动请参考社区消息 &#xff1a; https://bbs.csdn.net/topics/617906497https://bbs.csdn.net/topics/617906497

VUE+bpmn.js实现工作流

1、安装bpmn.js npm install bpmn-js7.3.1 // 我安装的版本是7.3.1npm install bpmn-js-properties-panel0.37.2npm install bpmn-moddle7.1.3 npm install --save camunda-bpmn-moddle 2、配置axios&#xff0c;在main.js中引入axios import axios from axiosVue.proto…

【JAVA基础】JVM之类加载--双亲委派机制

目录 1. 类加载的过程描述&#xff1a;看图&#xff1a;解释&#xff1a; 2. 那么类加载器都有哪些呢3. 双亲委派机制3.1 双亲委派机制的过程3.2 图看委派过程3.3 为什么要设计双亲委派机制 4. 自定义类加载器4.1 如何定义自己的类加载器&#xff1f; 1. 类加载的过程 描述&am…

宋仕强论道之华强北购物中心shopping mall(四十一)

购物中心shopping mall是上世纪在美国流行传到我国的概念&#xff0c;即很大的综合性的百货日用品交易中心&#xff0c;服务覆盖半径大概是周边3-5公里或者半个小时车程的居民&#xff0c;&#xff08;美国地广人稀服务的范围会更大&#xff09;&#xff0c;作为一个大型商业综…

这些代码对比工具,你都知道吗?屎山别怕

在程序开发的过程中&#xff0c;程序员会经常对源代码以及库文件进行代码对比&#xff0c;在这篇文章里我们向大家介绍六款程序员常用的代码比较工具 WinMerge WinMerge是一款运行于Windows系统下的文件比较和合并工具&#xff0c;使用它可以非常方便地比较多个文档内容&#…

odoo17基础培训1-odoo开发基础知识准备以及odoo17开发环境安装

odoo17基础培训 一、odoo开发基础知识准备以及odoo17开发环境安装 1、odoo是什么&#xff1f; 当我介绍客户使用odoo系统作为业务管理平台时&#xff0c;有时会被问到Odoo是什么&#xff1f; 简单点&#xff0c;可以这么说&#xff1a; Odoo是一套完整的系统&#xff0c;是…

深入探讨:开发连锁餐饮APP的关键技术要点

时下&#xff0c;开发一款功能强大、用户友好的连锁餐饮APP成为许多餐饮企业的当务之急。在本文中&#xff0c;我们将深入探讨开发连锁餐饮APP的关键技术要点&#xff0c;涵盖了前端、后端以及数据库等方面。 一、前端开发 前端是用户与APP交互的入口&#xff0c;因此设计良好…

Oladance、南卡、Cleer开放式耳机怎么样?全方位测评大PK!

​开放式耳机作为新兴的音频设备领域中备受欢迎的选择&#xff0c;但市场上琳琅满目的产品汇集了质量千差万别的耳机&#xff0c;其中存在着一些粗制滥造的产品。身为一位音频设备测评博主&#xff0c;我经常收到有关哪个品牌的开放式耳机质量好的疑问。面对市面上众多选择&…

JAVA微信公众号开发平台源码带数据库

JAVA微信公众号开发平台源码带数据库 前台框架: easyui 后台框架: SpringMVChibernate

Proteus仿真stm32f103r6输出PWM/正弦波

资料下载地址&#xff1a;Proteus仿真stm32f103r6输出PWM/正弦波 一、仿真图 Proteus仿真stm32f103r6输出PWM/正弦波 二、程序 #include "pbdata.h"u16 fre; void RCC_Configuration(void); void GPIO_Configuration(void); void TIM3_Configuration();void Dela…

C++学习笔记——继承和动态内存分配

目录 一、继承 二、动态内存分配 三、继承的细节 四、动态内存分配细节 五、一个动物园管理系统 继承和动态内存分配是C中两个重要的概念 一、继承 继承是C中面向对象编程的一个重要特性&#xff0c;它允许我们创建一个新类&#xff0c;该类从现有的类中继承属性和方法&…

oracle-事务一系列理解

一个事务开始后&#xff0c;会被分配一个唯一的id号&#xff0c;xid&#xff0c;xid不仅是一个编号也是一个地址。 事务表 存在undo表空间的某一个段的段头块&#xff0c;最多存放47个事务&#xff0c;事务开始的时候&#xff0c;先将信息写入这个表&#xff0c;所以一个undo段…