@amap/amap-jsapi-loader实现高德地图嵌入React项目中,并且做到点击地图任意一处,获得它的经纬度

1.第一步要加入项目package.json中或者直接yarn install它都可以
想必大家应该都会

 "@amap/amap-jsapi-loader": "0.0.7"

2.加入项目中
关于接口获取key的接口 大家改成自己对应的项目请求方法

import React, { PureComponent } from 'react';
import { Input, Spin } from 'antd';
import AMapLoader from '@amap/amap-jsapi-loader';
import { services } from '@comall-backend-builder/core';

import './index.less';

const { api } = services;
const pfix = 'scal-select';
interface ScalSelectProps {
    onChange: (data: any) => void;
    /**
     * 当前值
     */
    value: any;
    row: any;
    /**
     * 坐标查询-按钮
     * 默认展示
     */
    showBtn: any;
}

interface ScalSelectStates {
    /**
     * 当前地图实例
     */
    map: any;
    /**
     * 地图api
     */
    AMap: any;
    /**
     * 位置标记
     */
    marker: any;
    /**
     * 当前选择位置经纬度
     */
    centerPosition: any[];
    loading: boolean;
}

export class ScalSelect extends PureComponent<ScalSelectProps, ScalSelectStates> {
    constructor(props: any) {
        super(props);
        this.state = {
            map: undefined,
            AMap: undefined,
            marker: undefined,
            centerPosition: [],
            loading: false,
        };
    }

    componentDidMount() {
        this.initMap();
    }
    initMap = () => {
        this.setState({ loading: true });
        api.get({}, { apiPath: '/admin/amap/config' }).then((result: any) => {
            AMapLoader.load({
                key: result.key, // 申请好的Web端开发者Key,首次调用 load 时必填
                version: '1.4.15', // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
                plugins: ['AMap.Marker', 'AMap.ToolBar', 'AMap.IndoorMap'], // 需要使用的的插件列表,如比例尺'AMap.Scale'等
            })
                .then((AMap: any) => {
                    let map = new AMap.Map('mapContainer', {
                        zoom: 13,
                    });
                    map.addControl(new AMap.ToolBar());
                    map.on('click', this.showInfoClick);
                    this.setState({ AMap, map, loading: false });
                    map.on('complete', this.mapEnd);
                })
                .catch((e: any) => {
                    console.log(e);
                });
        });
    };

    showInfoClick = (e: any) => {
        const lat = e.lnglat.lat;
        const lng = e.lnglat.lng;
        this.setState(
            {
                centerPosition: [lng, lat],
            },
            () => {
                this.changePosition();
            }
        );
    };
    mapEnd = () => {
        const { centerPosition } = this.state;
        if (centerPosition.length) {
            this.changePosition();
        }
    };
    changePosition = () => {
        const { AMap, map, centerPosition, marker } = this.state;
        //移除所有覆盖物
        if (marker) {
            map.remove(marker);
        }
        // 创建一个 Marker 实例:
        let newMarker = new AMap.Marker({
            icon: '//a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-default.png', // 添加 Icon 实例
            zoom: 18,
            position: centerPosition,
        });
        // 将创建的点标记添加到已有的地图实例:
        map.add(newMarker);
        // 缩放地图到合适的视野级别
        //  map.setFitView(newMarker);
        //地图中心点平移至指定点位置
        map.panTo(centerPosition);
        this.props.onChange(centerPosition);
        this.setState({
            AMap,
            map,
            marker: newMarker,
        });
    };

    render() {
        const { loading, centerPosition } = this.state;
        const longitudeAndLatitude = centerPosition && centerPosition.join(',');
        const innerName = {
            box: `${pfix}`,
            wrap: `${pfix}--wrap`,
            searchBox: `${pfix}--search_box`,
            searchBtn: `${pfix}--search_box_btn`,
        };
        return (
            <div className={innerName.box}>
                <Spin spinning={loading}>
                    <div className={innerName.searchBox}>
                        <Input
                            disabled={true}
                            value={longitudeAndLatitude}
                            placeholder={services.language.getText('qxzzb')}
                        />
                    </div>
                    <div className={innerName.wrap}>
                        <div className="map-container" id="mapContainer"></div>
                    </div>
                </Spin>
            </div>
        );
    }
}

效果图如下
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

厂家技术 最新钨蚀刻液的制作方法

