前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python 显示地图

python 显示地图

作者头像
叶子陪你玩
发布2022-05-22 15:02:50
1.2K0
发布2022-05-22 15:02:50
举报

之前写了一篇,

有份近10年的地震数据,你会怎样用python分析呢?

有人留言说,想要将数据显示地图上。 比如地震网上这种效果。

显示图表的库非常多,这里我们试用一个轻量级第三方 folium 库。

三行代码就可以在本地生成一个render.html地图网页文件。

代码语言:javascript
复制
import folium
world_map = folium.Map(location=[28.5, 100.40], zoom_start=4)
world_map.save('render.html')

详细使用可以查看其文档。

在地图指定的经纬度上标记也非常简单。选取一种标记方式即可,我这里采用圆标记。

代码语言:javascript
复制
folium.CircleMarker(
                    location=[50, 100.40],
                    radius=2,
                    popup='Laurelhurst Park',
                    color='#ff0000',
                    fill=True,
                    fill_color='#3186cc'
                ).add_to(self.world_map)

除了圆,还有很多其它形式,比如下面这种:

下面做一个GUI,将网页内嵌到里面。

根据中国大概的经纬度范围,粗略的过滤数据,通过滑动条,显示不同级别的地震点。

近十年二级以上地震效果

近十年四级以上地震效果

近十年六级以上地震效果

近十年七级以上地震效果

根据可视化的效果,大家能看出些什么吗?


完整的代码:

代码语言:javascript
复制
import sys
import os
from PySide2.QtWidgets import *
from PySide2.QtCore import *
from PySide2.QtWebEngineWidgets import QWebEngineView
import json
import folium

with open('earthquake1.json',encoding='utf-8') as f:
    data = json.load(f)
    
longitudes = data['longitude']
latitudes = data['latitude']
levels = data['level']

class MyCharts(QWidget):
    def __init__(self):
        super().__init__()
        self.resize(1500,1500)
        self.V_l = QVBoxLayout()
        self.h_l = QHBoxLayout()
        self.label = QLabel('地震等级')
        self.label2 = QLabel('0级')
        self.slider = QSlider(orientation=Qt.Horizontal)
        self.slider.setMinimum(1)
        self.slider.setMaximum(9)
        self.slider.setTickPosition(QSlider.TicksAbove)
        self.slider.setTickInterval(1)
        self.h_l.addWidget(self.label)
        self.h_l.addWidget(self.label2)
        self.h_l.addWidget(self.slider)
        self.browser = QWebEngineView()
        self.V_l.addWidget(self.browser)
        self.V_l.addLayout(self.h_l)
        self.setLayout(self.V_l)
        self.show()
        self.init_map()
        self.init_set()
        self.slider.valueChanged.connect(self.add_marker)
        
    def init_map(self):
        self.world_map = folium.Map(location=[28.5, 100.40], zoom_start=4)
        self.world_map.save('render.html')
        
    def init_set(self):
        self.browser.load(QUrl.fromLocalFile(
                        os.path.realpath("render.html")))
        
    def add_marker(self):
        self.level = self.slider.value()
        self.label2.setText(f'{self.level}级')
        print(self.level,type(self.level))
        self.world_map = folium.Map(location=[28.5, 100.40], zoom_start=4)
        for x, y, level in zip(longitudes, latitudes, levels):
            if (73.5 < float(x) < 135) and (4 < float(y) < 53.5) and float(level) > self.level:
                folium.CircleMarker(
                    location=[y, x],
                    radius=2,
                    popup='Laurelhurst Park',
                    color='#ff0000',
                    fill=True,
                    fill_color='#3186cc'
                ).add_to(self.world_map)
        self.world_map.save('render.html')
        self.init_set()
        
if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MyCharts()
    sys.exit(app.exec_())
代码语言:javascript
复制
(全文完)
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-05-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 叶子陪你玩编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档