gpt4 book ai didi

python - 使用 geopandas 和 matplotlib 绘制 map

转载 作者:太空狗 更新时间:2023-10-30 02:24:22 26 4
gpt4 key购买 nike

我有一个小的 csv,它有 6 个来自英格兰伯明翰的坐标。我用 pandas 读取了 csv,然后将其转换为 GeoPandas DataFrame,用 Shapely Points 改变了我的纬度和经度列。我现在正在尝试绘制我的 GeoDataframe,我只能看到这些点。我如何获得伯明翰 map ?也非常感谢有关 GeoPandas 的良好文档来源。

from shapely.geometry import Point
import geopandas as gpd
import pandas as pd

df = pd.read_csv('SiteLocation.csv')
df['Coordinates'] = list(zip(df.LONG, df.LAT))
df['Coordinates'] = df['Coordinates'].apply(Point)
# Building the GeoDataframe
geo_df = gpd.GeoDataFrame(df, geometry='Coordinates')
geo_df.plot()

最佳答案

GeoPandas 文档包含一个关于如何向 map 添加背景的示例 (https://geopandas.readthedocs.io/en/latest/gallery/plotting_basemap_background.html),下面将对此进行更详细的解释。


你将不得不处理tiles ,即通过网络服务器提供的 (png) 图像,其 URL 如

http://.../Z/X/Y.png, where Z is the zoom level, and X and Y identify the tile

geopandas 的文档展示了如何将图 block 设置为绘图的背景、获取正确的图 block 以及完成空间同步等所有其他困难的工作...


安装

假设 GeoPandas 已经安装,您需要 contextily另外包。如果你在windows下,不妨挑一下How to install Contextily?

用例

创建一个 python 脚本并定义 contextily helper function

import contextily as ctx

def add_basemap(ax, zoom, url='http://tile.stamen.com/terrain/tileZ/tileX/tileY.png'):
xmin, xmax, ymin, ymax = ax.axis()
basemap, extent = ctx.bounds2img(xmin, ymin, xmax, ymax, zoom=zoom, url=url)
ax.imshow(basemap, extent=extent, interpolation='bilinear')
# restore original x/y limits
ax.axis((xmin, xmax, ymin, ymax))

和玩

import matplotlib.pyplot as plt
from shapely.geometry import Point
import geopandas as gpd
import pandas as pd

# Let's define our raw data, whose epsg is 4326
df = pd.DataFrame({
'LAT' :[-22.266415, -20.684157],
'LONG' :[166.452764, 164.956089],
})
df['coords'] = list(zip(df.LONG, df.LAT))

# ... turn them into geodataframe, and convert our
# epsg into 3857, since web map tiles are typically
# provided as such.
geo_df = gpd.GeoDataFrame(
df, crs ={'init': 'epsg:4326'},
geometry = df['coords'].apply(Point)
).to_crs(epsg=3857)

# ... and make the plot
ax = geo_df.plot(
figsize= (5, 5),
alpha = 1
)
add_basemap(ax, zoom=10)
ax.set_axis_off()
plt.title('Kaledonia : From Hienghène to Nouméa')
plt.show()

enter image description here


注意:您可以使用缩放来为 map 找到合适的分辨率。例如/I.e. :

enter image description here

... 此类解决方案隐含地要求更改 x/y 限制。

关于python - 使用 geopandas 和 matplotlib 绘制 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54088858/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com