使用Python将纬度经度几何数据投影到UTM坐标系

3

我有一个包含地震数据的数据框,名为eq,其中包括列标注了纬度和经度。使用geopandas,我创建了一个点列,具体如下:

from geopandas import GeoSeries, GeoDataFrame
from shapely.geometry import Point
s = GeoSeries([Point(x,y) for x, y in zip(df['longitude'], df['latitude'])])
eq['geometry'] = s
eq.crs = {'init': 'epsg:4326', 'no_defs': True}
eq

现在我有一列带有纬度和经度坐标的几何图形列,但我想将投影更改为UTM。有人能帮助进行转换吗?


'epsf:4326' 是打错了吗?应该是 'epsg:4326' 吗?如果是,请编辑您的问题。 - help-info.de
@help-info.de 谢谢,是的。 - amwade2
1个回答

5
纬度/经度并不是真正的投影,而是一种默认的“反投影”。点击此页面了解更多详情,但这可能意味着您的数据使用WGS84epsg:4326
让我们构建一个数据集,在进行任何重投影之前,我们将定义crsepsg:4326
import geopandas as gpd
import pandas as pd
from shapely.geometry import Point
df = pd.DataFrame({'id': [1, 2, 3], 'population' : [2, 3, 10], 'longitude': [-80.2, -80.11, -81.0], 'latitude': [11.1, 11.1345, 11.2]})
s = gpd.GeoSeries([Point(x,y) for x, y in zip(df['longitude'], df['latitude'])])

geo_df = gpd.GeoDataFrame(df[['id', 'population']], geometry=s)
# Define crs for our geodataframe:
geo_df.crs = {'init': 'epsg:4326'} 

我不确定你所说的“UTM投影”是什么意思。从维基百科页面上可以看出,根据世界各地的区域,有60种不同的UTM投影。您可以在线查找适当的epsg代码,但我会给您一个随机的epsg代码示例。例如,这是用于33N区域的epsg代码
如何进行重新投影?您可以从geopandas投影文档中轻松获取此信息。只需要一行代码:
geo_df = geo_df.to_crs({'init': 'epsg:3395'})

现在几何形状不再编码为纬度/经度:

    id  population  geometry
0   1   2   POINT (-8927823.161620541 1235228.11420853)
1   2   3   POINT (-8917804.407449147 1239116.84994171)
2   3   10  POINT (-9016878.754255159 1246501.097746004)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接