您的位置:首页 >聚焦 >

在Python中使用Greppo构建的地理空间仪表板

2022-03-15 18:52:55    来源:程序员客栈

缺乏前端、后端和网络开发经验可能会限制使用 Python 制作网络应用程序。在Python中使用 Greppo构建的地理空间仪表板

地理空间数据分析已成为数据科学中的一个常见领域。对于地理空间数据科学来说也不例外。支持 GeoPandas、Shapely 和 Rasterio 等项目的社区使 Python 成为地理空间分析的首选。

Greppo:快速简单的地理空间仪表板构建方法

Greppo 是一个用于构建地理空间网络应用程序的开源 Python 框架。它提供了可随时使用的前端和后端组件作为函数,充当前端交互组件和绑定的后端变量之间的 API。要了解有关心智模型的更多信息,请参阅此页面。

无需太多前端、后端、Web 开发经验,您就可以在 5 分钟内使用 Python 构建和部署功能齐全的 Web 应用程序。

GitHub存储库:https://github.com/greppo-io/greppo文档:https://docs.greppo.io/网站:https://greppo.io/

在本教程中,我们将使用 Greppo 在 Python 中构建地理空间仪表板。我们将通过设置环境、安装、导入数据、为我们的仪表板放入组件并为其提供服务来工作。您将需要了解 Python、GeoPandas 和地理空间分析的基础知识。入门…

首先要做的是安装本文需要的 Python 第三方库。

pipinstallgreppogeopandas

编写仪表板脚本

我们首先为项目设置文件夹结构。我将使用以下项目文件夹结构:

└──vector-demo├──app.py├──cities.geojson├──regions.geojson└──roads.geojson

该应用程序的主控脚本是 app.py。

Step 0:启动服务器

启动服务器,请打开终端(windows对应的是命令行cmd)并按照这些说明进行操作。

首先,终端中执行cd vector_demo将工作目录切换为 (cd) 项目文件夹 vector_demo。

然后,终端执行greppo serve app.py, 启动服务器。

然后,您将看到 Uvicorn 服务器在指定位置(类似于链接)运行。复制网址链接,并将其粘贴到浏览器中。然后它将加载应用程序。如果您对 app.py 进行了任何更改,您将在浏览器页面上看到对您的应用的更新更改。

Step 1:构建应用程序的基本脚手架。

即导入 greppo 包,并在地图中添加 base_layer。

