您的当前位置:首页>全部文章>文章详情

【AntDesignPro】AntDesignPro使用原生js,箩筐地图的使用

CrazyPanda发表于:2024-02-08 16:36:05浏览:465次TAG:

项目需要把高德地图替换成箩筐地图,WEB前端使用的ant design pro,高德地图有相关的react demo,而箩筐地图只有原生js,

结合上一篇文章【AntDesignPro】使用高德地图设置考勤区域,把高德地图修改为箩筐地图,实现考勤范围设置。


1 html使用箩筐地图

参考上一篇文章【html】箩筐地图的使用,设置考勤范围,了解实现考勤范围设置需要用到的箩筐地图接口。


2 ant design pro加载原生js

这个是实现功能的核心,只有js正确加载上了,地图的功能才能够正常使用。

结合ant design pro高德地图的使用,我们了解到了组件的componentDidMount()方法,是dom渲染成功后执行的方法,

我们继续在原js(此处是我使用高德地图的时候下载的组件,这次就在这个js文件里面修改)

我们可以在这个方法里面执行map地图的创建。

引用js的方法如下

var url =
      'https://webapi.luokuang.com/maps?ak=箩筐地图key&plugins=Geocoder&callback=onLoad';
    var jsapi = document.createElement('script');
    jsapi.src = url;
    document.head.appendChild(jsapi);

可以看到,js链接相比原链接多了callback参数,参数值是onLoad,如果不写这个参数,还是无法正常创建Map,

而onLoad对应的是window.onload方法,表示引用js后调用window.onLoad方法,代码如下:

window.onLoad = function () {
      var circle = null;
      var geocoderService = null;
      var position = new LKMap.LngLat(113.683182, 34.753023);
      var zoom = 15;
      var map = new LKMap.Map('container', {
        center: position, // 中心点
        zoom: zoom, // 缩放级别
        style: 'lkmap://styles/standard', // 地图样式
      });
  }

这样地图就可以正常显示了

image.png

(其他,项目手机端使用的是uniapp方法开发的,引用箩筐地图js的方法也类似)

js引用成功后,剩下的就可以参考原来的方法进行修改。主要还是注意js组件和页面的传值,获取坐标后需要传回页面控件。

image.png

3 全部代码

js组件全部代码如下

import React, { Component } from 'react';
import AmapLoader from '@amap/amap-jsapi-loader';
import './MapContainer.css';
import { ProForm, ProFormItem, ProFormText } from '@ant-design/pro-components';
import { Button, Col, Form, Input, message, Row } from 'antd';


class MapComponent extends Component {
    //获取页面传参
  constructor(props) {
    super(props);
  }

  //js组件向页面赋值的方法
  onChangeGps(value) {
    this.props.form.setFieldValue('gps', value);
  }
  
