echarts 渲染 geojson 常见问题记录

转载请加原文链接。

希望各位转载本文章的时候不要直接复制粘贴(因为格式可能会乱,你也不希望每次百度到的结果前篇一律且参差不齐吧!)

效果图

如何找 GeoJson 数据

  1. 找到具有案例的某某官网,如:echarts
  2. 控制台查看网络请求
  3. 找到官网所使用的数据来源,可能是 js 也可能是 json 数据。
  4. 下载下来提取想要的数据即可

本人常用的数据下载地址:

阿里云的地图选择器Natural EarthGeoJson.ioHighcharts 世界地图

合并 GeoJson 数据

你可能希望画一个 世界地图 ,又希望这份数据里面包含详细的 中国省份地图 。那你不妨把 china.json 的数据直接拷贝到 world.json 的源数据中去。(可以代码实现也可以手动拷贝,请不要破坏原有的数据结构)

渲染地名发生位置偏移

经常有数据的地名不在区域内部显示,本人尝试设置 label.offset 来解决问题,但设置无效。最终修改 json 文件,添加 "cp": [lng, lat] 解决了问题。如:

"properties": {
  "name": "Japan",
  "cp": [139.2612315007275, 37.21842217845101], // 没有就添加此属性
  "childNum": 28
}

自定义渲染地名

参考官方文档:geo.regions

大家应该都遇到过地图上地名挤作一团的情况,有的时候其实我们并不关心某些地区。那么我们可以自定义显示想要显示的地名。

第一步:先设置不显示地名

geo: {
  ...
  label: {
    show: false
  }
  ...
}

第二步:单独设置 regions

geo: {
  ...
  regions: [{
    name: '中华人民共和国', // 地名
    label: {
        show: true, // 单独控制显隐
        color: 'red'
    }
  }],
  ...
}

为不同区域上色也可以使用此方式。

获取点击位置的经纬度

参考官方文档:echartsInstance.convertFromPixel

echartsInstance.getZr().on('click', (params) => {
  console.log(echartsInstance.convertFromPixel({ geoIndex: 0 }, [params.event.offsetX, params.event.offsetY]));
});

这里直接用 echartsInstance.on('click', (params) => { /*...*/ }) 将无法获取非 geojson 数据外的坐标。

拖动和缩放画布事件

这个官方文档暂时没有明确提供说明。

echartsInstance.on('georoam', (params) => {
  // zoom 作为标识判断事件类型
  if (params.zoom) {
    console.log('触发缩放事件')
  } else {
    console.log('触发拖拽事件')
  }
})

你可能会在画布上画一些散点图,然后在对画布进行缩放的时候导致散点图慢慢发生偏移,不妨尝试设置 animation: false

改变尺寸

参考官方文档:echartsInstance.resize

打开调试的时候发现地图的大小不会随窗口的大小而自适应的发生改变,查阅官方文档发现需要手动触发 echartsInstance.resize()

window.addEventListener('resize', () => { echartsInstance.resize() })

地名映射表(英对中)

用于 geonameMap

