如何用ECharts动态在地图上标识点

如何用ECharts动态在地图上标识点,第1张

ECharts可以很方便的在网页上绘制地图,图表,并且可以提供下载图像,放大,缩小,拖动等功能,今天主要说一下它的地图类型(type:'map')是如何实现的.

首先在ECharts地图的坐标需要我们存储在一个geoCoord属性里,它是一个JS的字典对象,由键/值对组成,键表示点的名称,值则表达它的坐标,由经纬度组成,它是一个数组,如[136.00,32.00]它就表示了一个坐标.

地图类型的图表需要关注的元素

title:标题,显示这个地图所表示的名称

  title: {

text: '清大云点亮中国',

subtext: 'Tsingda.Cloud',

sublink: '',

x: 'center',

y: 'top',

textStyle: {

color: '#fff'

}

}

toolbox:工具栏,显示一些显示的工具,放大,缩小,查看数据集,下载图像等

toolbox: {

show: true,

feature: {

mark: { show: true },

dataView: { show: true, readOnly: false },

restore: { show: true },

saveAsImage: { show: true }

}

}

legend:图标显示,当series有多个地图时,这个值用到显示多个地图的图标,可以是横向显示和纵向显示

legend: {

x: 'left',

y: 'top',

data: ['在线', '离线'],//在线和离线对应的是series的名字

selectedMode: false,//选中悬浮

textStyle: {

color: '#fff'

}

}

series:地图显示,用来叠放显示地图,你可以定义多个,它们之间的关系是第一个在最上面,以此类推.

series: [

//默认

{

name: '底层模版',

type: 'map',

mapType: 'china',

data: provinceMap,

geoCoord: source,

itemStyle: {

normal: {

color: bgColor,

borderColor: "#eee",

label: {

show: true,

textStyle: {

color: "#fff"

}

}

}, emphasis: { color: "rgba(128, 128, 128, 0.5)" }

},

}]

markPoint:点标识,用来标识地图上的后,这些点通常是被存储在一个geoCoord对象上,这个对象是一个字典,这在文章开头已经介绍过.

markPoint: {//动态标记

large: true,//这个选项,悬浮自动失效

symbolSize: 2,

itemStyle: {

normal: {

shadowBlur: 2,

shadowColor: 'rgba(37, 140, 249, 0.8)',

color: onColor

}

},

data: []

}

markPoint里的data对象是这个地图上需要显示的点,它是一个字符型数组,用来存储geoCoord里的键!

setOption:将地图对象添加到指定的地图对象上

var myChart = echarts.init(document.getElementById('main'))

var option={}

myChart.setOption(option)

动态构建地图上的点标识markPoint

大概的思路是将要标记的点动态付给geoCoord和markPoint的data对象上,这样就可以动态在地图上标示点了

$.get("/map/GetOffMap", function (data) {

for (var i in data) {

option.series[0].geoCoord[data[i].longitude + "_" + data[i].latitude] = [parseFloat(data[i].longitude), parseFloat(data[i].latitude)]

option.series[1].markPoint.data.push({ name: data[i].longitude + "_" + data[i].latitude })

}

myChart.setOption(option)

1.引入 import China from '@/utils/echarts/china-map-geojson.min'

2.引入import '@/utils/echarts/sichuan'

 3.this.$echarts.registerMap('china', China.ChinaData)

 const geoCoordMap = {

      甘孜藏族自治州: [99.9207, 31.0803],

      阿坝藏族羌族自治州: [102.4805, 32.4536],

      凉山彝族自治州: [101.9641, 27.6746],

      凉山彝族自治州1: [102.1111, 28.6746],

      绵阳市: [104.7327, 31.8713],

      达州市: [107.6111, 31.333],

      广元市: [105.6885, 32.2284],

      雅安市: [102.6672, 29.8938],

      宜宾市: [104.6558, 28.548],

      乐山市: [103.5791, 29.1742],

      南充市: [106.2048, 31.1517],

      巴中市: [107.0618, 31.9977],

      泸州市: [105.4578, 28.493],

      成都市: [103.9526, 30.7617],

      资阳市: [104.9744, 30.1575],

      攀枝花市: [101.6895, 26.7133],

      眉山市: [103.8098, 30.0146],

      广安市: [106.6333, 30.4376],

      德阳市: [104.48, 31.1133],

      内江市: [104.8535, 29.6136],

      遂宁市: [105.5347, 30.6683],

      自贡市: [104.6667, 29.2786]

    }

    const mapData = [

 { name: '资阳市', value: 5 },

  { name: '乐山市', value: 6 },

  { name: '成都市', value: 7 },

  { name: '雅安市', value: 9 },

  { name: '阿坝藏族羌族自治州', value: 10 },

  { name: '凉山彝族自治州', value: 11 },

  { name: '凉山彝族自治州1', value: 12 }

    ]

    const convertData = function(data) {

      var res = []

      for (var i = 0 i < data.length i++) {

        var geoCoord = geoCoordMap[data[i].name]

        if (geoCoord) {

          res.push({

            name: data[i].name,

            value: geoCoord.concat(data[i].value),

            selected: true //点击事件

          })

        }

      }

      return res

    }

    const option = {

      geo: {

        map: '四川',

        itemStyle: {

          areaColor: '#e8f5fe',

          borderColor: '#1c85f6'

        },

        emphasis: {

          itemStyle: {

            areaColor: 'lightblue',

            shadowColor: '#fff',

            shadowBlur: 10

          },

          label: {

            show: false

          }

        }

      },

      series: [

        {

          name: '666',

          type: 'scatter',

          coordinateSystem: 'geo',

          symbol: 'pin',

          symbolSize: [20, 20],

          label: {

            normal: {

              show: true,

              textStyle: {

                color: '#2cdee5',

                fontSize: 12

              },

              position: 'bottom',

              formatter(value) {

                return value.data.value[2]

              }

            }

          },

          itemStyle: {

            normal: {

              color: '#2cdee5'

            }

          },

          data: convertData(

            mapData

          ),

          showEffectOn: 'render',

          rippleEffect: {

            brushType: 'stroke'

          },

          hoverAnimation: true,

          zlevel: 1

        }

      ]

    }

效果图:

如何在页面中调用百度地图,直接在你想要插入的页面上调用百度地图代码即可

百度地图调用API地址:http://api.map.baidu.com/lbsapi/creatmap/index.html

1.设置定位中心:直接搜索你要找的位置即可。

调用百度地图代码

2.设置地图:设置地图样式,如大小,显示,功能等。

3.添加标注:添加你要标注的地方,自定义坐标位置

4.获取代码:点击获取代码即可,在你要插入百度地图的地方出入百度地图代码

只要插入<!--引用百度地图API-->部分的代码就行。原理就是获取各省的边界坐标,然后在地图上面用不颜色的覆盖物Polygon,百度地图和谷歌地图都有同样的Polygon类。

百度地图的API相关Polygon文档在这里:http://dev.baidu.com/wiki/map/index.php?title=Class:%E8%A6%86%E7%9B%96%E7%89%A9%E7%B1%BB/Polygon

谷歌地图API相关Polygon文档在这里:https://developers.google.com/maps/documentation/javascript/reference#Polygon


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11441571.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存