  // 2.dom渲染成功后进行map对象的创建
  componentDidMount() {
    // 在此处添加需要执行的代码
    let that = this;
    var url =
      'https://webapi.luokuang.com/maps?ak=箩筐地图key&plugins=Geocoder&callback=onLoad';
    var jsapi = document.createElement('script');
    jsapi.src = url;
    document.head.appendChild(jsapi);

    window.onLoad = function () {
      var circle = null;
      var geocoderService = null;
      var position = new LKMap.LngLat(113.683182, 34.753023);
      var zoom = 15;
      var map = new LKMap.Map('container', {
        center: position, // 中心点
        zoom: zoom, // 缩放级别
        style: 'lkmap://styles/standard', // 地图样式
      });

      // 添加地图加载完成事件
      map.on('load', function () {
        geocoderService = new LKMap.Geocoder({
          size: 14,
        });

        // 地理编码
        function get_location() {
          var address = document.getElementById('address').value;
          if (address) {
            geocoderService.getLocation(address, function (status, result) {
              console.log(result);
              console.log(status);
              if (status == 'complete' && result.accuracy == true) {
                var gps = result.coordinates[0] + ',' + result.coordinates[1];
                console.log(gps);
                
                //document.getElementById('gps').value = gps; //此方法无效
                that.onChangeGps(gps); //需要使用此方法向页面传值
                
                var position = new LKMap.LngLat(result.coordinates[0], result.coordinates[1]);
                addCircle(position);
              } else {
                message.error('请输入正确的地址');
              }
            });
          } else {
            message.error('请输入正确的地址');
          }
        }

        //事件绑定
        document.getElementById('address_confirm').onclick = get_location;
      });

      var gps = document.getElementById('gps').value;
      if (gps) {
        var location = gps.split(',');
        position = new LKMap.LngLat(location[0], location[1]);
        map.setCenter(position);

        var radius = document.getElementById('radius').value;
        var num = get_zoom(radius);
        map.setZoom(num);

        addCircle(position);
      }

      /**
       * 添加覆盖物
       * @param position
       */
      function addCircle(position) {
        circle && circle.remove();
        map.setCenter(position);
        var radius = document.getElementById('radius').value;
        var num = get_zoom(radius);
        map.setZoom(num);
        circle = new LKMap.Circle({
          center: position,
          radius: radius, //半径
          strokeColor: '#F33', //线颜色
          strokeOpacity: 1, //线透明度
          strokeWeight: 2, //线粗细度
          fillColor: '#ee2200', //填充颜色
          fillOpacity: 0.4, //填充透明度
          cursor: 'move', // 鼠标悬停时的鼠标样式
        });
        circle.setMap(map);
      }

      /**
       * 根据半径获取地图缩放级别
       * @param radius
       * @returns {number}
       */
      function get_zoom(radius) {
        var num = zoom;
        if (radius >= 1000) {
          num = 12;
        } else if (radius >= 800) {
          num = 13;
        } else if (radius >= 500) {
          num = 14;
        } else if (radius >= 200) {
          num = 15;
        } else if (radius >= 100) {
          num = 16;
        }

        return num;
      }
    };
  }

  render() {
    // 1.初始化创建地图容器,div标签作为地图容器,同时为该div指定id属性;
    return (
      <div>
        <div id="container" className="map" style={{ height: '300px' }}></div>
      </div>
    );
  }
}
//导出地图组建类
export default MapComponent;


4 最后

箩筐地图在多个项目的替换都成功了,不过项目最终估计不会使用这个地图,可能还要更换,因为经过几天的测试,这个地图实在是太不稳定了,

获取地址坐标有时候成功,有时候不成功,有时候连续几次都成功,有时候连续几十次都不成功,严重影响用户体验。。。

image.png

不过还是希望箩筐地图能越做越好。


已上就是本次ant design pro 引用原生js,使用箩筐地图的全部内容。



猜你喜欢

