Highmaps 是继承自 Highcharts 的专门用于地图的图表插件。Highmaps 除了根据值展示地理区域色块外,还支持线段(可以表示公路,河流等)、点(城市,兴趣点等)等其他地理元素。

      Highmaps 可以单独使用,也可以作为 Highcharts 的一个插件来使用。

      一、加载 js 文件

      Highcharts 使用 方法一样,Highmaps 只需要一个 js 文件即可运行

      1. <script src=https://img.hcharts.cn/highmaps/highmaps.js></script>

      如果是结合 Highcharts 一起使用,则是引入 map.js 即可

      1. <script src=https://img.hcharts.cn/highcharts/highcharts.js></script>
      2. <script src=https://img.hcharts.cn/highmaps/modules/map.js></script>

      二、加载地图数据文件

      Highmaps 支持 GeoJSON 标准数据,大多数 GIS 软件支持将常见的 GIS 数据文件(例如 Shapefile、KML)转换成 GeoJSON。

      目前有三种方式获取或创建地图数据:

      • 使用我们提供的 地图数据集,这里有 使用说明文档
      • 利用我们提供的 在线工具 将 SVG 地图转换成
      • 利用 GIS 软件将 GIS 数据转换成 GeoJSON 数据
      • 利用 SVG 编辑器绘制并使用我们的在线工具转换,详细步骤请参考 自定义地图 教程
        我们提供的地图数据集一般有两种格式,JS 和 JSON 文件,两者内容基本相同,只是加载方式不同,下面以加载中国地图(china.js)数据来说明:

      1. 加载 js 文件

      直接以 script 标签的形式加载文件,对应的取地图数据的方法是:

      1. <script src="https://data.jianshukeji.com/geochina/china.js"></script>
      2. <script>
      3. var mapdata = Highcharts.maps['cn/china'];
      4. </script>

      其中 Highcharts.maps[‘cn/china’] 可以通过查看文件获得。

      2. 加载 json 文件

      由于跨域问题,所以加载 json 时需要用到 jsonp,这里直接用我们提供的接口即可

      1. $.getJSON('https://data.jianshukeji.com/jsonp?filename=geochina/china.json&callback=?', function(data) {
      2. var mapdata = data;
      3. });

      三、初始化地图

      同 Highcharts 一样,Highmaps 也有多种初始化方式。如果您是以 jQuery 插件的形式运行 Highmaps,可以通过下面的方法初始化图表:

      1. $('#container').highcharts('Map', {
      2. // ... 图表配置
      3. });

      否则就用 Highcharts.mapChart 初始化函数

      1. var map = Highcharts.mapChart('container', {
      2. // ... 图表配置
      3. });

      四、加载数据并与地图关联

      加载地图数据并初始化图表后,我们可以将业务数据配置在 series.data 中,格式如下:

      1. $.getJSON('https://data.jianshukeji.com/jsonp?filename=geochina/china.json&callback=?', function(mapdata) {
      2. var map = Highcharts.mapChart('container', {
      3. series: [{
      4. mapData: mapdata,
      5. data: [{
      6. name: '北京',
      7. value: 2000,
      8. rank: 1
      9. },{
      10. name: '上海',
      11. value: 1500,
      12. rank: 2
      13. }]
      14. }]
      15. });
      16. });

      需要注意的是,设置完数据后,我们还需要指定数据与地图数据的关联属性,即 joinBy,例如:

      1. series: [{
      2. mapData: mapdata,
      3. data: [{
      4. name: '北京',
      5. value: 2000,
      6. rank: 1
      7. }, {
      8. name: '上海',
      9. value: 1500,
      10. rank: 2
      11. }],
      12. joinBy: 'name'
      13. }]

      在线试一试

      GeoJSON 中的属性

      表示的是 data 里的 name 值与地图数据里的 properties.name 进行关联,并将对应的数据展示在对应的地图区域上,另外 joinBy 可以设置为包含两个值的数组,第一个值表示地图数据的 key,第二个值表示数据里的 key

      1. series: [{
      2. mapData: mapdata,
      3. data: [{
      4. city: '北京',
      5. value: 2000,
      6. rank: 1
      7. }, {
      8. city: '上海',
      9. value: 1500,
      10. rank: 2
      11. }],
      12. joinBy: ['name', 'city']
      13. }]

      在线试一试

      原文: https://www.hcharts.cn/docs/highmaps-started