首页 > 编程问答 >如何将 geopandas 数据框与底图重叠?

如何将 geopandas 数据框与底图重叠?

时间:2024-07-22 04:00:34浏览次数:12  
标签:python matplotlib geopandas shapefile matplotlib-basemap

我有一个 shapefile,我将其读取为 geopandas 数据框

import geopandas as gpd
gdf = gpd.read_file('myfile.shp')
gdf.plot()

enter image description here

其中 gdf.crs

<Projected CRS: ESRI:54009>
Name: World_Mollweide
Axis Info [cartesian]:
- E[east]: Easting (metre)
- N[north]: Northing (metre)
Area of Use:
- name: World.
- bounds: (-180.0, -90.0, 180.0, 90.0)
Coordinate Operation:
- name: World_Mollweide
- method: Mollweide
Datum: World Geodetic System 1984
- Ellipsoid: WGS 84
- Prime Meridian: Greenwich

gdf.total_bounds

array([-17561329.90352868,  -6732161.66088735,  17840887.22672861,
         8750122.26961274])

我想使用 basemap 在其顶部绘制经纬度网格。这就是我正在做的

from mpl_toolkits.basemap import Basemap
# Create a Basemap instance with the same projection as the GeoDataFrame
map = Basemap(projection='moll', lon_0=-0, lat_0=-0, resolution='c')


# Create a figure and axis
fig, ax = plt.subplots(figsize=(10, 6))
# Plot the basemap
map.drawcoastlines()
map.drawcountries()
map.drawparallels(range(-90, 91, 30), labels=[1,0,0,0], fontsize=10)
map.drawmeridians(range(-180, 181, 60), labels=[0,0,0,1], fontsize=10)
# Plot the GeoDataFrame on top of the basemap
gdf.plot(ax=ax, color='red', markersize=5)

但这就是我得到的

enter image description here


问题在于,正在将 geopandas(在不同的坐标系中工作)与 basemap(有自己的坐标系处理方式)混合使用。为了使两者一起工作,需要使用 basemap 将 geopandas 数据框的坐标转换为相应的坐标。

以下是如何操作:

import geopandas as gpd
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap

# 读取 shapefile
gdf = gpd.read_file('myfile.shp')

# 创建与 GeoDataFrame 投影相同的 Basemap 实例
map = Basemap(projection='moll', lon_0=0, lat_0=0, resolution='c')

# 创建图形和坐标轴
fig, ax = plt.subplots(figsize=(10, 6))

# 绘制底图
map.drawcoastlines()
map.drawcountries()
map.drawparallels(range(-90, 91, 30), labels=[1,0,0,0], fontsize=10)
map.drawmeridians(range(-180, 181, 60), labels=[0,0,0,1], fontsize=10)

# 将 GeoDataFrame 的几何图形转换为底图坐标
gdf['geometry'] = gdf['geometry'].to_crs(epsg=4326)  # 首先转换为经纬度
gdf['geometry'] = gdf['geometry'].apply(lambda x: map(x.x, x.y))

# 现在在底图上绘制 GeoDataFrame
gdf.plot(ax=ax, color='red', markersize=5)

plt.show()

这将在底图的顶部正确绘制 shapefile。

说明:

  1. 将 GeoDataFrame 转换为经纬度: 我们首先使用 gdf['geometry'].to_crs(epsg=4326) 将 GeoDataFrame 的坐标参考系 (CRS) 转换为经纬度 (EPSG:4326)。这是因为 basemap 使用经纬度作为其坐标系。
  2. 将经纬度转换为底图坐标: 然后,我们使用 map(x.x, x.y) 将经纬度坐标转换为 basemap 坐标。 map 函数是 basemap 实例的一部分,它接受经度和纬度作为输入并返回相应的底图坐标。
  3. 在底图上绘制: 现在, gdf.plot() 将使用正确的坐标在底图上绘制 shapefile。

通过这些更改,的 shapefile 应该正确地叠加在底图上,而不会出现任何对齐问题。

