利用Python folium库 调用OpenStreetMap制作GDP热力图

本文介绍了一种使用Python的Folium库结合OpenStreetMap生成热力图的方法。通过爬取互联网地图上的经纬度坐标,并结合统计局发布的GDP数据,生成了反映经济活动密度的地图。示例代码展示了如何加载数据并创建热力图。
部署运行你感兴趣的模型镜像

利用Python的开源模块Folium调用openstrertmap生成html,利用Python爬取的互联网地图的经纬度坐标与统计局公布的年度GDP数据结合,构造data(x,y,gdp)http://blog.csdn.net/qq_14906811/article/details/73717447

import os
import folium
import numpy as np

data=[[	39.90403	,	116.407526	,	23014.59	]	,
[	39.084158	,	117.200983	,	16538.19	]	,
[	38.042309	,	114.514862	,	5440.6	]	,
[	37.87059	,	112.548879	,	2735.34	]	,
[	40.842585	,	111.74918	,	3090.52	]	,
[	41.805698	,	123.431474	,	7272.31	]	,
[	38.914003	,	121.614682	,	7731.64	]	,
[	43.817071	,	125.323544	,	5530.03	]	,
[	45.803775	,	126.534967	,	5751.21	]	,
[	31.230416	,	121.473701	,	25123.45	]	,
[	32.060255	,	118.796877	,	9720.77	]	,
[	30.274084	,	120.15507	,	10050.21	]	,
[	29.874556	,	121.550357	,	8003.61	]	,
[	31.820586	,	117.227239	,	5660.27	]	,
[	26.074507	,	119.296494	,	5618.08	]	,
[	24.479833	,	118.089425	,	3466.03	]	,
[	28.682892	,	115.858197	,	4000.01	]	,
[	36.651216	,	117.119999	,	6100.23	]	,
[	36.067082	,	120.382639	,	9300.07	]	,
[	34.746599	,	113.625368	,	7311.52	]	,
[	30.593098	,	114.305392	,	10905.6	]	,
[	28.228209	,	112.938814	,	8510.13	]	,
[	23.129162	,	113.264434	,	18100.41	]	,
[	22.543099	,	114.057868	,	17502.86	]	,
[	22.817002	,	108.366543	,	3410.09	]	,
[	20.044001	,	110.198293	,	1161.96	]	,
[	29.563009	,	106.551556	,	15717.27	]	,
[	30.572269	,	104.066541	,	10801.16	]	,
[	26.647661	,	106.630153	,	2891.16	]	,
[	24.880095	,	102.832891	,	3968.01	]	,
[	29.645554	,	91.140856	,	376.73	]	,
[	34.341568	,	108.940174	,	5801.2	]	,
[	36.061089	,	103.834303	,	2095.99	]	,
[	36.617144	,	101.778228	,	1131.62	]	,
[	38.487193	,	106.230909	,	1493.86	]	,
[	43.825592	,	87.616848	,	2631.64	]	]
#data = (np.random.normal(size=(100, 3)) *
#        np.array([[1, 1, 1]]) +
#       np.array([[48, 5, 1]])).tolist()

from folium.plugins import HeatMap

m = folium.Map([ 33., 113.], tiles='stamentoner', zoom_start=5)

HeatMap(data).add_to(m)

m.save(os.path.join(r'C:\Users\suns\Desktop', 'Heatmap.html'))

m



您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

