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

news2025/1/18 7:18:29

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.coloradmin.cn/o/1894916.html

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

相关文章

MFC+MySQL应用:配置

MFCMySQL 1. MFC UI界面生成2. 数据库和表生成创建数据库创建表添加表数据 3. VS中配置MySQL环境 1. MFC UI界面生成 链接: MFC使用方法 可以根据用户自身需求生成单文档、对话框等不同样式的UI界面。 2. 数据库和表生成 可以在workbench或者MySQL Server中创建数据库和表。…

户用分布式光伏项目开发模式

随着全球对可再生能源的重视和技术的不断进步&#xff0c;分布式光伏发电作为一种清洁、高效、可再生的能源形式&#xff0c;正逐渐成为新能源发展的重要方向。户用分布式光伏项目&#xff0c;作为分布式光伏发电的重要组成部分&#xff0c;其开发模式对于推动光伏产业的普及与…

【前端知识】一篇速成 建议收藏

HTML基础概念 正式敲代码之前呢,我们先来看几个概念: 0 静态网页和动态网页 静态网页: 页面的内容和显示效果就基本上不会发生变化了--除非你修改页面代码。 动态网页: 页面代码虽然没有变&#xff0c;但是显示的内容却是可以随着时间、环境或者数据库操作的结果而发生改变的…

Another Redis Desktop Manager工具自定义解析数据

