1 问题描述
想依照这样的表制作一张城市热力图, 字段如下:
城市名 | 值 |
---|---|
重庆 | 100 |
长春 | 22 |
广州 | 52 |
但在帆软中只能按照省份,或者一个省份下的城市制作热力图,而不能选择全部城市进行匹配
2 解决方案
帆软中的地图文件是以 .json 文件格式存储的,
目录:%FR_HOME%\webapps\webroot\WEB-INF\assets\map\geographic\world\中国,分为-area.json 面积文件 和 -point.json 点文件,仿照这种形式,可以构造一个城市级别的地图。
-
把目录中的 .json 文件全部复制到另外的文件夹下:F:\tmp\中国
另外因为中国城市下面不包含直辖市的信息,所以也需要将%FR_HOME%\webapps\webroot\WEB-INF\assets\map\geographic\world\ 文件夹下的 中国-area.json,中国-point.json 文件也复制到 F:\tmp\中国 中 -
下面的 python 代码会将数据进行合并。
-
最后将合并后生成的文件 city-area.json、city-point.json 复制到%FR_HOME%\webapps\webroot\WEB-INF\assets\map\geographic\world\中国 下即可,现在就可以选择 city 去匹配城市了。
#!/usr/bin/env python3
# coding: utf-8
import os
import json
def open_list(path):
return os.listdir(path)
def merge_point(path, point_list):
point_dic = dict()
point_dic["type"] = "FeatureCollection"
point_dic["name"] = "点"
point_dic["features"] = []
# 读数据
for point_file in point_list:
print(point_file)
with open(os.path.join(path, point_file), 'r', encoding='utf8')as fp:
json_data = json.load(fp)
features = json_data["features"]
for feature in features:
point_dic["features"].append(feature)
write_file = "city-point.json"
# 写数据
with open(os.path.join(path, write_file), 'a', encoding='utf8')as fp:
json.dump(point_dic, fp, ensure_ascii=False)
print(point_dic)
def merge_area(path, area_list):
area_dic = dict()
area_dic["type"] = "FeatureCollection"
area_dic["features"] = []
# 读数据
for area_file in area_list:
with open(os.path.join(path, area_file), 'r', encoding='utf8')as fp:
json_data = json.load(fp)
features = json_data["features"]
for feature in features:
area_dic["features"].append(feature)
write_file = "city-area.json"
# 写数据
with open(os.path.join(path, write_file), 'a', encoding='utf8')as fp:
json.dump(area_dic, fp, ensure_ascii=False)
def merge(path):
li = open_list(path)
# 存储点文件
point_list = []
# 存储面积文件
area_list = []
# 遍历文件夹下所有文件
for file in li:
# 以 .json 的結尾
if file.endswith('.json'):
name_list = file.split("-")
if name_list[1]=='point.json':
point_list.append(file)
print("point.json: ", file)
elif name_list[1]=='area.json':
print("area.json: ", file)
area_list.append(file)
merge_point(path, point_list)
merge_area(path, area_list)
if __name__ == '__main__':
path = r"F:\tmp\中国"
merge(path)