推荐:使用NSDT场景编辑器助你快速搭建可编辑的3D应用场景

介绍

地理空间数据分析在城市规划、环境研究、农业和运输行业中至关重要。不断增长的需求导致越来越多地使用Python包来满足各种地理数据分析要求,例如分析气候模式,调查城市发展或跟踪疾病传播等。评估和选择具有快速处理、修改和可视化功能的正确工具对于有效分析和可视化地理空间数据至关重要。

了解地理空间数据

首先必须了解什么是地理空间数据。地理空间数据是具有表示地球表面上对象、特征或事件的位置和质量的地理或地理组件的数据。它描述了物理宇宙中各种物品的空间联系、分布和属性。地理空间数据主要有两种类型:

  • 栅格数据:适用于没有固定边界的连续信息,表示为具有指示观测要素的值的像元格网。它通常定期监测并插值以创建连续表面。
  • 矢量数据:它使用点、线和面来表示空间属性,包括感兴趣点、交通网络、行政边界和地块,通常用于具有精确位置或硬约束的离散数据。

地理空间数据可以以多种格式存储,
例如:

  • ESRI 形状文件
  • 地理数据
  • Erdas Imagine Image File Format (EIF)
  • GeoTIFF, Geopackage
  • (GPKG)GeoJSON,光检测
  • 测距(激光雷达)等等。

地理空间数据包含卫星图像、高程模型、点云、土地利用分类和基于文本的信息等多种类型,为跨行业的空间分析和决策提供了有价值的见解。Microsoft、谷歌、Esri 和亚马逊网络服务等大公司利用地理空间数据获得有价值的见解。让我们探索用于地理空间数据分析的前五个 Python 包。这些软件包支持数据读取/写入、操作、可视化、地理编码和地理索引,迎合初学者和有经验的用户。了解这些软件包如何支持从地理空间数据中进行有效的探索、可视化和见解提取。让我们开始吧!

1. Geopandas

适用于: 矢量数据
Geopandas 是一个广泛使用的 Python 库,用于处理矢量地理空间数据,在 Pandas DataFrame 中提供直观的地理数据处理。它支持形状文件和 GeoJSON 等格式,并提供合并、分组和空间连接等空间操作。Geopandas与Pandas,NumPy和Matplotlib等流行库无缝集成。它可以处理大型数据集,但这可能会带来挑战。Geopandas 包通常用于空间数据分析任务,包括空间联接、查询和地理空间操作(如缓冲和交集分析)。Geopandas需要不同的软件包,如Shapely来处理几何操作,Fiona访问文件,matplotlib打印。

例如,Geopandas可用于探索房地产数据,以确定城市中最昂贵的社区,或分析人口数据以可视化不同社区的增长和迁移模式。
我们可以使用 pip 来安装软件包:
pip install geopandas

用地理Geopandas绘图

让我们查看内置地图,如下所示:

import geopandas 
# Check available maps
geopandas.datasets.available

我们将使用 Geopandas 加载世界地图的数据集,提取美国的 shapefile,并使用以下代码将其绘制在图形上:

# Selecting a particular map
geopandas.datasets.get_path('naturalearth_lowres')
# Open the selected map - GeoDataFrame
world = geopandas.read_file(geopandas.datasets.get_path('naturalearth_lowres'))
# Create a subset of the GeoDataFrame
usa = world[world.name == "United States of America"]
# Plot the subset
usa.plot();

上面的代码打印子集数据框的地图:
图片

叶子

适用于: 点云
Folium 是一个 Python 库,用于创建带有标记、弹出窗口、choropleths 和其他地理空间可视化的交互式地图。它与Leaflet JavaScript库集成,并允许将地图导出为HTML。它可以与Geopandas和Cartopy结合使用,并使用地图切片处理大型数据集。Folium 擅长简单、美观和与其他地理空间库的集成。但是,对于高级地理空间分析和操作,Folium 可能有局限性。

例如,Folium可用于供应链和物流,以可视化分销网络,优化路线和监控装运位置。

我们可以使用以下命令安装 Folium:
pip install folium

用叶子绘图

让我们打印一个以 [0, 0] 为中心的交互式地图示例,并在同一位置放置一个标记,代码行如下:

import folium
# Generate a Folium map with center coordinates (0, 0)
map = folium.Map(location=[0, 0], zoom_start=2)
# Locate the coordinates 0, 0
folium.Marker([0, 0]).add_to(map)
# Display the map
map

图片
可以通过基于特定地理空间数据添加标记、图层或样式选项来进一步自定义此地图。

3. IPY传单

适用于:点云,交互式

