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

原文标题Build a geospatial dashboard in Python using Greppo

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

缺乏前端、后端和网络开发经验可能会限制使用 Python 制作网络应用程序。不再…

地理空间数据分析已成为数据科学中的一个常见领域。除了绘图和可视化之外,它还广泛地包括通过检测和识别模式来提取知识,以及构建模型以进行预测。 Python 仍然是数据科学的标准,对于地理空间数据科学来说也不例外。支持 GeoPandas、Shapely 和 Rasterio 等项目的社区使 Python 成为地理空间分析的首选。[0][1][2]

作为一名数据科学家,与包括非技术人员在内的多个利益相关者合作是很常见的。将您的研究成果提炼成非技术性叙述的能力非常方便。这一切都归结为沟通结果如何使利益相关者受益。为您的 Python 脚本创建仪表板是一种有效的讲故事方法。当您想与外部利益相关者分享您的工作时,仪表板也会派上用场,仅通过交互和可视化来限制他们,而不分享内部工作。

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

Greppo

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

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

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

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

Getting started…

首先要做的是安装 Python 并设置 Python 环境。对于那些不熟悉这方面的人,请查看这篇博文以帮助您开始使用 Python 环境。一旦你准备好了,让我们安装我们的依赖项。[0]

pip install greppo geopandas

下载本教程所需的数据集。本教程的所有数据和代码都可以在这个 GitHub 存储库中找到:greppo-demo/vector-demo(数据源:https://github.com/openpolis/geojson-italy)[0][1]

Scripting the dashboard

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

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

让我们为仪表板创建 Python 脚本。该应用程序的代码进入 app.py。

第 0 步:提供应用程序

要运行和提供应用程序,请打开终端并按照这些说明进行操作。首先,将目录 (cd) 更改为项目文件夹 vector_demo。进入后,激活安装了 greppo 的 Python 环境。我在示例中使用了 pyenv。然后运行应用程序,您需要做的就是运行 greppo serve app.py 命令。命令 serve 启动服务器并编译 app.py 中的代码,可以将其重命名为任何文件。注意:确保在 app.py 所在的项目文件夹中,或使用相对文件夹结构,例如 greppo serve ./vector-demo/app.py。

然后,您将看到 Uvicorn 服务器在指定位置运行。复制地址并将其粘贴到浏览器中。然后它将加载应用程序。如果您对 app.py 进行了任何更改,只需保存更改并重新加载 web-app 页面。您将在哪里看到对您的应用的更新更改。

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

即导入 greppo 包并将 base_layer 添加到地图中。

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

要将 base_layer 添加到您的应用程序地图,只需使用带有所需参数的应用程序 API 方法 app.base_layer()。请参阅文档以了解什么是必需的和什么是可选的。 base_layer 方法提供了两种方法来指定基本瓦片层。一种是使用 name 和 url 属性。另一种方法是使用提供者的名称。 Greppo 为此使用了 xyzservices。有关提供商名称的列表,请在此处查看此列表。注意:证明者名称应完整,其类型/品种如 CartoDB Positron 或 OpenStreetMap Mapnik 中所示。[0][1][2]

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

使用 geopandas,我们可以将矢量数据集作为 GeoDataFrame 导入。然后可以使用 app.vector_layer() 方法在 Web 应用程序的地图上可视化。

在这里,我要导入三个不同的数据集,每个数据集都有多边形(意大利不同地区的边界)、线(意大利的主要高速公路)和点(意大利的主要城市)。

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

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

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

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

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

第 4 步:将数据显示为图表

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

from greppo import app
import geopandas as gpd

regions = gpd.read_file("./regions.geojson")
roads = gpd.read_file("./roads.geojson")
cities = gpd.read_file("./cities.geojson")

app.display(name='text-2',
            value='The following displays the count of polygons, lines and points as a barchart.')

app.bar_chart(name='Geometry count', description='A bar-cart showing the count of each geometry-type in the datasets.',
              x=['polygons', 'lines', 'points'], y=[len(regions), len(roads), len(cities)], color='#984ea3')

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

Conclusion

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

from greppo import app
import geopandas as gpd

app.display(name='title', value='Vector demo')
app.display(name='description',
            value='A Greppo demo app for vector data using GeoJSON data.')

app.base_layer(
    name="Open Street Map",
    visible=True,
    url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
    subdomains=None,
    attribution='(C) OpenStreetMap contributors',
)

app.base_layer(
    provider="CartoDB Positron",
)

regions = gpd.read_file("./regions.geojson")
roads = gpd.read_file("./roads.geojson")
cities = gpd.read_file("./cities.geojson")

app.vector_layer(
    data=regions,
    name="Regions of Italy",
    description="Polygons showing the boundaries of regions of Italy.",
    style={"fillColor": "#4daf4a"},
)

app.vector_layer(
    data=roads,
    name="Highways in Italy",
    description="Lines showing the major highways in Italy.",
    style={"color": "#377eb8"},
)

app.vector_layer(
    data=cities,
    name="Cities of Italy",
    description="Points showing the cities in Italy.",
    style={"color": "#e41a1c"},
    visible=True,
)

text_1 = """
## About the web-app

The dashboard shows the boundaries of the regions of Italy as polygons, the 
major arterial higways as lines and the major cities of each region as points.
"""

app.display(name='text-1', value=text_1)

app.display(name='text-2',
            value='The following displays the count of polygons, lines and points as a barchart.')

app.bar_chart(name='Geometry count', description='A bar-cart showing the count of each geometry-type in the datasets.',
              x=['polygons', 'lines', 'points'], y=[len(regions), len(roads), len(cities)], color='#984ea3')

这里是应用程序的输出:

因此,我们有它。使用 Greppo 构建的完整网络应用程序,不到 5 分钟。

此演示的所有文件都可以在这里找到:https://github.com/greppo-io/greppo-demo/tree/main/vector-demo[0]

查看 GitHub 存储库:在此处更新 Greppo 的最新信息。如果您的用例出现错误、问题或功能请求,请联系 Discord 频道或在 GitHub 上打开问题。用 Greppo 构建了一些东西?将其发布到 GitHub。[0][1]

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
心中带点小风骚的头像心中带点小风骚普通用户
上一篇 2022年4月28日
下一篇 2022年4月28日

相关推荐