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},
		...
	]
}

可见,每个省的数据主要包含在两个属性中:propertiesgeometry

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

### ECharts 合并地图区域方法 在ECharts合并地图区域可以通过修改GeoJSON数据来实现。具体操作涉及下载所需的地图JSON文件,编辑这些文件以移除不需要显示的边界线,并最终将调整后的JSON应用于项目。 对于希望简化这一过程的情况,GitHub上有一个非常实用的例子[^2]。此例子提供了一套完整的解决方案,允许开发者轻松地完成地图区域合并工作。通过克隆仓库中的代码至本地环境后,在浏览器里打开相应的HTML页面;此时可以根据个人需求更改默认加载的中国全境图层为其他特定地理范围内的JSON表示形式。接着指定待融合的地级市或县级行政区划名称列表作为参数传递给脚本函数调用,经过一系列计算处理之后就能得到新的多边形单元格结构体对象数组输出到JavaScript控制台上供进一步利用了。 下面是一个简单的Python脚本来展示如何自动化上述部分流程: ```python import requests from pyquery import PyQuery as pq def fetch_map_json(url): response = requests.get(url) return response.json() def merge_areas(map_data, areas_to_merge): # 创建一个新的特征集合用来保存合并的结果 merged_features = [] for feature in map_data['features']: properties = feature['properties'] if any(area in properties['name'] for area in areas_to_merge): continue merged_features.append(feature) # 将剩余未被过滤掉的feature加入到map_data中 map_data['features'] = merged_features return map_data if __name__ == "__main__": url = "path/to/your/mapfile.json" areas_list = ["area1", "area2"] # 替换成实际要合并的城市名或者区县名 original_map = fetch_map_json(url) result = merge_areas(original_map, areas_list) with open('merged_result.json', 'w') as f: json.dump(result, f) ``` 这段程序首先定义了一个`fetch_map_json()`辅助功能用于获取远程服务器上的原始地图数据集副本。随后实现了核心逻辑——即`merge_areas()`函数负责接收两个输入参数:一个是整个地图的数据字典(`map_data`)另一个是要消除其轮廓线条的目标行政单位字符串列表(`areas_to_merge`)。遍历所有要素特性字段时一旦发现匹配项就跳过不计入新创建的功能清单内从而达到隐藏效果。最后把整理好的结果序列化成JSON格式存储起来以便后续集成进可视化应用当中去。
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值