ipyleaflet 包可以在 Python 中轻松创建交互式地图,特别是在 Jupyter 笔记本中,允许用户生成和共享具有各种底图、标记和其他地理空间操作的交互式地图。ipyleaflet 建立在传单 JavaScript 库的基础上,支持 GeoJSON 和 WMS 层、CSS 和 JavaScript 样式以及地理空间计算。虽然 ipyleaflet 在交互式小部件方面表现出色,但由于其对 JavaScript 的依赖性,它可能不适合纯基于 Python 的项目。

例如,ipyleaflet可以应用于环境监测,以可视化传感器数据,监测空气质量并实时评估环境变化。

要安装 ipyleaflet,我们使用 pip 命令:
pip install ipyleaflet

用 ipyleaflet 绘图

让我们使用以下代码创建一个交互式地图,并在坐标 (40.7128, -74.0060) 处放置一个标记,以表示纽约市的兴趣点:

from ipyleaflet import Map, Marker
# Create the map
m = Map(center=(40.7128, -74.0060), zoom=12)
# Add the market
marker = Marker(location=(40.7128, -74.0060))
m.add_layer(marker)

下面是代码的输出:
图片

4. 光栅

适用于: 栅格数据

Rasterio 是一个功能强大的 Python 库,用于处理地理空间栅格数据,提供高效的性能和广泛的操作,如裁剪、重新投影和重新采样。它支持各种栅格格式,并与其他地理空间库很好地集成,尽管它在处理矢量数据和复杂的分析任务方面存在局限性。尽管如此,Rasterio是Python中高效处理栅格数据的重要工具。

例如,栅格可用于读取和写入卫星影像、执行地形分析、从数字高程模型中提取数据以及执行遥感分析等任务。

!pip install rasterio

rasterio.open() 函数打开文件,read() 方法将图像读取为 numpy 数组。最后,来自 Matplotlib 的 plt.imshow() 函数用于显示图像,plt.show() 在输出中显示绘图。

使用栅格进行绘图

import rasterio
from rasterio.plot import show

我们使用栅格库打开并可视化来自 kaggle 上数据集“气候数据的高分辨率 GeoTIFF 图像”的“样本.tif”文件中的光栅图像,将红色通道(图像中的颜色通道之一)显示为带有红色色彩图的子图,并将原始图像(包括多个颜色通道)显示为另一个带有 viridis 色彩图的子图。其他颜色通道,如绿色和蓝色,也可以使用这种方法进行可视化。

src = rasterio.open('/content/sample.tif')
plt.figure(figsize=(15,10))
fig, (axr, axg) = plt.subplots(1,2, figsize=(15,7))
show((src, 1), ax=axr, cmap='Reds', title='red channel')
show((src), ax=axg, cmap='viridis', title='original image')
plt.show()

图片

在地理空间分析中分析特定颜色通道(如红色、蓝色和绿色)是为了关注或提取与图像的这些颜色组件所表示的特定属性、特征或特征相关的有价值信息。这方面的例子可包括遥感中的植被健康、植被指数或水体等。

  1. 地理图
    适用于:矢量数据、交互式

Geoplot 是一个用户友好的 Python 库,用于快速创建具有视觉吸引力的地理空间可视化,包括分区统计图和散点图。它与流行的数据操作库(如 Pandas)无缝集成,并支持多种地图投影。但是,与专用地理空间库相比,Geoplot 在交互式地图支持和绘图类型范围较小方面存在局限性。尽管如此,它对于快速地理空间数据可视化和深入了解空间模式仍然很有价值。

!pip install geoplot

使用地理绘图进行绘图

我们将使用 Geoplot 绘制分区统计图可视化,其中我们根据“大陆”属性从世界形状文件中选择亚洲国家,根据“pop_est”属性分配颜色强度,并使用带有图例的图例的“冰火”绘制地图图,图例大小为 10 x 5。

import geoplot
#Plotting population for Asia
asia = world.query("continent == 'Asia'")
geoplot.choropleth(asia, hue = "pop_est", cmap = "icefire",legend=True, figsize = (10, 5));

图片

例如,geoplot包可以创建分区统计图来可视化人口密度,绘制犯罪事件的空间模式,显示环境因素的分布,并根据地理数据分析疾病的传播。

结论

总之,地理空间Python包有助于有效地分析基于位置的信息。所讨论的每个包都有其优点和缺点,但是在处理地理空间数据时,它们可以共同形成一套强大的Python工具。因此,对于初学者或经验丰富的 GIS 专业人员来说,这些软件包对于以新的创新方式分析、可视化和操作地理空间数据很有价值。

用于地理空间数据分析的 5 个 Python 包


3D场景建模
4 声望3 粉丝