在Python中使用Greppo构建的地理空间仪表板
缺乏前端、后端和网络开发经验可能会限制使用 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
相关阅读
-
世界热推荐:今晚7:00直播丨下一个突破...
今晚19:00,Cocos视频号直播马上点击【预约】啦↓↓↓在运营了三年... -
NFT周刊|Magic Eden宣布支持Polygon网...
Block-986在NFT这样的市场,每周都会有相当多项目起起伏伏。在过去... -
环球今亮点!头条观察 | DeFi的兴衰与...
在比特币得到机构关注之后,许多财务专家预测世界将因为加密货币的... -
重新审视合作,体育Crypto的可靠关系才能双赢
Block-987即使在体育Crypto领域,人们的目光仍然集中在FTX上。随着... -
简讯:前端单元测试,更进一步
前端测试@2022如果从2014年Jest的第一个版本发布开始计算,前端开发... -
焦点热讯:刘强东这波操作秀
近日,刘强东发布京东全员信,信中提到:自2023年1月1日起,逐步为...