本人参与的一个智慧园区的项目,网络地图开发出来的后期效果如下图所示:

初次拿到设计图时还没有左上角的全局搜索框,第一步首先是绘制出浮在上层的四张卡片,我是用遍历的方式依次渲染的:

        {showCards.map((item, index) => {let name = cardInfoName[index];return (<CardInfotitle={item}id={index}key={index}isLoad={isLoad}isLoadAlarmList={this.isLoadAlarmList}cardInfo={cardInfo[name]}cardLoading={cardLoading[index]}getSearchKey={this.getSearchKey}appid={appId}/>);})}

第三张卡片涉及到滚动加载,和后期增加的点击搜索功能,所以增加了getSearchKey的方法,其中滚动加载使用的是react-infinite-scroller,结合antd的TimeLine:

 <div className="timeline">{val.length > 0 ? (<InfiniteScrollinitialLoad={false}pageStart={0}loadMore={this.handleInfiniteOnLoad}useWindow={false}hasMore={this.state.hasMore}><Timeline>{val.map((item, index) => {return (<Timeline.Item key={index}><div onClick={debounce(() => this.goSearch(item.devEUI), 500)}><span>{this.formateDate(item.createTime)}</span><span className="alarmType"><i className="iconfont icon-yichang" />{item.alarmTypeLabel}</span><p>{item.tmnName}</p></div></Timeline.Item>);})}</Timeline></InfiniteScroll>) : (<div className="text-center"><i className="iconfont icon-zanwushuju image-icon" /><p>暂无数据</p></div>)}</div>

之后,开始高德地图上信息的展示
这里涉及到一个百度地图经纬度和gps转高德的一个算法,使用的是coordtransform:

transferLngLats = (bd_lng: number, bd_lat: number, type = 'gcj-02') => {if ('WGS84' === type.toUpperCase()) {return coordtransform.wgs84togcj02(bd_lng, bd_lat);} else if ('BD-09' === type.toUpperCase()) {return coordtransform.bd09togcj02(bd_lng, bd_lat);}return [bd_lng, bd_lat];};

高德地图上的终端展示方式一共分为3种

  1. 单个终端展示

分为在线(正常,告警)、离线,通过不同的图标来区分,点击图标获取对应的终端信息。
①.获取所有终端所在的位置经纬度,状态,坐标类型等信息,通过坐标类型,把其他类型的经纬度与转换成高德地图类型
②.遍历每一个终端经纬度,通过高德地图的new AMap.LngLat方法将经纬度结合成一个point,并且通过终端状态,区分将展示的图标的颜色、同时增加type属性
③.通过new AMap.Icon,把选择好的图标配置好相关尺寸、偏移量等,再使用new AMap.Marker(使用extData属性增加status类型,用来存放type)和之前生成的point,将图标用map.add放置在地图上
④.增加marker的click事件,点击的时候首先展示loading弹窗,接着用之前生成的point的经纬度和获取到的所有终端位置比对,相等的时候获取到终端Id
⑤.根据上述Id调接口获取此终端的详细信息,将信息传递给TerInfo组件(提前声明this.terInfoRef = React.createRef()和this.terInfoWindow,并且给TerInfo组件加上ref={this.terInfoRef}属性),把此组件放到信息窗中,并且代替之前的loading弹窗,展示终端的详细信息
把此组件放到信息窗中:this.terInfoWindow.setContent(ReactDOM.findDOMNode(this.terInfoRef.current));


