如何用Echarts绘制以中国为中心的世界地图

3,048 阅读1分钟

一、需求背景

前段时间遇到一个需求,单位要求绘制一个以中国为中心的世界地图。但是Echarts默认的世界地图坐标数据并不是以中国为中心,通常中国是位于最东边,如下图所示:

96a6f69e8b77c1a8a1daaf93cdb8969c.gif

二、解决思路

在echarts组件无相关属性可设置改变地图中心的情况下,我们最终的办法是重新编辑世界地图的坐标数据,调整地图板块以及国家的坐标数据,从而实现让中国显示在世界地图的中间位置。

三、修改坐标数据的算法(全文重点)

1.修改“world.geo.json”文件

import world from './world.geo.json'
// 对世界地图的json文件中的经纬度坐标进行处理
const processLng = lng => {
  if (lng > -30) {
    lng = lng - 180
  } else {
    lng = lng + 180
  }
  return lng
}
// 格林兰岛表现怪异
const processLngGe = lng => {
  return lng + 180
}

world.features.map((district, index) => {
  // console.log('----district.properties.name: ', district.properties.name)
  if (district.properties.name === 'Greenland') {
    if (district.geometry.type === 'Polygon') {
      district.geometry.coordinates.map(border => {
        border.map(coord => {
          coord[0] = processLngGe(coord[0])
        })
      })
    } else {
      district.geometry.coordinates.map(border => {
        border.map(coordinates => {
          coordinates.map(coord => {
            coord[0] = processLngGe(coord[0])
          })
        })
      })
    }
  } else {
    if (district.geometry.type === 'Polygon') {
      district.geometry.coordinates.map(border => {
        border.map(coord => {
          coord[0] = processLng(coord[0])
        })
      })
    } else {
      district.geometry.coordinates.map(border => {
        border.map(coordinates => {
          coordinates.map(coord => {
            coord[0] = processLng(coord[0])
          })
        })
      })
    }
  }
})
export default world

2.针对地图上坐标的连线也需要处理,算法如上面提到的,这里再写一遍

if (lng > -30) {
    lng = lng - 180
  } else {
    lng = lng + 180
  }

在geoCoordMap.js文件中找到地图上要连线的国家坐标,根据上面的算法对纬度进行偏移,如下图绿线标注部分。 截屏2024-08-21 22.13.04.png

四、效果展示(大功告成)

截屏2024-08-21 21.48.04.png