解决帆软中不能制作城市热力图的问题

博客讲述了如何在帆软报表中创建跨省城市热力图的解决方案。作者通过复制并合并地图JSON文件,创建了包含所有城市的地图数据,使得帆软能够识别并绘制全国范围的城市热力图。涉及的技术包括Python编程、地图文件处理和帆软报表系统。
摘要由CSDN通过智能技术生成

1 问题描述

想依照这样的表制作一张城市热力图, 字段如下:

城市名
重庆100
长春22
广州52

但在帆软中只能按照省份,或者一个省份下的城市制作热力图,而不能选择全部城市进行匹配
在这里插入图片描述

2 解决方案

帆软中的地图文件是以 .json 文件格式存储的,
目录:%FR_HOME%\webapps\webroot\WEB-INF\assets\map\geographic\world\中国,分为-area.json 面积文件 和 -point.json 点文件,仿照这种形式,可以构造一个城市级别的地图。

  1. 把目录中的 .json 文件全部复制到另外的文件夹下:F:\tmp\中国
    另外因为中国城市下面不包含直辖市的信息,所以也需要将%FR_HOME%\webapps\webroot\WEB-INF\assets\map\geographic\world\ 文件夹下的 中国-area.json,中国-point.json 文件也复制到 F:\tmp\中国 中

  2. 下面的 python 代码会将数据进行合并。

  3. 最后将合并后生成的文件 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)
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值