{
   'Afghanistan': '阿富汗',
   'Angola': '安哥拉',
   'Albania': '阿尔巴尼亚',
   'United Arab Emirates': '阿联酋',
   'Argentina': '阿根廷',
   'Armenia': '亚美尼亚',
   'French Southern and Antarctic Lands': '法属南半球和南极领地',
   'Australia': '澳大利亚',
   'Austria': '奥地利',
   'Azerbaijan': '阿塞拜疆',
   'Burundi': '布隆迪',
   'Belgium': '比利时',
   'Benin': '贝宁',
   'Burkina Faso': '布基纳法索',
   'Bangladesh': '孟加拉国',
   'Bulgaria': '保加利亚',
   'The Bahamas': '巴哈马',
   'Bosnia and Herzegovina': '波斯尼亚和黑塞哥维那',
   'Belarus': '白俄罗斯',
   'Belize': '伯利兹',
   'Bermuda': '百慕大',
   'Bolivia': '玻利维亚',
   'Brazil': '巴西',
   'Brunei': '文莱',
   'Bhutan': '不丹',
   'Botswana': '博茨瓦纳',
   'Central African Republic': '中非共和国',
   'Canada': '加拿大',
   'Switzerland': '瑞士',
   'Chile': '智利',
   'China': '中华人民共和国',
   'Ivory Coast': '象牙海岸',
   'Cameroon': '喀麦隆',
   'Democratic Republic of the Congo': '刚果民主共和国',
   'Republic of the Congo': '刚果共和国',
   'Colombia': '哥伦比亚',
   'Costa Rica': '哥斯达黎加',
   'Cuba': '古巴',
   'Northern Cyprus': '北塞浦路斯',
   'Cyprus': '塞浦路斯',
   'Czech Republic': '捷克共和国',
   'Germany': '德国',
   'Djibouti': '吉布提',
   'Denmark': '丹麦',
   'Dominican Republic': '多明尼加共和国',
   'Algeria': '阿尔及利亚',
   'Ecuador': '厄瓜多尔',
   'Egypt': '埃及',
   'Eritrea': '厄立特里亚',
   'Spain': '西班牙',
   'Estonia': '爱沙尼亚',
   'Ethiopia': '埃塞俄比亚',
   'Finland': '芬兰',
   'Fiji': '斐',
   'Falkland Islands': '福克兰群岛',
   'France': '法国',
   'Gabon': '加蓬',
   'United Kingdom': '英国',
   'Georgia': '格鲁吉亚',
   'Ghana': '加纳',
   'Guinea': '几内亚',
   'Gambia': '冈比亚',
   'Guinea Bissau': '几内亚比绍',
   'Equatorial Guinea': '赤道几内亚',
   'Greece': '希腊',
   'Greenland': '格陵兰',
   'Guatemala': '危地马拉',
   'French Guiana': '法属圭亚那',
   'Guyana': '圭亚那',
   'Honduras': '洪都拉斯',
   'Croatia': '克罗地亚',
   'Haiti': '海地',
   'Hungary': '匈牙利',
   'Indonesia': '印尼',
   'India': '印度',
   'Ireland': '爱尔兰',
   'Iran': '伊朗',
   'Iraq': '伊拉克',
   'Iceland': '冰岛',
   'Israel': '以色列',
   'Italy': '意大利',
   'Jamaica': '牙买加',
   'Jordan': '约旦',
   'Japan': '日本',
   'Kazakhstan': '哈萨克斯坦',
   'Kenya': '肯尼亚',
   'Kyrgyzstan': '吉尔吉斯斯坦',
   'Cambodia': '柬埔寨',
   'South Korea': '韩国',
   'Dem. Rep. Korea': '韩国',
   'Kosovo': '科索沃',
   'Kuwait': '科威特',
   'Laos': '老挝',
   'Lao PDR': '老挝',
   'Lebanon': '黎巴嫩',
   'Liberia': '利比里亚',
   'Libya': '利比亚',
   'Sri Lanka': '斯里兰卡',
   'Lesotho': '莱索托',
   'Lithuania': '立陶宛',
   'Luxembourg': '卢森堡',
   'Latvia': '拉脱维亚',
   'Morocco': '摩洛哥',
   'Moldova': '摩尔多瓦',
   'Madagascar': '马达加斯加',
   'Mauritius': '毛里求斯',
   'Seychelles': '塞舌尔',
   'Br. Indian Ocean Ter.': '印度洋',
   'Mexico': '墨西哥',
   'Macedonia': '马其顿',
   'Mali': '马里',
   'Myanmar': '缅甸',
   'Montenegro': '黑山',
   'Mongolia': '蒙古',
   'Mozambique': '莫桑比克',
   'Mauritania': '毛里塔尼亚',
   'Malawi': '马拉维',
   'Malaysia': '马来西亚',
   'Namibia': '纳米比亚',
   'New Caledonia': '新喀里多尼亚',
   'Niger': '尼日尔',
   'Nigeria': '尼日利亚',
   'Nicaragua': '尼加拉瓜',
   'Netherlands': '荷兰',
   'Norway': '挪威',
   'Nepal': '尼泊尔',
   'New Zealand': '新西兰',
   'Oman': '阿曼',
   'Pakistan': '巴基斯坦',
   'Panama': '巴拿马',
   'Peru': '秘鲁',
   'Philippines': '菲律宾',
   'Papua New Guinea': '巴布亚新几内亚',
   'Poland': '波兰',
   'Puerto Rico': '波多黎各',
   'North Korea': '北朝鲜',
   'Korea': '朝鲜',
   'Portugal': '葡萄牙',
   'Paraguay': '巴拉圭',
   'Qatar': '卡塔尔',
   'Romania': '罗马尼亚',
   'Russia': '俄罗斯',
   'Rwanda': '卢旺达',
   'Western Sahara': '西撒哈拉',
   'Saudi Arabia': '沙特阿拉伯',
   'Sudan': '苏丹',
   'South Sudan': '南苏丹',
   'Senegal': '塞内加尔',
   'Solomon Islands': '所罗门群岛',
   'Sierra Leone': '塞拉利昂',
   'El Salvador': '萨尔瓦多',
   'Somaliland': '索马里兰',
   'Somalia': '索马里',
   'Republic of Serbia': '塞尔维亚共和国',
   'Suriname': '苏里南',
   'Slovakia': '斯洛伐克',
   'Slovenia': '斯洛文尼亚',
   'Sweden': '瑞典',
   'Swaziland': '斯威士兰',
   'Syria': '叙利亚',
   'Chad': '乍得',
   'Togo': '多哥',
   'Thailand': '泰国',
   'Tajikistan': '塔吉克斯坦',
   'Turkmenistan': '土库曼斯坦',
   'East Timor': '东帝汶',
   'Trinidad and Tobago': '特里尼达和多巴哥',
   'Tunisia': '突尼斯',
   'Turkey': '土耳其',
   'United Republic of Tanzania': '坦桑尼亚联合共和国',
   'Uganda': '乌干达',
   'Ukraine': '乌克兰',
   'Uruguay': '乌拉圭',
   'United States of America': '美国',
   'United States': '美国',
   'Uzbekistan': '乌兹别克斯坦',
   'Venezuela': '委内瑞拉',
   'Vietnam': '越南',
   'Vanuatu': '瓦努阿图',
   'West Bank': '西岸',
   'Yemen': '也门',
   'South Africa': '南非',
   'Zambia': '赞比亚',
   'Zimbabwe': '津巴布韦'
}
  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