网盘 https://pan.baidu.com/s/15ZAiUicstYEiFPvNKK72VA?pwd6u4x VCSEL芯片金薄膜蚀刻液及其蚀刻方法.pdf 废铝蚀刻液回收磷酸的方法.pdf 抑制二氧化硅蚀刻的无C蚀刻液.pdf 氮化硅和钨的选择性蚀刻液.pdf 用于在穿孔中选择性沉积钨的系统和方法.pdf 蚀刻液和使用了所述蚀刻液…

香橙派AIpro开发板评测:部署yolov5模型实现图像和视频中物体的识别

OrangePi AIpro 作为业界首款基于昇腾深度研发的AI开发板&#xff0c;自发布以来就引起了我的极大关注。其配备的8/20TOPS澎湃算力&#xff0c;堪称目前开发板市场中的顶尖性能&#xff0c;实在令人垂涎三尺。如此强大的板子&#xff0c;当然要亲自体验一番。今天非常荣幸地拿到…

【C++】BMP图片结构深度解析及其在C++中的操作与应用

引言 BMP&#xff08;Bitmap Image File&#xff09;是一种与设备无关的图像文件格式&#xff0c;它采用了一种非常直接的方式来存储图像数据&#xff0c;即按照图像的行和列顺序&#xff0c;逐像素地存储颜色值。由于其简单性和可移植性&#xff0c;BMP文件在图像处理、图像分…

看看这组B端规范,你就会感叹:钱真是万能的。

B端设计规范的作用和价值主要体现在以下几个方面&#xff1a; 统一视觉风格和用户体验&#xff1a;B端设计规范可以规定统一的视觉风格和用户界面&#xff0c;使得不同的产品和服务在外观和交互上保持一致&#xff0c;提升用户的使用体验和满意度。 提高产品开发效率&#xf…

Android Studio下载Gradle特别慢,甚至超时,失败。。。解决方法

使用Android studio下载或更新gradle时超级慢怎么办&#xff1f; 切换服务器&#xff0c;立马解决。打开gradle配置文件 修改服务器路径 distributionUrlhttps\://mirrors.cloud.tencent.com/gradle/gradle-7.3.3-bin.zip 最后&#xff0c;同步&#xff0c;下载&#xff0c;速…

【RAG检索增强生成】MaxKB:构建企业级知识库问答系统(Ollama+Qwen2)

目录 引言1、MaxKB概述1.1 定义与目标1.2 特点与优势 2、MaxKB原理3、MaxKB架构4、基于MaxKBOllamaQwen2搭建本地知识库4.1 环境准备4.2 部署MaxKB4.3 部署Ollama4.4 部署运行qwen24.5 知识库配置4.5.1登录 MaxKB 系统4.5.2上传文档4.5.3设置分段规则 4.6 模型配置4.7 创建应用…

一入“网贷”深似海:来自多名负债人的真实自述!

在温州&#xff0c;有个名叫小琴的25岁女孩&#xff0c;她的故事&#xff0c;是许多年轻人深陷网贷泥潭的一个缩影。小琴&#xff0c;一个普通的大学毕业生&#xff0c;两年的职场生涯并未能让她摆脱大学时期留下的网贷阴影。那时&#xff0c;她每月靠着1000元的生活费勉强维持…

注意!Vue.js 或 Nuxt.js 中请停止使用.value

大家好&#xff0c;我是CodeQi&#xff01; 一位热衷于技术分享的码仔。 当您在代码中使用.value时&#xff0c;必须每次都检查变量是否存在并且是引用。 这可能很麻烦&#xff0c;因为在运行时使用.value可能会导致错误。然而&#xff0c;有一个简单的解决方法&#xff0c;即…

力扣61. 旋转链表(java)

思路&#xff1a;用快慢指针找到最后链表k个需要移动的节点&#xff0c;然后中间断开节点&#xff0c;原尾节点连接原头节点&#xff0c;返回新的节点即可&#xff1b; 但因为k可能比节点数大&#xff0c;所以需要先统计节点个数&#xff0c;再取模&#xff0c;看看k到底需要移…

【Linux系统编程】深入剖析:四大IO模型机制与应用(阻塞、非阻塞、多路复用、信号驱动IO 全解读)

目录 概述&#xff1a; 1. 阻塞IO (Blocking IO) 2. 非阻塞IO (Non-blocking IO) 3. IO多路复用 (I/O Multiplexing) 4. 信号驱动IO (Signal-driven IO) 阻塞式IO 非阻塞式IO 信号驱动IO&#xff08;Signal-driven IO&#xff09; 信号IO实例&#xff1a; IO多路复用…