<think>好的,我需要帮助用户使用Python解析NMEA文件并生成力图来展示信号强度和信噪比(SNR)。首先,我需要明确用户的需求。用户提到的是处理NMEA文件,这类文件通常包含GPS数据,可能包含如GGA、GSA、GSV等句子。其中,GSV(卫星状态视图)句子可能包含卫星的信号强度信息,特别是信噪比(SNR)。 首先,我需要确定如何解析NMEA文件。Python中有一些可以处理NMEA数据,比如pynmea2。这个可以方便地解析NMEA句子,提取所需字段。用户需要处理的是信号强度和SNR,因此需要从GSV句子中提取这些信息。 接下来,用户需要生成力图力图通常需要地理位置坐标(如经纬度)和对应的强度值。因此,解析过程中需要同时获取位置信息和每个卫星的SNR值。但需要注意的是,GSV句子本身并不包含位置信息,位置信息可能来自GGA或RMC句子。因此,解析过程中需要同时处理多个类型的NMEA句子,将位置信息与卫星的SNR数据关联起来。 然后,需要考虑数据的存储结构。可能需要将每个卫星的SNR值与其对应的位置和时间戳关联起来,以便后续生成力图。可能需要使用Pandas来组织数据,存储为DataFrame,方便处理。 生成力图方面,可以使用如Matplotlib、Seaborn或Folium(用于地理力图)。如果用户希望在地图上展示,Folium可能更合适,因为它可以结合OpenStreetMap或其他地图服务。不过,力图的生成需要足够的点数据,可能需要考虑数据点的分布和密度。 接下来,需要考虑代码的结构。大致步骤如下: 1. 读取NMEA文件,逐行解析。 2. 对于每一行,判断其NMEA句子类型。 3. 如果是GGA或RMC,提取当前的经纬度和时间戳。 4. 如果是GSV,提取卫星的PRN号、仰角、方位角和SNR值。 5. 将提取的数据存储到数据结构中,如列表或DataFrame。 6. 数据清洗和处理,可能需要过滤无效值或填充缺失数据。 7. 使用处理后的数据生成力图,可能需要聚合数据或插值处理。 可能的挑战包括: - 不同NMEA句子类型的处理逻辑,需要正确关联位置和SNR数据。 - 数据的时间戳同步,确保SNR值与正确的位置对应。 - 力图的生成方式,是否需要基于地理位置的力图还是其他形式的可视化。 此外,用户可能会遇到文件解析错误,比如空文件或格式错误,需要适当处理异常情况。例如,引用[1]中提到的EmptyDataError,可能由于文件未正确写入导致,因此在处理NMEA文件时需要确保文件正确读取,避免类似错误。 在代码实现中,可能需要以下步骤: - 使用pynmea2解析每行NMEA数据。 - 使用Pandas存储解析后的数据。 - 使用Seaborn或Matplotlib绘制力图,或者使用Folium生成地理力图。 需要提醒用户注意数据的时间同步,确保每个SNR值对应正确的位置。另外,可能需要处理多个GSV句子,因为单个GSV句子可能只包含部分卫星的信息,需要组合多个GSV句子来获取完整的卫星列表。 最后,生成相关问题,帮助用户进一步优化或扩展功能,比如如何处理大量数据、如何优化力图的显示效果,或者如何处理不同NMEA版本的数据差异。</think>以下是使用Python处理NMEA文件并生成力图的实现方法: --- ### 一、NMEA文件解析步骤 1. **安装依赖** ```bash pip install pynmea2 pandas seaborn matplotlib ``` 2. **基础解析代码** ```python import pynmea2 import pandas as pd def parse_nmea(file_path): data = [] current_position = {} # 存储最新位置信息 with open(file_path, 'r', encoding='utf-8') as f: for line in f: try: msg = pynmea2.parse(line.strip()) # 解析位置信息(GGA或RMC) if isinstance(msg, (pynmea2.types.talker.GGA, pynmea2.types.talker.RMC)): current_position = { 'latitude': msg.latitude, 'longitude': msg.longitude, 'timestamp': msg.timestamp } # 解析GSV卫星信息 elif isinstance(msg, pynmea2.types.talker.GSV): for sat_info in msg.sv_prn_num_1, msg.sv_prn_num_2, msg.sv_prn_num_3, msg.sv_prn_num_4: if sat_info and sat_info.snr: data.append({ **current_position, 'prn': sat_info.sv_prn_num, 'snr': sat_info.snr, 'elevation': sat_info.elevation_deg }) except Exception as e: print(f"解析错误: {e}") return pd.DataFrame(data) ``` --- ### 二、力图生成方法 ```python import seaborn as sns import matplotlib.pyplot as plt def generate_heatmap(df): # 数据预处理 heatmap_data = df.pivot_table( index='latitude', columns='longitude', values='snr', aggfunc='mean' ) # 生成力图 plt.figure(figsize=(12,8)) sns.heatmap(heatmap_data, cmap='viridis', annot=False) plt.title('SNR力图') plt.xlabel('经度') plt.ylabel('纬度') plt.show() ``` --- ### 三、完整调用示例 ```python if __name__ == "__main__": df = parse_nmea('input.nmea') generate_heatmap(df) ``` --- ### 四、注意事项 1. **数据关联性**:需要确保GSV语句与位置信息的时间同步,建议使用带时间戳的GGA/RMC语句[^1] 2. **异常处理**:空文件会触发`EmptyDataError`,需检查文件有效性[^1] 3. **参数解析**:可通过`argparse`模块添加命令行参数支持[^3] ---
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兰小莫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值