ECharts是一款开源的JavaScript图表库,可以通过结合GeoJSON数据实现地图的绘制,并标。 在使用ECharts绘制地图时,需要先获取GeoJSON地理信息数据,GeoJSON是一种基于JSON的地理信息数据格式,可以表示地理特征和属性信息。可以从开放的地理信息数据库或者其他数据源获取相应的GeoJSON数据。 接下来,通过ECharts的API将GeoJSON数据加载到地图中,使用`echarts.registerMap`方法将GeoJSON数据注册为地图,然后可以通过设置`series`中的`map`属性来使用该地图。 同时,标也是一种很常见的需求。可以使用ECharts的`series`中的`scatter`或者`effectScatter`来实现标的功能。`scatter`是散图,可以在地图上绘制多个散,并可以根据不同的数据设置不同的颜色、大小等属性。`effectScatter`是带有涟漪特效的散图,可以给散添加动态的涟漪效果。 通过配置`series`中的`data`属性,将对应的位置信息传入,即可在地图上显示出标。可以通过设置标的图标样式、大小、颜色等属性,来实现不同的效果和展示需求。 综上所述,只需获取到GeoJSON数据,使用ECharts的API加载并注册为地图,再通过配置`series`的`scatter`或者`effectScatter`来实现标的功能,即可利用ECharts结合GeoJSON绘制地图,并在地图上标。最后通过设置不同的样式和属性,可以实现不同的地图展示效果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值