Echarts 多个省份合并一个区域

对于某些特定需求,官方下载的地图数据可能并不能完全满足。例如,要求显示中国地图,但需要将山东江苏和浙江这3个省合并起来,显示“东部区域”。其他省份不变。

于是就需要对官方提供的地图数据进行修改。

一个思路是借助第三方工具,生成新区域的轮廓点,然后删除原来的3个区域。例如http://geojson.io/就提供了这样一种方式。但这样费时费力,且精度无法保证。

实际上,直接将这三个省的轮廓点合并即可。

对于地图,使用json格式引入:

$.get('js/china.json', function(chinaJson) {
    echarts.registerMap('china', chinaJson);
    var chart = echarts.init(document.getElementById('main'));
    chart.setOption({
        series: [{
            type: 'map',
            map: 'china'
        }]
    });
});
其中引入的json会解析为参数chinaJson。而一个地图的json格式如下:

{
    "type": "FeatureCollection",
    "features": [
        {
            "type": "Feature",
            "id": "01",
            "properties": {
                "name": "辽宁",
                "cp": [文本经纬度坐标]//先经度后纬度,保留到小数点后六位
            },
            "geometry": {
                "type": "Polygon",
                "coordinates": [[
                        [坐标对0], [坐标对1]...//同cp属性
                    ]
                ]
            }
        },
        {省份2},
        {省份3},
        ...
    ]
}
可见,每个省的数据主要包含在两个属性中:properties和geometry。

properties用于设置显示的文本和文本的位置。

geometry绘制地图一定是用的Polygon,其coordinates属性是所有坐标点对的集合。然而,考虑到一个完整的区域可能并不相连,例如群岛等,所以coordinates其实是一个二维数组,也就是一个Polygon的一维数组。其含义是一个区域是由多个Polygon构成,而每个Polygon是由多个点构成。

于是,我们要合并山东江苏和浙江这3个省,那么只需要将这3个省的Polygon都放到同一个coordinates数组中即可。

// 合并多个省为一个
var mergeProvinces = function(chinaJson, names, properties) {
    var features = chinaJson.features;
    var polygons = [];
    // 将指定省的polygon保存下来,并将省的数据从地图中删除
    for(var i = 0, iLen = names.length; i < iLen; i++) {
        for(var j = 0, jLen = features.length; j < jLen; j++) {
            if(features[j].properties.name == names[i]) {
                polygons = polygons.concat(features[j].geometry.coordinates);
                features.splice(j, 1);
                break;
            }
        }
    }
    // 构建新的合并区域
    var feature = {
        type: "Feature",
        id: "" + features.length,
        properties: {
            name: properties.name || ""
        },
        geometry: {
            type: "Polygon",
            coordinates: polygons
        }
    };
    if(properties.cp) {
        feature.properties.cp = properties.cp;
    }
 
    // 将新的合并区域添加到地图中
    features.push(feature);
};
 
$.get('js/china.json', function(chinaJson) {
    var params = {
        names: ["山东", "江苏", "浙江"],
        properties: {
            name: "东部区域",
            cp: [
                119.553222,
                33.724339
            ]
        }
    };
 
    mergeProvinces(chinaJson, params.names, params.properties);
 
    echarts.registerMap('china', chinaJson);
    var chart = echarts.init(document.getElementById('main'));
    chart.setOption({
        series: [{
            type: 'map',
            map: 'china'
        }]
    });
});
这样,在地图引入后就对区域进行了合并与删除,那么后续的操作跟正常引入的地图就相同了。

另外,关于地图上的坐标点,使用的是常规的经纬度。坐标对的x为经度,y为纬度。

要想查看某个地点的具体经纬度,可以借助各种在线网站,例如:http://www.gpsspg.com/maps.htm
 

转载:https://blog.csdn.net/fyyyr/article/details/81777477

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现Echarts地图显示省份,可以按照以下步骤操作: 1. 准备工作:搭建HTML页面,并引入需要的地图JSON数据。您可以在阿里云数据V图网站上下载相应的地图JSON文件[2]。 2. 配置地图数据:根据您下载的地图JSON数据,设置各个省份的地理信息。 3. 设置鼠标交互事件:可以设置鼠标移入、移除和点击事件,以实现相应的交互效果。 4. 创建地图:根据配置好的地理信息和事件,使用Echarts的API创建地图。 具体操作步骤如下: 1. 在HTML页面中,引入Echarts的JavaScript库和相关的CSS样式。 2. 下载需要的地图JSON数据,并在HTML中引入该数据。 3. 在JavaScript代码中,定义一个全局变量,用来统计每个省份有几个城市。 4. 使用Echarts的相关API配置地图的样式和数据。可以通过设置各个省份的名称、坐标等信息来实现相应的显示效果。 5. 根据需要设置鼠标交互事件,例如当鼠标移入某个省份时,可以显示该省份的详细信息或进行其他操作。 6. 最后,调用Echarts的绘图函数,将地图显示在HTML页面上。 通过以上步骤,您可以实现Echarts地图显示省份的功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [echart实现中国地图,点击可以显示各省信息](https://blog.csdn.net/qq_47410017/article/details/117265264)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值