其中声明terInfoWindow:
    this.terInfoWindow = new AMap.InfoWindow({isCustom: true,closeWhenClickMap: true,offset: new AMap.Pixel(130, 248), //left  top});

2.两个以上的终端,位置相邻时候自动聚合的展示

聚合的图标中含有总聚合终端的总数,分为蓝色(正常,离线),橙色(有告警),点击展示当前聚合终端的离线数量和告警数量。
声明聚合信息展示弹窗:

    this.clustererWindow = new AMap.InfoWindow({isCustom: true,closeWhenClickMap: true,offset: new AMap.Pixel(136, 65),});

在单个终端展示的时候,增加了type类型, 【③.通过new AMap.Icon,把选择好的图标配置好相关尺寸、偏移量等,再使用new AMap.Marker(使用extData属性增加status类型)和之前生成的point,将图标用map.add放置在地图上】,之后通过 this.markerClusterer.addMarker(marker),将marker放到聚合中。
然后根据之前增加的status,通过mark.getExtData().status来获取终端type类型,统计告警终端数和离线终端数(一个终端可以同时属于告警状态和离线状态)

    AMap.plugin(['AMap.MarkerClusterer'], () => {this.markerClusterer = new AMap.MarkerClusterer(this.map, [], {gridSize: 20,minClusterSize: 2,zoomOnClick: false,renderCluserMarker: obj => {const type = !!obj.markers.filter(mark => mark.getExtData().status === 2 || mark.getExtData().status === 3).length;const className = `clusterer ${type ? 'alarmBg' : 'normalBg'}`;obj.marker.setContent(`<div class="${className}">${obj.count}</div>`);},});this.markerClusterer.on('click', obj => {const totalNum = obj.markers.length;let alarmNum = 0;let offlineNum = 0;obj.markers.forEach(item => {const status = item.getExtData().status;if (status === 3) {alarmNum++;offlineNum++;}if (status === 2) {alarmNum++;}if (status === 0) {offlineNum++;}});this.clustererWindow.setContent(`<div class="mapInfo clustererInfo"><div class="info_title">汇总情况</div><div class="li">告警终端 : ${alarmNum}</div><div class="li">离线终端 : ${offlineNum}</div></div>`);this.clustererWindow.open(this.map, obj.lnglat);});});

3.绑定区域的终端展示

绑定区域的终端,在网络地图上展示该区域的终端汇总信息,如果要查看终端的具体信息,需要点击进入当前地图。

①.获取所有区域的位置信息,并且转换经纬度为高德的
②.根据获取到的园区中心点,将此区域的终端总数展示在marker里,放置在中心点上;marker的点击展示弹窗方式与单个终端一致。
③.①中获取到的位置包含区域的各个点经纬度坐标,转化坐标成高德地图上的点,使用new AMap.Polygon方法绘制出该区域在地图上的位置。

高德地图上展示的信息主要是这些,其中的状态判断等这里就不一一详述了,接下来开始本地地图部分:

![图片上传中...]

高德地图上展示终端信息相关推荐

  1. DataV动态GPS数据源在高德地图上坐标转换方案

    随着物联网IoT的蓬勃发展,大量数据上云需要展示.DataV是一款数据可视化利器,轻轻松松不用搭建服务器,即可搭建一个精美的数据大屏. 对于地图坐标展示,DataV目前的卫星图使用高德的坐标系,即国测 ...

  2. android高德marker添加点击,高德地图上添加marker,给每一个marker添加点击事件。...

    高德地图上添加marker,给每一个marker添加点击事件. 高德地图上添加marker,给每一个marker添加点击事件.javascript var watch = [] $.ajax({ ty ...

  3. 在百度地图上展示dwg/dxf

    1.目标 将autocad道路工程图纸展示在百度地图上. 案例:https://www.synscen.com/dxf2map 2.步骤 2.1 dwg转dxf 使用oda转换工具(https://w ...

  4. Python地理地图可视化:folium把百度地图中国城市中心经纬度解析出来并在地图上展示(三)

    python地理地图可视化:folium把百度地图各个城市经纬度解析出来并在地图上展示(三) 上一篇(https://zhangphil.blog.csdn.net/article/details/1 ...

  5. 日化美妆如何在高德地图上投放广告?高德地图投放广告的效果

    在高德地图上投放日化美妆类的广告是有要求的,像是一般类的化妆品产品,个人护理产品和家用的清洁品牌产品是可以投放的,带有保健或者治疗效果的特殊化妆品或者私人用品等产品是不允许投放的,特殊化产品包括染发, ...

  6. 小程序结合腾讯地图(QQMapWX)SDK做位置周边搜索在地图上展示气泡点,点击气泡展示不同状态

    1.背景: 在微信小程序中,地图上展示一个坐标点周边的医院学校等周边设施,通过地图上气泡的方式.点击气泡展示不同的气泡状态,点击导航跳转到对应气泡点所在的坐标位置. 2.实现思路: 2.1布局: 地图 ...

  7. 高德地图实现展示多个规划的路线

    各位只需要掌握如果展示一条线路再看本文,就会展示多条线路了 各位只需要掌握如果展示一条线路再看本文,就会展示多条线路了 各位只需要掌握如果展示一条线路再看本文,就会展示多条线路了 你能看懂本文的前提是 ...

  8. 在高德地图上添加折线

    一条直线有两个端点确定,所以想要在地图上添加一条可展示的直线或折线,需要明确点位的具体经纬度,只需要调用高德api即可完成 1.先获取精准的点位坐标 可以通过高德的点击事件获取点击位置的坐标,例如: ...

  9. android高德地图上加自定义菜单,高德地图Android室内地图如何自定义覆盖物

    高德地图Android室内地图如何自定义覆盖物 亲,小德看到亲已经在开坛创建工单咨询了呢,建议亲耐心等待回复哦,会有开发大神给亲回复哦~ gao de di tu a n d r o i d shi ...

最新文章

  1. Sublime_正则查找替换
  2. Mozilla Firefox 54 今起支持开启e10s多进程功能
  3. IE 市场份额暴跌,Edge 能否守住微软的辉煌
  4. Java – Reading a Large File Efficiently--转
  5. 分治法 Strassen算法计算方阵相乘
  6. 购物车ajax php json,Ajax+json实现购物车结算
  7. SQL Service 数据库 基本操作 视图 触发器 游标 存储过程
  8. visio 绘图矢量图素材网站
  9. Excel技能培训之十四 统计函数count,countif,counta,countblank,large,small,average,max,min
  10. 大点再大点个性化超大MSN头像(转)
  11. 学习云计算简单吗?专科生学习云计算就业前景如何?
  12. html炫酷动态时钟代码,js动态炫酷数字时钟
  13. 学习日记——Quartus工程创建与运行
  14. 【XAMPP】phpMyAdmin安装和配置_解决修改密码后错误问题
  15. 蓦然认知全球发布会:用新的技术引擎为设备商和传统企业赋能丨Xtecher 观察
  16. h5耳机线弯曲了怎么办_最烦人的耳机线,总是像麻花一样缠绕在一起,这是什么个道理...
  17. 【Python实例学习】用Python的xlsxwriter模块,进行Excel表格插入图标的操作
  18. LaTeX中CTeX版本日期格式设置英文
  19. Django——创建数据库和表
  20. 初识kotlin(初用kotlin一时爽、一直用一直爽)

热门文章

  1. GlusterFS分布式存储系统
  2. 在线文本转二进制工具
  3. java udp 线程,Java中的UDP DatagramSocket线程的高CPU使用率
  4. 32 位的有符号整数_「js基础」JavaScript逻辑和位运算符归纳
  5. Golang 退出chroot环境的方法
  6. web测试知识点整理
  7. centos7 服务器安装nginx,mysql,php
  8. 异步任务结果显示策略
  9. shipyard中文版发布
  10. 25个增强iOS应用程序性能的提示和技巧--高级篇