/*
|
* @Author: dminyi 1301963064@qq.com
|
* @Date: 2024-08-17 14:41:57
|
* @LastEditors: dminyi 1301963064@qq.com
|
* @LastEditTime: 2024-08-23 15:17:06
|
* @FilePath: \gzDyh\gz-customerSystem\src\views\register\visit\component\map.jsx
|
* @Description: 地图
|
*/
|
import React, { useEffect, useRef, useState } from 'react';
|
import { Map, Marker, NavigationControl, InfoWindow } from 'react-bmapgl';
|
import { Form, Input, Button, Message } from '@arco-design/web-react';
|
import { Row, Col } from 'antd';
|
const FormItem = Form.Item;
|
|
const formItemLayout = {
|
labelCol: {
|
span: 4,
|
},
|
wrapperCol: {
|
span: 17,
|
},
|
};
|
|
export default function MapView(props) {
|
const mapRef = useRef()
|
const formRef = useRef()
|
const [addressList, setAddressList] = useState([])
|
|
useEffect(() => {
|
if (mapRef) {
|
let geolocation = new window.BMapGL.Geolocation();
|
geolocation.getCurrentPosition(function (r) {
|
if (this.getStatus() === 0) {
|
handleAnalysis(r.point)
|
} else {
|
Message.warning('failed' + this.getStatus());
|
}
|
});
|
}
|
}, [mapRef])
|
|
const handleSubmit = () => {
|
if (formRef.current) {
|
formRef.current.validate(undefined, (errors, values) => {
|
if (!errors) {
|
var myGeo = new window.BMapGL.Geocoder();
|
// 将地址解析结果显示在地图上,并调整地图视野
|
myGeo.getPoint(values.name, function (point) {
|
if (point) {
|
mapRef.current.map.centerAndZoom(point, 15);
|
mapRef.current.map.addOverlay(new window.BMapGL.Marker(point, { title: values.name }))
|
handleAnalysis(point, values.name); // 添加地点名称
|
} else {
|
Message.warning('您输入的地址没有解析到结果!');
|
}
|
}, '广州市')
|
}
|
})
|
}
|
}
|
|
//解析地址为中文
|
const handleAnalysis = (pt,name) => {
|
let geoc = new window.BMapGL.Geocoder();
|
geoc.getLocation(pt, function (rs) {
|
let addComp = rs.addressComponents;
|
let addName = addComp.province + addComp.city + addComp.district + addComp.street + addComp.streetNumber
|
if (name) {
|
addName += ` ${name}`; // 添加地点名称
|
}
|
mapRef.current.map.centerAndZoom(pt, 15);
|
mapRef.current.map.addOverlay(new window.BMapGL.Marker(pt, { title: addName }))
|
setAddressList([addName])
|
})
|
}
|
|
console.log(addressList,'addressList')
|
|
return (
|
<div>
|
<Row gutter={[16, 0]}>
|
<Col span={16}>
|
<Form
|
ref={formRef}
|
layout='inline'
|
{...formItemLayout}
|
style={{ marginBottom: '8px' }}
|
>
|
<FormItem
|
label='查询位置:'
|
field='name'
|
>
|
<Input placeholder='请输入' style={{ width: '522px' }} />
|
</FormItem>
|
<Button style={{ marginRight: '20px' }}>
|
重置
|
</Button>
|
<Button
|
type="primary"
|
onClick={handleSubmit}
|
>
|
查询
|
</Button>
|
</Form>
|
<Map
|
ref={mapRef}
|
zoom="15"
|
enableScrollWheelZoom
|
onClick={(e) => {
|
let pt = e.latlng;
|
handleAnalysis(pt,null)
|
}}
|
>
|
</Map>
|
</Col>
|
<Col span={8}>
|
<div style={{ color: '#86909C', marginTop: '43px' }}>附近地址</div>
|
<div style={{ height: 'calc(100% - 64px)', overflowY: 'scroll' }}>
|
{addressList.map(item => {
|
return <div key={item}>{item}</div>
|
})}
|
</div>
|
</Col>
|
</Row>
|
</div>
|
)
|
}
|