首页 > 其他分享 >好客租房171-地图找房renderOverlays

好客租房171-地图找房renderOverlays

时间:2023-02-10 16:03:57浏览次数:46  
标签:map const 覆盖物 找房 地图 label BMapGL renderOverlays 171


renderOverlays

1接受改id参数 根据该id参数获取房源

2调用getTypeAndZoom方法获取地图缩放级别 覆盖物类别

好客租房171-地图找房renderOverlays_react.js

import React from 'react'

// 导入axios
import axios from 'axios'

// 导入封装好的 NavHeader 组件
import NavHeader from '../../components/NavHeader'

// 导入样式
// import './index.scss'
import styles from './index.module.css'

// 解决脚手架中全局变量访问的问题
const BMapGL = window.BMapGL

// 覆盖物样式
const labelStyle = {
cursor: 'pointer',
border: '0px solid rgb(255, 0, 0)',
padding: '0px',
whiteSpace: 'nowrap',
fontSize: '12px',
color: 'rgb(255, 255, 255)',
textAlign: 'center'
}

export default class Map extends React.Component {
componentDidMount() {
this.initMap()
}



// 初始化地图
initMap() {
// 获取当前定位城市
const { label, value } = JSON.parse(localStorage.getItem('hkzf_city'))
// console.log(label, value)

// 初始化地图实例
const map = new BMapGL.Map('container')
//能够在其他方法中获取到地图对象
this.map=map
// 创建地址解析器实例
const myGeo = new BMapGL.Geocoder()
// 将地址解析结果显示在地图上,并调整地图视野
myGeo.getPoint(
label,
async point => {
if (point) {
// 初始化地图
map.centerAndZoom(point, 11)
// 添加常用控件
map.addControl(new BMapGL.NavigationControl())
map.addControl(new BMapGL.ScaleControl())

/*
1 获取房源数据。
2 遍历数据,创建覆盖物,给每个覆盖物添加唯一标识(后面要用)。
3 给覆盖物添加单击事件。
4 在单击事件中,获取到当前单击项的唯一标识。
5 放大地图(级别为13),调用 clearOverlays() 方法清除当前覆盖物。
*/
const res = await axios.get(
`http://localhost:8080/area/map?id=${value}`
)
console.log('房源数据:', res)
res.data.body.forEach(item => {
// 为每一条数据创建覆盖物
const {
coord: { longitude, latitude },
label: areaName,
count,
value
} = item
// 创建覆盖物
const areaPoint = new BMapGL.Point(longitude, latitude)

const label = new BMapGL.Label('', {
position: areaPoint,
offset: new BMapGL.Size(-35, -35)
})

// 给 label 对象添加一个唯一标识
label.id = value

// 设置房源覆盖物内容
label.setContent(`
<div class="${styles.bubble}">
<p class="${styles.name}">${areaName}</p>
<p>${count}套</p>
</div>
`)

// 设置样式
label.setStyle(labelStyle)

// 添加单击事件
label.addEventListener('click', () => {
console.log('房源覆盖物被点击了', label.id)

// 放大地图,以当前点击的覆盖物为中心放大地图
// 第一个参数:坐标对象
// 第二个参数:放大级别
map.centerAndZoom(areaPoint, 13)

// 解决清除覆盖物时,百度地图API的JS文件自身报错的问题
setTimeout(() => {
// 清除当前覆盖物信息
map.clearOverlays()
}, 0)
})

// 添加覆盖物到地图中
map.addOverlay(label)
})
}
},
label
)
}

async renderOverlay(id){
const res = await axios.get(`http://localhost:8080/area/map?id=${id}`)
// console.log('renderOverlays 获取到的数据:', res)
const data = res.data.body

// 调用 getTypeAndZoom 方法获取级别和类型
const { nextZoom, type } = this.getTypeAndZoom()

data.forEach(item => {
// 创建覆盖物
this.createOverlays(item, nextZoom, type)
})
}

getTypeAndZoom(){
//调用地图的getZoom方法 来获取缩放级别
const zoom=this.map.getZoom()
console.log(zoom,"获取级别和类型")
let nextZoom,type
if(zoom>=10&&zoom<12){
nextZoom=13
type='circle'
}else if(zoom>=12&&zoom<14){
nextZoom=15
type='circle'
}else if(zoom>=14&&zoom<16){
type='rect'
}
return{
nextZoom,
type
}
}

render() {
return (
<div className={styles.map}>
{/* 顶部导航栏组件 */}
<NavHeader>地图找房</NavHeader>
{/* 地图容器元素 */}
<div id="container" className={styles.container} />
</div>
)
}
}

标签:map,const,覆盖物,找房,地图,label,BMapGL,renderOverlays,171
From: https://blog.51cto.com/u_15460007/6049555

相关文章

  • Number Sequence HDU - 1711(kmp模板)
    AC代码:#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>usingnamespacestd;constintmaxn=1e7;ints[maxn],p[maxn],nxt[maxn];intn,m;voi......
  • 杭电1171
    BigEventinHDUProblemDescriptionNowadays,weallknowthatComputerCollegeisthebiggestdepartmentinHDU.But,maybeyoudon’tknowthatComputerColl......
  • 1710.maximum-units-on-a-truck 卡车上的最大单元数
    问题描述1710.卡车上的最大单元数解题思路根据每个箱子可以装载的单元数量从大到小对boxTypes排序,然后每次将单元数量最大的箱子填入卡车。使用快速选择算法可以将时间......
  • CF1715C
    *1700Monoblock-洛谷|计算机科学教育新生态(luogu.com.cn)首先看数据范围  1≤n,m≤1e5。主要是修改1e5,查询1e5,这里的话要么O(log)做法,要么O(1)做O(log)没......
  • 电动滑板车出欧盟EN17128:2020标准测试
    EN17128:2020《载人和货物及相关设施运输的轻型机动车辆,未经道路使用类型批准-轻型电动车辆(PLEV)》于2020年10月21日发布,该标准由技术委员会CEN/TC354负责编写,由法国标......
  • 欧盟电动滑板车CE认证,EN17128测试标准详情
    电动滑板车是继传统滑板之后的又一新型滑板运动产品。电动滑板车节约能源,充电快速且续航能力强。整车造型美观、可以折叠,操作方便,驾驶更安全。电动滑板车起源于德国,发展于欧......
  • SOJ1711 题解
    题意给定\(n\)个在数轴的区间\([l_1,r_1],[l_2,r_2],...,[l_n,r_n]\)。定义\(I(x)\)为所有包含\([x,x+1]\)的区间形成的集合,即\(I(x)=\{k\mid[x,x+1]\subsete......
  • leetcode简单(数组,字符串,链表):[168, 171, 190, 205, 228, 448, 461, 876, 836, 844]
    目录168.Excel表列名称171.Excel表列序号190.颠倒二进制位205.同构字符串228.汇总区间448.找到所有数组中消失的数字461.汉明距离876.链表的中间结点836.矩形重......
  • AtCoder Beginner Contest 171
    A-αlphabet(abc171a)题目大意给定一个字母,其大写字母则输出A,否则输出a。解题思路isupper函数或者在'A'与Z之间即为大写字母。神奇的代码#include<bits/stdc+......
  • leetcode-171-easy
    ExcelSheetColumnNumberGivenastringcolumnTitlethatrepresentsthecolumntitleasappearsinanExcelsheet,returnitscorrespondingcolumnnumber.Fo......