自定义解析数据,支持多种程序终端输出 /Users/admin/go/src/baobao_all/ws_server/baobao/main_test/encipher_tool_redis/redis_tool {VALUE}/bin/bash -c "/Users/admin/Downloads/redis_tool {VALUE}"写个go程序解析数据 package mainimport ("encoding/jso…

LLM大模型RAG技术

在人工智能领域&#xff0c;大模型RAG技术&#xff08;Retrieval-Augmented Generation&#xff09;已成为近年来研究的热点。它结合了检索和生成两大关键技术&#xff0c;为自然语言处理任务带来了革命性的进步。本文将带领大家深入了解大模型RAG技术的全流程&#xff0c;让你…

2024年过半,新能源车谁在掉链子?

2024年过半之际&#xff0c;各品牌上半年的销量数据也相继出炉&#xff0c;是时候考察今年以来的表现了。 理想和鸿蒙智行两大增程霸主占据头两名&#xff0c;仍处于焦灼状态&#xff1b;极氪和蔚来作为高端纯电品牌紧随其后&#xff0c;两者之间差距很小&#xff1b;零跑和哪…

CD4017 – 带解码输出的十进制计数器

CD4017 IC 是一个十进制计数器&#xff0c;它有 10 个输出&#xff0c;分别代表 0 到 9 的数字。计数器在&#xff08;14号引脚&#xff09;每个时钟脉冲上升时增加 1。计数器达到 9 后&#xff0c;它会在下一个时钟脉冲时从 0 重新开始。 引脚名称管脚 &#xff03;类型描述VD…

windows非白名单exe监控并杀死

需求&#xff1a;孩子在家用电脑上网课&#xff0c;总是悄悄打开游戏或视频软件 方案&#xff1a;指定白名单exe&#xff0c;打开非白名单的就自动被杀死&#xff0c;并记录日志供查看 不知道是否还有更好的结果方案&#xff1f; import psutil import time import logging#…

【MATLAB源码-第139期】基于matlab的OFDM信号识别与相关参数的估计,高阶累量/小波算法调制识别,循环谱估计,带宽估计,载波数目估计等等。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 在现代无线通信系统中&#xff0c;正交频分复用&#xff08;OFDM&#xff09;因其高效的频谱利用率、强大的抗多径衰落能力以及灵活的带宽分配等优势&#xff0c;成为了一种非常重要的调制技术。然而&#xff0c;随着无线通信…

Swift 定制 Core Data 迁移

文章目录 前言什么是 Core Data 迁移&#xff1f;示例更新模型创建一个新的模型版本创建映射模型编写自定义迁移策略总结 前言 随着应用程序和用户群的增长&#xff0c;你需要添加新功能&#xff0c;删除其他功能&#xff0c;并改变应用程序的工作方式。这是软件开发生命周期的…

大语言模型融合知识图谱的问答系统研究

文章目录 题目摘要方法实验消融实验 题目 大语言模型融合知识图谱的问答系统研究 论文地址&#xff1a;http://fcst.ceaj.org/CN/10.3778/j.issn.1673-9418.2308070 项目地址&#xff1a;https://github.com/zhangheyi-1/llmkgqas-tcm/ 摘要 问答系统&#xff08;Question Ans…

vue css 链式布局模式

<div class"pp-wrap"> <div class"pp-left"><!--跳活动反思--><div class"even-box" v-for"(item,index) in trackingPtoPLeftList" :key"index" click"jumpReview(item)"><div …

3D虚拟会议室打破传统会议局限,提供沉浸式会议体验

一、身临其境的虚拟会议体验 1、沉浸感提升参会效果 3D虚拟会议室借助虚拟现实技术为用户创造出一个仿佛置身真实会议场所的感觉。用户可以进入一个虚拟的会议室&#xff0c;感受到空间的深度和互动性。这种身临其境的体验&#xff0c;使得参会者不仅仅是被动地观看屏幕&…

Zoom使用的基本步骤和注意事项

Zoom是一款功能强大的视频会议软件&#xff0c;广泛应用于远程办公、在线教育、团队协作等多个场景。以下是Zoom使用的基本步骤和注意事项&#xff1a; 一、注册与登录 注册Zoom账户&#xff1a; 访问Zoom官方网站&#xff08;如zoom.us&#xff09;&#xff0c;点击“注册”…

后端之路——阿里云OSS云存储

一、何为阿里云OSS 全名叫“阿里云对象存储OSS”&#xff0c;就是云存储&#xff0c;前端发文件到服务器&#xff0c;服务器不用再存到本地磁盘&#xff0c;可以直接传给“阿里云OSS”&#xff0c;存在网上。 二、怎么用 大体逻辑&#xff1a; 细分的话就是&#xff1a; 1、准…

泰国内部安全行动司令部数据泄露

BreachForums 论坛的一名成员宣布发生一起重大数据泄露事件&#xff0c;涉及泰国内部安全行动司令部 (ISOC)&#xff0c;该机构被称为泰国皇家武装部队的政治部门。 目前&#xff0c;我们无法准确确认此次泄露的真实性&#xff0c;因为该组织尚未在其网站上发布有关该事件的任…

【ESP32】打造全网最强esp-idf基础教程——15.WiFi连接STA模式

WiFi连接STA模式 一、ESP32的WiFi功能介绍 前面章节内容&#xff0c;基本上都是描述了ESP32强大的MCU能力&#xff0c;这些MCU能力使得ESP32可以替换许多类型的单片机工作&#xff0c;而自己承担这部分功能&#xff1b;当然ESP32的IOT能力才是它的主业&#xff0c;从硬件配置来…

2024年中国网络安全市场全景图 -百度下载

是自2018年开始&#xff0c;数说安全发布的第七版全景图。 企业数智化转型加速已经促使网络安全成为全社会关注的焦点&#xff0c;在网络安全边界不断扩大&#xff0c;新理念、新产品、新技术不断融合发展的进程中&#xff0c;数说安全始终秉承科学的方法论&#xff0c;以遵循…

深入探索PHP中的多维数组:构建复杂数据结构的艺术

深入探索PHP中的多维数组&#xff1a;构建复杂数据结构的艺术 引言 在PHP开发中&#xff0c;数组&#xff08;Array&#xff09;是一种非常重要的数据类型&#xff0c;它允许我们存储多个值&#xff0c;并且这些值可以是不同类型的。而多维数组&#xff08;Multidimensional …

康姿百德磁性床垫好不好,效果怎么样靠谱吗

康姿百德典雅款床垫&#xff0c;打造舒适睡眠新体验 康姿百德床垫是打造舒适睡眠新体验的首选&#xff0c;其设计能够保护脊椎健康&#xff0c;舒展脊椎&#xff0c;让您享受一夜好眠。康姿百德床垫的面料选择也非常重要&#xff0c;其细腻亲肤的针织面料给您带来柔软舒适的触…