基于ts,es6,react函数式组件 使用高德地图

实现了高德地图的POI搜索与搜索提示功能 ,封装了逻辑可以传出选址的一些信息

需要自己去申请高德地图的key https://console.amap.com/dev/key/app

根据官网的步骤即可完成

首先需要自己安装对应依赖 这里使用的umi 框架 很方便

npm i @amap/amap-jsapi-loader --save 使用npm引入高德地图

import React, { LegacyRef, useEffect, useRef } from 'react';
import { message, Input } from 'antd';
import { SearchOutlined } from '@ant-design/icons';
import AMapLoader from '@amap/amap-jsapi-loader';
import './Map.less';
// 编辑地图 传出选址的位置信息 经纬度 code 地址名   新增或修改
type GmapType = {
  LngLat?: [] as Number; //经纬度 如果为undefined 则为新增 否则为修改 地图center值为传入的经纬度
  getAddressData: (AddressData: {}) => any; //传入方法 获得地址数据
};
export default function GMap(props: GmapType) {
  const { LngLat, getAddressData }: any = props;

  const analyzeAddress = (result: any) => {
    const { lng, lat } = result.position; //经纬度
    const { address } = result; //详细地址
    const fullAddress = address.slice(address.indexOf('区', '县') + 1);
    const { adcode, province, city, district } =
      result.regeocode.addressComponent; //地址信息
    return {
      latitude: lat,
      longitude: lng,
      fullAddress: fullAddress,
      addressName: `${province}-${city}-${district}`,
      addressCode: adcode,
    };
  }; //处理地图中得到的地址结构 满足返回信息的格式

  const mapRef = useRef<any>({});
  const inputRef = useRef<any>({}); //搜索框

  async function loadGMap() {
    const AMap = await AMapLoader.load({
      key: '申请的key',
      version: '2.0',
      plugins: [],
      AMapUI: {
        version: '1.1',
        plugins: ['misc/PositionPicker'],
      },
    });
    const map = (mapRef.current.map = new AMap.Map('g-map-container', {
      mapStyle: 'amap://styles/fresh',
      zoom: 18,
      center: LngLat,
      lang: 'zh_cn',
      viewMode: '3D',
      pitch: 30,
      resizeEnable: true, //设置缩放
      keyboardEnable: false,
    }));
    AMap.plugin(
      ['AMap.ToolBar', 'AMap.Scale', 'AMap.AutoComplete', 'AMap.PlaceSearch'],
      () => {
        map.addControl(new AMap.ToolBar()); //控制缩放
        map.addControl(new AMap.Scale()); //比例尺
        const autocomplete = new AMap.AutoComplete({
          input: inputRef.current.input,
        });
        const placeSearch = new AMap.PlaceSearch({
          map: map,
        }); //构造地点查询类
        autocomplete.on('select', function (result: any) {
          //TODO 针对选中的poi实现自己的功能
          placeSearch.search(result.poi.name)
        });
      },
    ); //地图插件集的处理

    const positionPicker = new AMapUI.PositionPicker({
      mode: 'dragMap', //dragMarker设置为不可拖拽
      map: map,
    });
    positionPicker.start(); //设置开拖拽模式
    positionPicker.on('success', (result: any) => {
     
      getAddressData(analyzeAddress(result));
    }); //成功获得拖拽后周边的结果
    positionPicker.on('fail', () => {
      message.error('无法获取当前位置信息');
    });
  }

  useEffect(() => {
    window._AMapSecurityConfig = {
      securityJsCode: 'key对应的密匙',
    };
    loadGMap();
  }, [LngLat]);//当传入的经纬度改变时地图会重新渲染
  return (
    <>
      <div className="mapComponent">
        <div id="g-map-search">
          <Input
            placeholder={`输入地址`}
            prefix={<SearchOutlined />}
            size="middle"
            style={{ width: '250px' }}
            ref={inputRef}
          />
        </div>
        <div id="g-map-container"></div>
      </div>
    </>
  );
}

可以直接更改下逻辑 注意设置window._AMapSecurityConfig 否则对应的地图插件无法使用

这里使用的是异步加载插件的方式 更多的插件使用可以参考官网,

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React函数组件是一种纯粹的JavaScript函数,它接收一个props对象作为参数并返回一个React元素。以下是编写React函数组件的步骤: 1. 导入React库 首先要在代码中导入React库。我们可以使用ES6的import语句导入React库,也可以使用CommonJS的require语句导入React库。 ```javascript import React from 'react'; ``` 或者 ```javascript const React = require('react'); ``` 2. 创建函数组件 创建一个函数组件,它接收一个props对象作为参数,并返回一个React元素。你可以将这个组件函数定义放在一个单独的文件中,或者在同一个文件中定义多个组件。 ```javascript function MyComponent(props) { return ( <div> <h1>{props.title}</h1> <p>{props.description}</p> </div> ); } ``` 3. 导出函数组件函数组件导出,以便其他组件可以使用它。 ```javascript export default MyComponent; ``` 4. 使用函数组件 在其他组件使用函数组件,传递props对象作为参数。 ```javascript import React from 'react'; import MyComponent from './MyComponent'; function App() { return ( <div> <MyComponent title="Hello, World!" description="This is my first React component." /> </div> ); } export default App; ``` 这就是编写React函数组件的基本步骤。要注意的是,函数组件只能接收props对象作为参数,并且不能使用状态(state)或生命周期方法。如果需要使用状态或生命周期方法,应该使用组件

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值