标签:python,matplotlib,geopandas,shapefile,matplotlib-basemap
From: 78305720

相关文章

  • 如何找到 Windows 上 Python 的安装位置?
    我想找出我的Python在Windows上的安装路径。例如:C:\Python25如何找到Python的安装位置?在Windows上查找Python安装位置的方法有很多种:1.使用where命令(推荐方法):打开命令提示符(cmd)。输入以下命令并按回车键:wherepython......
  • Python Pandas:如何解析没有行结尾的 CSV
    如何解析没有行结尾的CSV文件?示例数据sep=;Id;Date;1;1980-02-29;2;1980-03-10;3;;可以使用lineterminator参数指定行终止符来解析没有行尾的CSV文件。在这种情况下,你可以将lineterminator设置为一个空字符串('')。以下是使用......
  • Python 中的 azure.ai.translation.document - 无法使用当前权限访问源文档位置
    我在使用Python中的azure.ai.translation.document库时遇到问题。我已经在Azure中设置了翻译服务以及带有两个容器的Blob存储。我已使用“用户委托密钥”创建了SAS连接。一种用于源(读取/列表),一种用于目标(写入/列表)。例如我尝试运行Python程序,但源b......
  • 博文标题:探索Python中的元编程:装饰器的魔法
    引言在Python的世界里,装饰器(Decorators)是一种非常强大的特性,它允许程序员在不修改原始函数代码的情况下,为函数添加新的功能。这种机制不仅增强了代码的可读性和可维护性,还提供了高度的灵活性和扩展性。本文将深入探讨装饰器的基本概念、工作原理以及如何利用它们来简化和......
  • 使用Python 和 Selenium 抓取 酷狗 音乐专辑 附源码
    在这篇博客中,我将分享如何使用Python和Selenium抓取酷狗音乐网站上的歌曲信息。我们将使用BeautifulSoup解析HTML内容,并提取歌曲和专辑信息。准备工作首先,我们需要安装一些必要的库:pipinstallrequestsbeautifulsoup4selenium代码实现以下是完整的代码:importosi......
  • 基于Django+Python的网易新闻与评论舆情热点分析平台
    一、引言在信息爆炸的时代,人们每天面对海量的信息流,如何从中筛选出有价值的信息并进行深度分析变得尤为重要。基于Django+Python的网易新闻与评论舆情热点分析平台,旨在为用户提供一个高效的数据分析工具,帮助用户快速理解新闻趋势、情感倾向以及公众对特定事件的看法。通过自......
  • Python解释器详解及其应用场景
    Python解释器及其应用场景一、Python解释器概述Python解释器是Python程序运行的核心,它负责读取Python代码(即.py文件)并将其转换为机器语言,从而使计算机能够执行。简单来说,Python解释器就像是Python代码与计算机之间的翻译官,把Python代码翻译成计算机能懂的语言。Python解释器......
  • 利用【MATLAB】和【Python】进行【图与网络模型】的高级应用与分析】
    目录一、图与网络的基本概念1.无向图与有向图2.简单图、完全图、赋权图3.顶点的度4.子图与连通性5.图的矩阵表示MATLAB代码实例Python代码实例 二、最短路径问题1.最短路径问题的定义2.Dijkstra算法MATLAB代码实例Python代码实例三、最小生成树问题1.......
  • python_wholeweek1
    目录(day1-7)一周的学习1.计算机之编程什么是编程语言什么是编程为什么要编程2.计算机组成原理计算机五大组成CPU控制器运算器内存外存输入设备输出设备(I/O设备)32位和64位32位64位多核CPU硬盘工作原理机械硬盘工作原理固态硬盘工作原理3.计算机操作系统文件是什么?应用程序是什......
  • python模块与包
    python模块与包1.模块(是一个python文件)自定义模块:(1)新建一个py文件在同一个project里然后可以用import先导入再在main里使用main.py importcc.ad(2,5)c.py defad(s,y):print(s+y)导入模块中的方法会自动实行被调用模块里所有所有语句(2)导入不同模块同一方法......