将 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)
第一步,我已经从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)