antV实现离线中国2D地图并叠加拓扑(一)

业务背景:

中国地图铺满屏幕,屏幕的中间部分动态展示当前区域地图。当前区域有可能是省、市、县等,需要在当前区域展示拓扑站点,并实时弹出小面板展示当前站点详情。

实现方式:

antv-G6实现拓扑图,antv-L7绘制地图。本身L7是可以实现动态标记站点的效果,但是因为站点需要做的自定义操作较多,所以选择了叠加G6来实现。
最终实现效果展示:
效果展示
地图缩放展示:
缩放

代码实现

首先,绘制地图。原本的需求是需要展示全国的道路河流,但是搞不到数据,只能展示到省市的分界线了。

//html部分
<div ref="container" id="container"></div>
//js部分
import { Scene, PolygonLayer, Mapbox } from '@antv/l7';
import areaList from '@/views/area-list';//引用地图数据
export default {
   mounted(){
		let totaldata = { parentCode: 610000, type: 'city' };//当前区域代码和区域级别(陕西省)
		//new一个地图场景
        const scene = new Scene({
            id: 'container',
            map: new Mapbox({
                style: 'blank',//地图底图的基本样式,blank代表无底图,还可以导入自定义配色
                zoom: 0,//初始化缩放等级
                pitch: 0,//地图初始俯仰角度,一般3D地图用的上
            }),
        });
        //下面有两处地图场景样式配置加载。第一个是显示中国地图的省市区划分隔线,第二个是加载当前区域样式
        //地图的配置参数--中国地图整个纹理及配色
        scene.on('loaded', () => {
        	//Choropleth代表区域图层
           const choropleth = new Choropleth({
                width: 1000,
                height: 1000,
	            source: {
	                data: areaList,
	                joinBy: {
	                    sourceField: 'code',
	                    geoField: 'adcode',
	                },
	            },
	            viewLevel: {
	                level: 'country',
	                adcode: 100000,//100000代表中国
	            },
	            // color: {
	            //     field: 'value',
	            //     value: ['#B8E1FF', '#7DAAFF', '#3D76DD', '#0047A5', '#001D70'],
	            //     scale: { type: 'quantile' },
	            // },
	            style: {
	                opacity: 1,
	                stroke: '#0F1E38',//文字描边颜色
	                lineWidth: 0.6,//地图描边宽度
	                lineOpacity: 1,
	            },
	            label: {
	                visible: true,//标签是否可见
	                field: 'name',//标签映射的key
	                style: {
	                    fill: '#000',
	                    opacity: 0.8,
	                    fontSize: 10,
	                    stroke: '#fff',
	                    strokeWidth: 1.5,
	                    textAllowOverlap: false,
	                    padding: [5, 5],
	                },
	            },
	            state: {
	                active: { stroke: '#0F1E38', lineWidth: 1 },//鼠标悬浮交互的样式
	            },
            });
            choropleth.addToScene(scene);
        })
        //当前区域的样式及配色
        scene.on('loaded', () => {
            const data = areaList
            .filter(({ level, parent }) => level === totaldata.type && parent === totaldata.parentCode)
            .map((item) => Object.assign({}, item, { value: Math.random() * 5000 }));//给选中的区域随机配色
            const choropleth = new Choropleth({
                width: 200,
                height: 200,
                source: {
                    data: data,
                    joinBy: {
                        sourceField: 'adcode',
                        geoField: 'adcode',
                    },
                },
                viewLevel: {
                    level: 'province',//区域的级别
                    adcode: totaldata.parentCode//区域的代码
                },
                autoFit: true,//开启自适应
                color: {
                    field: 'value',
                    value: ['#B8E1FF', '#7DAAFF', '#3D76DD', '#0047A5', '#001D70'],
                    scale: { type: 'quantize' },//关键字段的映射类型:等间距
                },
                style: {
                    opacity: 1,
                    stroke: '#ccc',//区域描边
                    lineWidth: 0.6,
                    lineOpacity: 1,
                },
                label: {
                    visible: true,
                    field: 'name',
                    style: {
                        fill: '#000',//区域标签颜色
                        opacity: 0.8,
                        fontSize: 10,
                        stroke: '#fff',//区域标签描边颜色
                        strokeWidth: 1.5,
                        textAllowOverlap: false,
                        padding: [5, 5],
                    },
                },
                state: {
                    active: { stroke: 'black', lineWidth: 1 },//鼠标悬浮交互的样式
                },
            });
            choropleth.addToScene(scene);
        });
        scene.setMapStatus({
            dragEnable: false, // 是否允许地图拖拽
            keyboardEnable: false, // 是否允许形键盘事件
            doubleClickZoom: false, // 双击放大
            zoomEnable: false, // 滚动缩放
            rotateEnable: false // 旋转
        })
	}
}
下一篇写实现地图上的拓扑
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: ANTV G6是一款智能电视机顶盒,它不仅可以通过网络观看在线视频,还提供了离线文档的功能。 ANTV G6的离线文档功能允许用户在没有网络连接的情况下访问和浏览本地存储的文档文件。用户可以通过USB接口或者其他存储设备将文档文件导入到G6中,然后在离线状态下查看和编辑这些文档。 离线文档功能使得用户可以在没有网络的情况下继续处理文档工作,提高了工作和学习的效率。无论是在出差、旅行或者没有网络覆盖的地方,用户都可以依靠ANTV G6来查看和编辑文档,保证工作的顺利进行。 ANTV G6不仅支持常见的文档格式,如Word、Excel和PowerPoint,还支持PDF、TXT等多种格式。用户可以通过文件管理系统在G6中浏览并打开各种格式的文件,进行阅读、编辑和保存。 此外,ANTV G6的离线文档功能还提供了一些便捷的操作选项,如快速搜索、书签、阅读模式等。用户可以根据自己的需求和喜好进行设置,提高使用的便捷性和个性化。 总之,ANTV G6的离线文档功能为用户提供了更加便利和灵活的文档处理方式,无论是在有网络的情况下,还是在没有网络的环境中,用户都可以通过G6进行文档工作,提升工作和学习的效率。 ### 回答2: ANTV G6是一款智能电视盒子,它可以通过连接到网络收看各种在线视频内容。但是,ANTV G6也支持离线播放,即使在没有网络连接的情况下,用户也可以通过存储在盒子内部的离线文档来观看内容。 离线文档功能使得用户可以在没有网络时仍然享受丰富的内容。用户可以下载电影、电视剧、纪录片等视频文件,并将其保存在ANTV G6的存储空间内。用户还可以下载各种格式的音乐文件,创建自己的音乐库。此外,用户还可以下载电子书、漫画等文档文件,并通过ANTV G6的离线文档功能进行阅读。 ANTV G6的离线文档功能具有很高的灵活性和可定制性。用户可以根据自己的口味和需求,选择并下载自己喜欢的内容。而且,用户可以通过文件管理器轻松管理和排序这些离线文档,让自己的媒体库更加整洁有序。 总的来说,ANTV G6的离线文档功能为用户提供了便捷的娱乐方式。无论是在没有网络的地方、网络出现故障或者想要隐私地享受内容,用户都可以通过离线文档功能满足自己的需求。ANTV G6的离线文档功能成为用户对于这款智能电视盒子的一个重要选择因素。 ### 回答3: ANTV G6是一款智能电视盒子,它可以连接到电视并提供多种功能。ANTV G6支持离线文档功能,这意味着用户可以在没有网络连接的情况下访问和查阅文档。 离线文档功能非常实用,特别是在没有网络连接或网络不稳定的情况下。用户可以事先下载需要的文档,然后在没有网络时随时打开并查看。这样,即使用户没有互联网,也可以方便地查阅重要资料或文件。 ANTV G6的离线文档功能支持多种文档格式,如PDF、DOC、PPT等常见格式。用户可以通过安装相应的文档阅读器应用程序来打开和阅读这些文档。除了查看文档外,用户还可以进行一些基本的操作,如搜索、添加书签、标注等。 另外,ANTV G6的离线文档功能还提供了快速跳转和目录导航等便捷功能,使得用户能够更方便地浏览和定位到所需的内容。此外,ANTV G6还支持对文档进行分享,用户可以将文档分享给其他设备或其他用户。 总的来说,ANTV G6的离线文档功能为用户提供了便捷的文档访问和查阅体验。无论用户身处何地,只要有ANTV G6,就能够随时打开和浏览各种文件。这对于那些需要频繁查阅文档并且经常处于没有网络连接的环境中的用户来说,无疑是一项非常有用且实用的功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值