【AntDesignPro】AntDesignPro使用原生js,箩筐地图的使用
项目需要把高德地图替换成箩筐地图,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', // 地图样式 }); }
这样地图就可以正常显示了
(其他,项目手机端使用的是uniapp方法开发的,引用箩筐地图js的方法也类似)
js引用成功后,剩下的就可以参考原来的方法进行修改。主要还是注意js组件和页面的传值,获取坐标后需要传回页面控件。
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 最后
箩筐地图在多个项目的替换都成功了,不过项目最终估计不会使用这个地图,可能还要更换,因为经过几天的测试,这个地图实在是太不稳定了,
获取地址坐标有时候成功,有时候不成功,有时候连续几次都成功,有时候连续几十次都不成功,严重影响用户体验。。。
不过还是希望箩筐地图能越做越好。
已上就是本次ant design pro 引用原生js,使用箩筐地图的全部内容。
猜你喜欢
- 【AntDesignPro】Ant Design Pro学习记录—ProTable的使用(二)
- 目录一、列表检索初始值设置二、字段缩略显示一、列表检索初始值设置使用initialValue属性,配置列表检索的初始值const columns: ProColumns<API.RoomItem>[] = [ { title: '名称', &nb
- 【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的方式有哪几种?区
- 【AntDesignPro】L7Plot地理可视化组件的使用
- L7Plot介绍L7Plot 基于 L7 实现的开箱即用地理空间数据可视化图表库L7Plot 专注于地理可视化图表。以声明配置式的方式,降低用户使用成本;以常见地理图表分类的方式,降低用户选择成本;内部集成全国行政区域数据,降低用户使用地理数据心智;支持多图层及多图表层叠,方便用户定制复杂的业务场景;L7Plot 专注于地理数据可视化展示,不会涉及数据编辑能力。前言项目需要,使用antdesignpro做前端,并绘制可视化大屏,回执地图组件,于是使用了L7Plot。功能目的绘
- 【React】React中Typecript的使用
- 目录一、创建React的TypeScript项目二、使用差别1、基本使用2、Props传值的差别3、State传参三、总结一、创建React的TypeScript项目见:如何在React项目中引入TypeScript?_duansamve的博客-CSDN博客二、使用差别1、基本使用其基本使用和javascript编写React项目时差不多这是一份.tsx文件代码:可以看到和之前的.jsx使用并无太大差别import React, { Component }
- 【AntDesignPro】使用高德地图设置考勤区域
- 参考高德开放平台https://lbs.amap.com/api/javascript-api-v2/guide/abc/amap-react功能要求:使用AntDesignPro开发系统管理端,考勤模块需要设置APP考勤打卡区域,需要页面显示地图定位并设置考勤范围(地图上画圈),以便APP在画圈范围内打卡使用。1、 准备2、 下载react类组件代码参考官网流程,可正常加载出地图组件,下面是我的页面和组件文件组件文件3、 安装并引入AmAP Loadernpm i @ama
- 【AntDesignPro】Ant Design Pro学习记录—前后端分离跨域设置,解决跨域session不一致
- 目录前言一、为什么跨域二、跨域配置三、跨域请求session不一致前言第一次做前后端分离,也是踩了很多坑,记录一下AntDesignPro跨域解决的方式。服务器系统使用Nginx,服务端使用thinkphp6。AntDesignPro正式build放到服务器上后,提示登录成功,但一直登录不上,后来发现是跨域session不同导致的,登录的时候session和登录成功后session的id不同,导致提示登录成功,就是登录不进去的情况。一、为什么跨域不想知道为什么要跨域,只想知道怎么解决。二、跨域配
- 【React】React前端图片裁剪组件
- 前端图片裁剪组件前端图片裁剪已经是很常见的需求了,在 react 的项目中推荐使用 react-image-crop 库,能勾勒出裁剪区域、宽高比例限制等等,但是还是有很多东西需要我们来做的,比如以下问题:react-image-cropreact-image-crop 的基本使用import ReactCrop from "react-image-crop"; import "react-image-crop/dist/Re
- 【AntDesignPro】Ant Design Pro学习记录—ModalForm的使用(一)
- 目录前言一、ModalForm销毁二、ModalForm编辑赋值三、ProFormUploadButton赋值四、其它总结前言使用了AntDesignPro,仿照TableList创建了自己的列表,列表添加编辑确成了困扰,添加编辑使用了ModalForm,有两个问题,一个使用后,页面数据无法清除,再点弹框还是原来的数据,第二个编辑的时候,初始数据赋值问题。AntDesignPro版本V5,开发工具VsCode。一、ModalForm销毁参考ant design的关闭ModalForm和Modal