将 csv 文件中的点绘制到 geopandas 地图上

Plot points from a csv file onto a geopandas map

第一步,我已经从polygon shapefile创建了一个plot,这里的gpd指的是geopandas,代码如下:

data = gpd.read_file('data.shp')
fig, axes = plt.subplots(figsize=(10,8))
data.plot(ax = axes, color = "white", edgecolor = "black")
plt.plot()

在此之后,我有一个多边形图,现在我有另一个包含坐标信息的 csv 文件,我想将这些点绘制到之前的多边形图上,我尝试如下代码来访问坐标信息:

lat=[]
lon=[]
with open('data.csv') as csvfile:
    reader = csv.reader(csvfile,delimiter=',')
    for data in reader:
        lat.append(float(data[2]))
        lon.append(float(data[3]))

我检查了纬度和经度,没问题,但是接下来我应该怎么做才能同时显示点和多边形?

您需要了解并协调形状文件和 .csv 中使用的 CRS(坐标参考系统)

您可能会得到形状文件的 crs

    data.crs

假设您的输出是这样的:

<Geographic 2D CRS: EPSG:4326>
Name: WGS 84
Axis Info [ellipsoidal]:
- Lat[north]: Geodetic latitude (degree)
- Lon[east]: Geodetic longitude (degree)
Area of Use:
- name: World
- bounds: (-180.0, -90.0, 180.0, 90.0)
Datum: World Geodetic System 1984
- Ellipsoid: WGS 84
- Prime Meridian: Greenwich

因此形状文件的 CRS 是 4326 - 现在您必须找出 .csv 的 CRS,或者可能是最有可能的 CRS。您可以通过一般搜索或使用这样的参考来获得它: https://www.nceas.ucsb.edu/sites/default/files/2020-04/OverviewCoordinateReferenceSystems.pdf

假设您查看了该 .pdf 并认为这听起来像您的 .csv:

Projected (Easting/Northing) UTM, Zone 10 (EPSG: 32610) Zone 10 is used in the Pacific Northwest

因此您需要先使用 32610 初始化数据,然后将其重新投影到 4326

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

    df = pd.read_csv("data.csv")
    geometry = [Point(xy) for xy in zip(df[2], df[3])]
    gdf = GeoDataFrame(df, geometry=geometry, crs= 32610) 
    gdf = gdf.to_crs(4326)