React百度地图开发

导入相关依赖

“@uiw/react-baidu-map”: “^1.2.1”

cnpm install @uiw/react-baidu-map --save
// 或
npm install @uiw/react-baidu-map --save

0.申请私钥

在这里插入图片描述

image-20191119171320163.png

1.地图引入

Map 的父组件必须具有宽度和高度;

import { Map, APILoader } from '@uiw/react-baidu-map';

<div style={{ width: '100%', height: '300px' }}>
    <APILoader akay="GTrnXa5hwXGwgQnTBG28SHBubErMKm3f">
    <Map />
    </APILoader>
</div>

在这里插入图片描述

一、Map的使用

2.Map的API

props属性

参数说明类型默认值
widget百度地图上负责与地图交互的UI元素称为控件。百度控件文档string[]/object[][]
center定位, 可使用如 上海市青浦区 的地区字符串,也可以使用对象如 {lng: 121.424333, lat: 31.228604} 表示经纬度。百度拾取坐标系统Point,String上海市
autoLocalCity设为 true, IP定位获取当前城市,进行自动定位boolean-
zoom缩放等级,如果 center 类型为 Point 时,zoom必须赋值,范围 3-19 级, 若调用高清底图(针对移动端开发)时,zoom 可赋值范围为 3-18 级。 如果center类型为字符串时,比如“北京”,zoom可以忽略,地图将自动根据 center 适配最佳 zoom 级别number-
minZoom地图允许展示的最小级别number-
maxZoom地图允许展示的最大级别number-
mapType地图类型MapTypeBMAP_NORMAL_MAP
enableHighResolution是否启用使用高分辨率地图。在iPhone4及其后续设备上,可以通过开启此选项获取更高分辨率的底图,v1.2,v1.3版本默认不开启,v1.4 默认为开启状态boolean-
enableAutoResize地图允许展示的最大级别booleantrue
enableMapClick是否开启底图可点功能booleantrue
enableDragging启用地图拖拽,默认启用boolean-
enableScrollWheelZoom启用滚轮放大缩小,默认禁用boolean-
enableDoubleClickZoom启用双击放大,默认启用booleantrue
enableInertialDragging启用地图惯性拖拽,默认禁用boolean-
enableContinuousZoom启用连续缩放效果,默认禁用boolean-
enablePinchToZoom启用双指操作缩放,默认启用booleantrue
enableKeyboard启用键盘操作,默认禁用。键盘的上、下、左、右键可连续移动地图。同时按下其中两个键可使地图进行对角移动。PgUp、PgDn、Home和End键会使地图平移其1/2的大小。+、-键会使地图放大或缩小一级boolean-
ready地图实例加载完成执行事件(bmap: typeof BMap, map: BMap.Map): void-

3.小工具控件

<div style={{ width: '100%', height: '300px' }}>
                <APILoader akay="azHOkZP2BALr1pYARZRFPQa1G5dNG7HS">
                  <Map
                    center={{lng: 113.755633, lat: 23.026523}}
                    widget={[
                      'GeolocationControl',
                      {
                        name: 'OverviewMapControl',
                        options: {
                          isOpen: true,
                        }
                      },
                      {
                        name: 'NavigationControl',
                        options: (BMap) => {
                          return {
                            offset: new BMap.Size(150, 5),
                            showZoomInfo: false,
                            enableGeolocation: true,
                          }
                        }
                      }
                    ]}
                  />
                </APILoader>
              </div>
控件类名简介
抽象基类Control所有控件均继承此类的方法、属性。通过此类您可实现自定义控件
平移缩放控件NavigationControlPC端默认位于地图左上方,它包含控制地图的平移和缩放的功能。移动端提供缩放控件,默认位于地图右下方
缩略地图OverviewMapControl默认位于地图右下方,是一个可折叠的缩略地图
比例尺ScaleControl默认位于地图左下方,显示地图的比例关系
地图类型MapTypeControl默认位于地图右上方
版权CopyrightControl默认位于地图左下方
定位GeolocationControl针对移动端开发,默认位于地图左下方