fromgreppoimportappapp.base_layer(name="OpenStreetMap",visible=True,url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",subdomains=None,attribution="(C)OpenStreetMapcontributors",)app.base_layer(provider="CartoDBPositron")

您需要先从 greppo 导入应用程序。此应用程序对象将用作您的应用程序前端的接口,并为前端和后端之间的 2 路通信提供 API。

要将 base_layer 添加到您的应用程序地图,只需使用带有所需参数的应用程序 API 方法 app.base_layer()。请参阅文档以了解什么是必需的和什么是可选的。base_layer 方法提供了两种方法来指定基本瓦片层。一种是使用 name 和 url 属性。另一种方法是使用提供者的名称。

Step 2:导入数据集并将其显示为叠加层。

使用 geopandas,我们可以将矢量数据集作为 GeoDataFrame 导入。然后可以使用 app.vector_layer() 方法在 Web 应用程序上的地图上对其进行可视化。在这里,我要导入三个不同的数据集,每个数据集都有多边形(意大利不同地区的边界)、线(意大利的主要高速公路)和点(意大利的主要城市)。

importgeopandasasgpdfromgreppoimportappregions=gpd.read_file("./regions.geojson")roads=gpd.read_file("./roads.geojson")cities=gpd.read_file("./cities.geojson")app.vector_layer(data=regions,name="RegionsofItaly",description="PolygonsshowingtheboundariesofregionsofItaly.",style={"fillColor":"#4daf4a"},)app.vector_layer(data=roads,name="HighwaysinItaly",description="LinesshowingthemajorhighwaysinItaly.",style={"color":"#377eb8"},)app.vector_layer(data=cities,name="CitiesofItaly",description="PointsshowingthecitiesinItaly.",style={"color":"#e41a1c"},visible=True,)

使用方法 app.vector_layer() 作为前端的 API,我们可以显示矢量数据。您需要传入名称,其他参数是可选的。虽然,将颜色或填充颜色传递给样式是区分和识别每一层的好习惯。由于前端基于 Leaflet,所有样式都符合 Leaflet 的规范,可以在文档中找到。

您可以在此处找到 vector_layer 和样式的所有信息。注意:您也可以制作 Choropleth 地图。可以在此处找到其文档。

Step 3:显示应用内文本、应用标题和应用描述

为了使 Web 应用程序有用,它需要携带一些文本以向其用户提供一些指导和上下文。这些可以显示在组件旁边的侧边栏上。使用 app.display() 方法可以在 web-app 上显示降价文本。使用相同的方法,可以设置应用程序的标题和描述。

fromgreppoimportappapp.display(name="title",value="Vectordemo")app.display(name="description",value="AGreppodemoappforvectordatausingGeoJSONdata.")text_1="""##Abouttheweb-appThedashboardshowstheboundariesoftheregionsofItalyaspolygons,themajorarterialhigwaysaslinesandthemajorcitiesofeachregionaspoints."""app.display(name="text-1",value=text_1)

app.display() 接受两个参数 name 和 value 。虽然 value 承载要显示的文本,但 name 必须是唯一的,并带有文本的标识符。如果 name="title" 传递的值是应用程序的标题,如果 name="description" 传递的值是应用程序的描述。如果没有这两者中的任何一个,该应用程序将带有其默认标题和描述。鼓励设置应用程序的标题和描述。

Step 4:将数据显示为图表

数据应用程序几乎没有将数据显示为图表。Greppo 还允许您将数据显示为图表。可以在文档中找到有关图表及其用法的信息。这里,作为一个例子,展示了一个条形图,app.bar_chart()。

fromgreppoimportappimportgeopandasasgpdregions=gpd.read_file("./regions.geojson")roads=gpd.read_file("./roads.geojson")cities=gpd.read_file("./cities.geojson")app.display(name="text-2",value="Thefollowingdisplaysthecountofpolygons,linesandpointsasabarchart.")app.bar_chart(name="Geometrycount",description="Abar-cartshowingthecountofeachgeometry-typeinthedatasets.",x=["polygons","lines","points"],y=[len(regions),len(roads),len(cities)],color="#984ea3")

图表所需的参数是名称、x 和 y 值。可以添加描述和颜色来为应用程序用户提供更好的上下文。名称和描述与图表一起显示。

结论

让我们全面了解一下我们在这里所做的事情。我们的目标是使用 Greppo 创建一个地理空间 web 应用程序,以显示一些 GIS 矢量数据,并添加组件以为应用程序的用户提供更好的上下文。这是该应用程序的完整代码:

fromgreppoimportappimportgeopandasasgpdapp.display(name="title",value="Vectordemo")app.display(name="description",value="AGreppodemoappforvectordatausingGeoJSONdata.")app.base_layer(name="OpenStreetMap",visible=True,url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",subdomains=None,attribution="(C)OpenStreetMapcontributors",)app.base_layer(provider="CartoDBPositron",)regions=gpd.read_file("./regions.geojson")roads=gpd.read_file("./roads.geojson")cities=gpd.read_file("./cities.geojson")app.vector_layer(data=regions,name="RegionsofItaly",description="PolygonsshowingtheboundariesofregionsofItaly.",style={"fillColor":"#4daf4a"},)app.vector_layer(data=roads,name="HighwaysinItaly",description="LinesshowingthemajorhighwaysinItaly.",style={"color":"#377eb8"},)app.vector_layer(data=cities,name="CitiesofItaly",description="PointsshowingthecitiesinItaly.",style={"color":"#e41a1c"},visible=True,)text_1="""##Abouttheweb-appThedashboardshowstheboundariesoftheregionsofItalyaspolygons,themajorarterialhigwaysaslinesandthemajorcitiesofeachregionaspoints."""app.display(name="text-1",value=text_1)app.display(name="text-2",value="Thefollowingdisplaysthecountofpolygons,linesandpointsasabarchart.")app.bar_chart(name="Geometrycount",description="Abar-cartshowingthecountofeachgeometry-typeinthedatasets.",x=["polygons","lines","points"],y=[len(regions),len(roads),len(cities)],color="#984ea3")

运行效果如下

下载代码&数据

https://github.com/openpolis/geojson-italy

近期文章

视频专栏课 | Python网络爬虫与文本分析

读完本文你就了解什么是文本分析

综述:文本分析在市场营销研究中的应用

Pandas库 | 高速读取csv文件的方法

如何在DataFrame中使用If-Else条件语句创建新列

BERTopic 主题建模库 | 建议收藏

Top2Vec | 主题建模和语义搜索库

案例实战 | 企业信息数据采集

使用文本相似度可以识别变化的时间点

PNAS | 文本网络分析&文化桥梁Python代码实现

tomotopy | 速度最快的LDA主题模型

dvt | 视觉文化分析的Python工具包

Stargazer库 | 创建漂亮可发表的多元回归表

人文社科类Python免费教程列表

量化历史语言学-贝叶斯语言谱系分析

Python与文化分析入门

Backtrader库 | 均线买入卖出策略实现

在会计研究中使用Python进行文本分析

文本分析方法在《管理世界》(2021.5)中的应用

hiResearch 定义自己的科研首页

SciencePlots | 科研样式绘图库

Wow~70G上市公司定期报告数据集

漂亮~pandas可以无缝衔接Bokeh

YelpDaset: 酒店管理类数据集10+G

关键词: 应用程序 文本分析 数据显示

相关阅读