2024企业加密软件丨为什么企业需要防泄密

企业为什么需要防泄密&#xff1f; 企业的数据中包含了许多核心机密&#xff0c;如研发成果、商业计划、客户资料等。这些信息的泄露可能使竞争对手获得不正当的优势&#xff0c;给企业带来严重损失。 数据泄露事件往往会对企业的声誉造成负面影响&#xff0c;降低客户信任度…

【ROS2】Ubuntu 24.04 源码编译安装 Jazzy Jalisco

目录 系统要求 系统设置 设置区域启用所需的存储库安装开发工具 构建 ROS 2 获取 ROS 2 代码使用 rosdep 安装依赖项安装额外的 RMW 实现&#xff08;可选&#xff09;在工作区构建代码 设置环境 尝试一些例子 下一步 备用编译器 Clang保持最新状态 故障排除 卸载 系统要求 当前…

RRStudio 下载及安装(详尽版)

R语言来自S语言&#xff0c;是S语言的一个变种。S语言、C语言、Unix系统都是贝尔实验室的研究成果。R 语言是一种解释型的面向数学理论研究工作者的语言&#xff0c;主要用于统计分析、绘图、数据挖掘。 R 语言自由软件&#xff0c;免费、开放源代码&#xff0c;支持各个主要计…

python实现windows非白名单exe监控并杀死

目录 一、限定死白名单 二、增加自定义白名单文件 需求&#xff1a;孩子在家用电脑上网课&#xff0c;总是悄悄打开游戏或视频软件 方案&#xff1a;指定白名单exe&#xff0c;打开非白名单的就自动被杀死&#xff0c;并记录日志供查看 一、限定死白名单 import psutil imp…

【C语言】continue 关键字

当在C语言中使用continue关键字时&#xff0c;它用于控制循环语句的执行流程。与break不同&#xff0c;continue不会终止整个循环&#xff0c;而是终止当前迭代&#xff0c;并立即开始下一次迭代。这种行为使得可以在循环内部根据特定条件跳过某些代码块&#xff0c;从而控制程…

中国国家标准介绍

一、介绍 中国国家标准信息公共服务平台&#xff0c;这是由中国国家市场监督管理总局和中国国家标准化管理委员会共同运营的官方网站 https://openstd.samr.gov.cn/ 标准分为三类&#xff1a; GB&#xff1a;强制性国家标准GB/T&#xff1a;推荐行国家标准GB/Z&#xff1a;指导…

LT86101UXE 国产原装 HDMI2.0 / DVI中继器方案 分辨率 4Kx2K 用于多显示器 DVI/HDMI电缆扩展模块

1. 描述 Lontium LT86101UXE HDMI2.0 / DVI中继器特性高速中继器符合HDMI2.0/1.4规范,最大6 gbps高速数据率、自适应均衡RX输入和pre-emphasized TX输出支持长电缆应用程序,没有晶体在船上保存BOM成本,内部灵活的PCB TX巷交换路由。 LT86101UXE HDMI2.0/DVI中继器自动检测线缆损…

傅里叶变换

傅里叶定理指出&#xff1a; 任何信号都可以表示成&#xff08;或者无限逼近&#xff09;一系列正弦信号的叠加。在一维领域&#xff0c;信号是一维正弦波的叠加&#xff0c;那么想象一下&#xff0c;在二维领域&#xff0c;实际上是无数二维平面波的叠加&#xff0c;$(x&…

【面向就业的Linux基础】从入门到熟练,探索Linux的秘密(九)-git(1)

Git是一个版本管理控制系统&#xff08;缩写VCS&#xff09;&#xff0c;它可以在任何时间点&#xff0c;将文档的状态作为更新记录保存起来&#xff0c;也可以在任何时间点&#xff0c;将更新记录恢复回来。 文章目录 前言 一、git是什么 二、git基本概念 三、git基本命令 总结…

Vue3中为Ant Design Vue中Modal.confirm自定义内容

在一次业务开发时代码时&#xff0c;碰到了一种既想要Modal.confirm样式&#xff0c;又想要定制其content内容的情况。 大部分情况下&#xff0c;使用Modal.method()这种方式时&#xff0c;可能content内容固定都是字符串&#xff0c;那如果想要做更高级的交互怎么办&#xff…