4.地图(滚轮)的放大缩小

版本:"@uiw/react-baidu-map": "^1.2.1",
    //注意:版本1.0.0不可用
<Map>
  enableScrollWheelZoom={true}
</Map>

5.Map的综合使用

<div style={{ width: '100%', height: '300px' }}>
              <APILoader akay="azHOkZP2BALr1pYARZRFPQa1G5dNG7HS">
                <Map
                  ready={(bmap, map) => {
                    console.log('准备好了!', map);
                    console.log("地图加载完毕");
                    // 启用滚轮放大缩小,默认禁用
                    // map.enableScrollWheelZoom();
                  }}
                  // 滚轮滑动放大缩小地图
                  enableScrollWheelZoom
                  // 缩放等级
                  zoom={17}
                  // 自定定位当前城市
                  // autoLocalCity
                  center={{ lng: 118.460977, lat: 31.227906 }}
                  // 添加地图控件
                  widget={[
                    'GeolocationControl',
                    {
                      name: 'OverviewMapControl',
                      options: {
                        isOpen: true,
                      }
                    },
                    {
                      name: 'NavigationControl',
                      options: (BMap) => {
                        return {
                          offset: new BMap.Size(20, 5),
                          showZoomInfo: false,
                          enableGeolocation: true,
                        }
                      }
                    }
                  ]}
                />
              </APILoader>
            </div>

二、Marker 点标注组件

Props

参数说明类型默认值
position必填 设置标注的地理坐标。百度拾取坐标系统Point-
animation此常量表示标注的动画效果, 1 坠落动画,2 跳动动画。number-
type标点类型,默认自定义标点 location, end, start, simple_red, simple_blue, loc_blue, loc_red, dot_red, dot_blue', 'red1, red2, red3, red4, red5, red6, red7, red8, red9', 'blue1, blue2, blue3, blue4, blue5, blue6, blue7, blue8, blue9string-
offset标注的位置偏移值Size-
enableMassClear是否在调用 map.clearOverlays 清除此覆盖物booleantrue
icon标注所用的图标对象Icon-
enableDragging是否启用拖拽booleanfalse
enableClicking是否响应点击事件booleantrue
enableMassClear允许覆盖物在map.clearOverlays方法中被清除booleantrue
raiseOnDrag拖拽标注时,标注是否开启离开地图表面效果。booleanfalse
draggingCursor拖拽标注时的鼠标指针样式。此属性值需遵循CSS的cursor属性规范string-
rotation是否响应点击事件number-
shadow阴影图标Icon-
title鼠标移到 marker 上的显示内容

6.普通点标注

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FlRQcdaX-1575338837138)(…/…/Image/markers.png)]

<Row>
            <div style={{ width: '100%', height: '300px' }}>
              <APILoader akay="azHOkZP2BALr1pYARZRFPQa1G5dNG7HS">
                <Map
                  widget={['NavigationControl']}
                  zoom={13}
                  // center="上海"
                  center={{ lng: 121.460977, lat: 31.227906 }}
                >
                  <Marker position={{ lng: 121.411535, lat: 31.222965 }} animation={2} />
                  <Marker position={{ lng: 121.465145, lat: 31.241245 }} />
                  <Marker position={{ lng: 121.466008, lat: 31.220001 }} animation={1} type="loc_red" />
                  <Marker position={{ lng: 121.501365, lat: 31.224942 }} type="simple_blue" />
                  <Marker position={{ lng: 121.464858, lat: 31.202705 }} type="simple_red" />
                  <Marker position={{ lng: 121.458534, lat: 31.224942}} type="start" />
                  <Marker position={{ lng: 121.434962, lat: 31.200729 }} type="end" />
                  <Marker position={{ lng: 121.478943, lat: 31.2531 }} type="location" />
                  <Marker position={{ lng: 121.516888, lat: 31.249149 }} type="red1" />
                  <Marker position={{ lng: 121.512576, lat: 31.240504 }} type="red2" />
                  <Marker position={{ lng: 121.513726, lat: 31.233588}} type="blue3" />
                  <Marker position={{ lng: 121.520912, lat: 31.234576}} type="blue4" />
                  <Marker position={{ lng: 121.491879, lat: 31.195045}} type="dot_red" />
                  <Marker position={{ lng: 121.485555, lat: 31.195045}} type="dot_blue" />
                </Map>
              </APILoader>
            </div>
          </Row>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OfwFV8r5-1575338837139)(…/…/Image/image-20191121142958536.png)]