【AntDesignPro】使用高德地图设置考勤区域
参考高德开放平台https://lbs.amap.com/api/javascript-api-v2/guide/abc/amap-react功能要求:使用AntDesignPro开发系统管理端,考勤模块需要设置APP考勤打卡区域,需要页面显示地图定位并设置考勤范围(地图上画圈),以便APP在画圈范围内打卡使用。1、 准备2、 下载react类组件代码参考官网流程,可正常加载出地图组件,下面是我的页面和组件文件组件文件3、 安装并引入AmAP Loadernpm&nbsp;i&nbsp;@ama
发表于:2023-12-14 浏览:737 TAG:
【AntDesignPro】Ant Design Pro学习记录—ProTable的使用(三)
一、 自定义检索条件部分列表页需要做一些简单的数据汇总统计,并能够跟随检索条件自动变化,protable自带的功能没有找到对应的实现方法,最后决定自己来实现这个功能。1、关闭ProTable自带检索功能search={false}2、自定义检索表单在ProTable上方加入自定义表单&lt;Card&nbsp;bordered={false}&nbsp;style={{&nbsp;marginBottom:&nbsp;15&nbsp;}}&gt; &nbsp;&nbsp;&nbsp;&nbsp;
发表于:2024-02-20 浏览:478 TAG:
【AntDesignPro】Ant Design Pro学习记录—默认主题配色修改
&nbsp;版本:&nbsp;Ant Design Pro V5先参考下官网定制主题 - Ant Design再参考这篇文章antd pro 修改全局样式_tankpanv的博客-CSDN博客_antd修改全局样式最后自己实验:第一步,在config.ts文件中配置theme:&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&#39;primary-color&#39;:&nbsp;defaultSettings.primaryColor, &nbsp;&nbsp;},这种配置需
发表于:2023-11-28 浏览:777 TAG:
【AntDesignPro】Ant Design Pro学习记录—播放视频和音频
在ant design pro中,使用video和audio标签播放视频和音频1、播放视频我使用ModalForm弹框显示,autoPlay设置是否自动播放,controls设置操作按钮是否显示,设置好宽度和高度即可src是配置视频文件的链接&lt;ModalForm &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;title=&quot;播放视频&quot; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;n
发表于:2024-05-17 浏览:445 TAG:
【AntDesignPro】Ant Design Pro学习记录—前后端分离跨域设置,解决跨域session不一致
目录前言一、为什么跨域二、跨域配置三、跨域请求session不一致前言第一次做前后端分离,也是踩了很多坑,记录一下AntDesignPro跨域解决的方式。服务器系统使用Nginx,服务端使用thinkphp6。AntDesignPro正式build放到服务器上后,提示登录成功,但一直登录不上,后来发现是跨域session不同导致的,登录的时候session和登录成功后session的id不同,导致提示登录成功,就是登录不进去的情况。一、为什么跨域不想知道为什么要跨域,只想知道怎么解决。二、跨域配
发表于:2023-11-28 浏览:552 TAG:
【AntDesignPro】Ant Design Pro学习记录—ModalForm的使用(四)
一、 ModalForm自定义footer按钮参考官网,Modal弹框是可以自定义按钮的,原想着ModalForm的modalprops可以设置自定义footer,结果设置一直不生效,最终还是使用Modal嵌套了ProForm实现了功能,在此记录一下。ant design pro使用的V5版本。1、Modal自定义footer参考官网https://ant-design.antgroup.com/components/modal-cn?from=msidevs.net#components-mo
发表于:2024-02-20 浏览:354 TAG:
【React】使用React实现一个内容滑动组件
最近在做项目时遇到一个需求,需要让一个列表能够通过点击按钮进行滚动,每次都是一屏的距离,不足则结束。并且,这个列表项是在react-grid-layout中的某一个模块内。所以包裹这个列表的容器会随时发生变化。在完成这个组件后,通过这篇文章总结一下。UI/原型分析那么从上面的功能描述以及项目中的UI,我们可以分析得到这样一个假想图:我们需要实现一个容器来作为我们的可视区域,并且这个容器是可以伸缩的。列表内容如果超出容器的可视区域,那么就会被隐藏。需要左右都有按钮,来支持用户左右滑动内容来查看,每
发表于:2024-04-10 浏览:318 TAG:
【React】 react 绘制矩形
在React中绘制矩形,可以使用HTML5的&lt;canvas&gt;元素结合React组件的生命周期方法来实现。以下是一个简单的React组件示例,用于绘制矩形:import&nbsp;React,&nbsp;{&nbsp;Component&nbsp;}&nbsp;from&nbsp;&#39;react&#39;; &nbsp; class&nbsp;Rectangle&nbsp;extends&nbsp;Component&nbsp;{ &nbsp;&nbsp;componentDid
发表于:2024-04-01 浏览:306 TAG:
【React】react面试题
React面试题文章目录React面试题一、react特性***React与Vue的区别*******1. Jsx的使用规范*******1.说说对 React 的理解?有哪些特性?DOM2.说说 Real DOM 和 Virtual DOM 的区别?优缺点?*******说说React中的虚拟dom?在虚拟dom计算的时候diff和key之间有什么关系*******3.说说React Jsx转换成真实DOM过程?4.说说你第mvc和mvvm的理解5.说说react中引入css的方式有哪几种?区
发表于:2023-12-05 浏览:1402 TAG:
【AntDesignPro】AntDesignPro使用原生js,箩筐地图的使用
项目需要把高德地图替换成箩筐地图,WEB前端使用的ant design pro,高德地图有相关的react demo,而箩筐地图只有原生js,结合上一篇文章【AntDesignPro】使用高德地图设置考勤区域,把高德地图修改为箩筐地图,实现考勤范围设置。1 html使用箩筐地图参考上一篇文章【html】箩筐地图的使用,设置考勤范围,了解实现考勤范围设置需要用到的箩筐地图接口。2 ant design pro加载原生js这个是实现功能的核心,只有js正确加载上了,地图的功能才能够正常使用。结合an
发表于:2024-02-08 浏览:466 TAG: