Umi使用百度地图服务

简介: Umi使用百度地图服务

需求描述

需要在前端页面中使用地图定位功能,所以在前端umi项目中使用百度地图服务,由于umi项目默认没有入口的html文件,所以无法通过常规的在head中加入外链js的方式使用

百度ak

zyqeLCzvQPCCNImRu9yRGOqWlEUicxxG

react使用百度api

链接: 百度地图api链接

解法方法

看清楚有两种方法

第一种方式 :用umi-plugin 插件的方式把链接加到页面上

src/page下 ,新建文件 plugins/customPlugin.js

/**
* customPlugin.js
*/
export default (api, opts) => {
    // 在HTML尾部添加脚本 
    api.addHTMLScripts(() => {
      return [
        {
          // 百度地图
          type:"text/javascript",
          src:"//api.map.baidu.com/api?type=webgl&v=1.0&ak=你的百度秘钥ak"
        }
      ]
    })
  }

在umirc.ts中导入本地新建的插件文件customPlugin.js

/**
* umirc.ts,umi项目默认配置文件
*/
import { defineConfig } from 'umi';
export default defineConfig({
  nodeModulesTransform: {...},
  dva: {},
  routes: [...],
  fastRefresh: {},
  plugins: ['./src/plugins/customPlugin.js'] //添加一个plugins插件
});

新建一个jsx文件将你需要的代码填写到里面

注意!!!

使用npm方式安装react组件库,然后通过es模块加载

npm install react-bmapgl --save

因为本人使用的是tsx 所以会有下划线报错

import { Map } from 'react-bmapgl'
function Example() {
    return (
        <Map
          style={{ height: 450 }}
          center={new BMapGL.Point(116.404449, 39.914889)}
          zoom={12}
          heading={0}
          tilt={40}
          onClick={(e:any) => console.log(e)}
          enableScrollWheelZoom
        />
    )
}
export default Example

第一种使用方法 效果图

第二种方式 :手动添加document.ejs文件

src/page下,新建document.ejs文件

<!Doctype html>
<html>
<head>
  <meta charset="utf-8" />
  <meta name="apple-mobile-web-app-capable" content="yes"/>
  <meta name="apple-mobile-web-app-status-bar-style" content="black"/>
  <meta name="format-detection" content="telephone=no"/>
  <meta name="format-detection" content="email=no"/>
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no" />
  <title> </title>
  <script src="//api.map.baidu.com/api?v=3.0&ak=你的百度地图AK码"></script>
</head>
<body>
<div id="root"></div>
</body>
</html>

前端代码

import React, { useEffect } from 'react';
import { Modal } from 'antd';
/**
 * 新建考勤地点模态框
 * */
export default function XjkqddModal(props) {
  const { modalVisible, setModalVisible } = props;     // 模态框状态
  useEffect(() => {
    renderMap();
  }, []);
  const renderMap = () => {
    var map = new BMap.Map("container", {
      coordsType: 5
    });
    var point = new BMap.Point(116.404, 39.915);  // 创建点坐标
    map.centerAndZoom(point, 15);                 // 初始化地图,设置中心点坐标和地图级别
  };
  return (
    <Modal
      title="考勤地点"
      visible={modalVisible}
      onOk={() => setModalVisible(false)}
      okText='确定'
      onCancel={() => setModalVisible(false)}
      cancelText='取消'
      width={1000}
      forceRender
    >
      <div id='container' style={{ width: 300, height: 300 }} />
    </Modal>
  )
}

报错

注意点

Antd 4.xmodalimport进页面时,是仅仅挂载,没有渲染其中的DOM结构,所以取不到map实例挂载的 DIVmodalAPI中有个forceRender的属性,加上后modal挂载的同时会把DOM渲染出来

初始化地图实例要在render后执行,不然会取不到DIV容器

地图容器DIV一定要指定宽高,地图并不会撑开DIV,而是把你设置宽高的DIV撑满

相关文章
|
2月前
|
Ubuntu
百度搜索:蓝易云【Ubuntu开机自启服务systemd.service配置教程】
现在,你的服务将在Ubuntu开机时自动启动,并在之后的启动中持续运行。记得根据你的实际需求修改 `your_service_name.service`文件中的相关信息。
102 2
|
2月前
|
存储 Ubuntu 安全
百度搜索:蓝易云【Ubuntu系统离线安装Telnet服务教程。】
确保在进行任何系统配置更改之前备份重要的数据,并在操作过程中小心谨慎,以免造成不必要的问题。
73 0
|
9月前
|
JSON Linux 数据格式
百度搜索:蓝易云【Centos 7 通过 targz 文件安装 Elastic Search 服务教程!】
请注意,本教程提供了基本的安装步骤,并且可以根据实际需求进行定制和配置。如果需要更深入的了解和配置,请参考Elasticsearch官方文档或其他权威资源。
292 0
|
9月前
|
Linux 网络安全 Apache
百度搜索:蓝易云 ,linux系统 Apache服务配置教程。
现在,您可以通过浏览器访问您的网站。在浏览器中输入服务器的IP地址或域名,即可访问默认网站或配置的虚拟主机。以上是在Linux系统上配置Apache服务的教程。请根据您的需求进行必要的配置和修改。
140 0
|
2月前
|
Ubuntu 安全 数据安全/隐私保护
百度搜索:蓝易云【Ubuntu配置Samba服务教程】
现在,你已经成功在Ubuntu上配置了Samba服务。其他计算机可以通过网络访问你共享的文件夹。在访问时,需要输入Samba用户的用户名和密码。注意,为了安全起见,建议配置Samba的访问权限和加密选项。
67 1
|
2月前
|
网络协议 Linux 网络安全
百度搜索:蓝易云【Linux下的samba服务配置详解】
以上是对Samba服务配置的详解。通过配置Samba,你可以在Linux和Windows之间实现文件共享和打印机共享,方便进行跨平台的文件传输和共享操作。请根据具体需求和环境,进行相应的配置和调整。
43 0
百度搜索:蓝易云【Linux下的samba服务配置详解】
|
2月前
|
安全 应用服务中间件 Linux
百度搜索:蓝易云【CentOS7使用Nginx、Supervisor部署Go/Golang服务教程】
这些是在CentOS 7 x64上使用Nginx和Supervisor部署Go/Golang服务的基本步骤。根据您的需求和具体环境,可能还需要进行其他配置和调整。请确保在进行任何与网络连接和安全相关的操作之前,详细了解您的网络环境和安全需求,并采取适当的安全措施。
71 0
|
2月前
|
网络协议 Linux
百度搜索:蓝易云【【http服务】使用命令来查看和停止端口教程。】
通过按照上述步骤使用命令来查看和停止端口,您可以轻松地管理正在运行的服务。请确保在停止端口上的服务时,选择正确的端口号,并谨慎操作以避免影响其他正常运行的服务。
36 0
|
2月前
|
应用服务中间件 nginx Docker
百度搜索:蓝易云【关于在容器中,nignx代理后端多个服务如何保证后端服务的地址不变呢?】
通过这种方式,您可以保证在容器中使用Nginx代理后端多个服务时,后端服务的地址不变,无论后端服务的容器如何重启或迁移。
56 0
|
2月前
|
Java Maven Docker
百度搜索:蓝易云【Dockerfile 部署 Java 服务教程。】
通过以上步骤,你就可以使用Dockerfile来构建并部署Java服务。请根据你的项目需求进行适当的配置和定制。希望以上教程对你有所帮助。如果有更多疑问,请参考相关的文档和资源进行进一步学习。
48 0