我有一个名为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
现在我有一个带有lat lon坐标的几何列,但我想将投影更改为UTM。任何人都可以帮助改造吗?
答案 0 :(得分:3)
纬度/经度并非真正的投影,而是一种默认"不投影"。请参阅this page for more details,但这可能意味着您的数据使用WGS84
或epsg:4326
。
让我们构建数据集,在进行任何重投影之前,我们会将crs
定义为epsg: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投影"。从wikipedia page我看到有60种不同的UTM预测,具体取决于世界的面积。您可以在线找到相应的epsg
代码,但我们只是给您一个随机epsg
代码的示例。 This is the one for zone 33N for example
你如何进行重投影?您可以从the geopandas docs on projection轻松获取此信息。它只是一行:
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)