7.自定义标点

const icon = new BMap.Icon('http://developer.baidu.com/map/jsdemo/img/fox.gif', new BMap.Size(300, 157));

可能会出现报错BMap is undefined

在public文件夹下面的index.html增加下面代码:

<script type="text/javascript" src="https://api.map.baidu.com/api?v=2.0&ak=hhGvYrSziBLVtisfMfUK4GpTdCdqQHMy"></script>
    <script>
      window.BMap = BMap
    </script>
<div style={{ width: '100%', height: '300px' }}>
              <APILoader akay="azHOkZP2BALr1pYARZRFPQa1G5dNG7HS">
                <Map
                  widget={['NavigationControl']}
                  zoom={13}
                  center={{ lng: 121.460977, lat: 31.227906 }}
                >
                  <Marker icon={icon} position={{ lng: 121.411535, lat: 31.222965 }} animation={2} />
                      </Map>
</APILoader>
</div>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jCVmjs5V-1575338837143)(…/…/Image/image-20191121181827071.png)]

8.可拖拽点,并获取拖拽后的位置

添加拖拽完成事件

<div style={{ width: '100%', height: '300px' }}>
              <APILoader akay="azHOkZP2BALr1pYARZRFPQa1G5dNG7HS">
                <Map
                  enableScrollWheelZoom
                  widget={['NavigationControl']}
                  zoom={13}
                  center={{ lng: 121.460977, lat: 31.227906 }}
                >
                  <Marker
                    ref={(props) => {
                      if (props && props.marker) {
                        // console.log('marker::', props.marker, props.map, props.BMap);
                        // props.marker.removeEventListener('dragend', dragendHandle)
                        props.marker.addEventListener('dragend', (e)=>{
                          console.log(e.point);
                        })
                      }
                    }}
                    title={"潘顾昌"}
                    icon={icon}
                    position={{ lng: 121.411535, lat: 31.222965 }}
                    // animation={2}
                    enableDragging
                  />
                </Map>
              </APILoader>
            </div>

9.点击地图根据坐标标注

@Debounce(300)
  @Bind()
  event(e, props, icon){
    const BMap = props.BMap;
    let marker = new BMap.Marker(e.point,{icon});
    marker.enableDragging();
    props.map.addOverlay(marker);
  }

const icon = new BMap.Icon('http://developer.baidu.com/map/jsdemo/img/fox.gif', new BMap.Size(300, 157));

<Row>
            <div style={{ width: '100%', height: '300px' }}>
              <APILoader akay="azHOkZP2BALr1pYARZRFPQa1G5dNG7HS">
                <Map
                  ref={(props) => {
                    if (props && props.map) {
                      props.map.addEventListener('click',
                        (e)=> this.event(e, props, icon)
                      );
                    }
                  }}
                  enableScrollWheelZoom
                  widget={['NavigationControl']}
                  zoom={13}
                  center={{ lng: 121.460977, lat: 31.227906 }}
                >
                </Map>
              </APILoader>
            </div>
          </Row>
         }}
              enableScrollWheelZoom
              widget={['NavigationControl']}
              zoom={13}
              center={{ lng: 121.460977, lat: 31.227906 }}
            >
            </Map>
          </APILoader>
        </div>
      </Row>

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

潘顾昌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值