首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将坐标列表转换为点几何

将坐标列表转换为点几何
EN

Stack Overflow用户
提问于 2021-12-16 07:50:45
回答 1查看 1.1K关注 0票数 1

我的地质公园df看起来是这样的:

代码语言:javascript
复制
   events   datum   pz  ...  dst        Aktenzahl              geometry
0      22  2015.0  204  ...  BSm  BSm/204/30/2015  [16.34203, 48.21717]
1      22  2015.0  202  ...  BSm   BSm/202/8/2015  [16.34189, 48.21719]

如您所见,几何学列是一个包含经度和纬度值的列表。有没有一种有效的方法将它们转换成点?

这是可行的,但效率很低:

代码语言:javascript
复制
pts = gpd.GeoDataFrame(geometry=gpd.points_from_xy(
[df['geometry'][0][0], df['geometry'][1][0]], 
[df['geometry'][0][1], df['geometry'][1][1]]))

df["geometry"] = pts
df = gpd.GeoDataFrame(df, crs='epsg:4326').set_geometry('geometry')
df

   events   datum   pz  ...  dst        Aktenzahl                   geometry
0      22  2015.0  204  ...  BSm  BSm/204/30/2015  POINT (16.34203 48.21717)
1      22  2015.0  202  ...  BSm   BSm/202/8/2015  POINT (16.34189 48.21719)

当我把它放在循环中时,我得到了TypeError: len() of unsized object

代码语言:javascript
复制
for i in range(len(df['geometry'])):
  print(df['geometry'][i][0], df['geometry'][i][1]) # works
  print(gpd.GeoDataFrame(geometry=gpd.points_from_xy(df['geometry'][i][0], df['geometry'][i][1]))) # TypeError: len() of unsized object

基本上,我需要this问题的逆。

可复制的数据如下:

代码语言:javascript
复制
df={'events': {0: 22, 1: 22}, 'datum': {0: 2015.0, 1: 2015.0}, 'pz': {0: 204, 1: 202}, 'strasse': {0: 'Hernalser Gürtel', 1: 'Hernalser Gürtel'}, 'hnr': {0: 'unter U6', 1: 'unter U6'}, 'dst': {0: 'BSm', 1: 'BSm'}, 'Aktenzahl': {0: 'BSm/204/30/2015', 1: 'BSm/202/8/2015'}, 'geometry': {0: [16.34203, 48.21717], 1: [16.34189, 48.21719]}}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-16 08:05:52

我不知道你为什么要做个循环。

代码语言:javascript
复制
df={'events': {0: 22, 1: 22}, 'datum': {0: 2015.0, 1: 2015.0}, 'pz': {0: 204, 1: 202}, 'strasse': {0: 'Hernalser Gürtel', 1: 'Hernalser Gürtel'}, 'hnr': {0: 'unter U6', 1: 'unter U6'}, 'dst': {0: 'BSm', 1: 'BSm'}, 'Aktenzahl': {0: 'BSm/204/30/2015', 1: 'BSm/202/8/2015'}, 'geometry': {0: [16.34203, 48.21717], 1: [16.34189, 48.21719]}}
df = pd.DataFrame(df)
df.geometry = gpd.points_from_xy(df.geometry[0], df.geomety[1])
gdf = gpd.GeoDataFrame(df, geometry='geometry', crs = 'epsg:4326)

所有坐标都更改为点。

你认为这真的是低效的吗?

更新

对不起,我搞错了。我觉得你想要的解决办法就是这个。

代码语言:javascript
复制
df.geometry = gpd.points_from_xy(pd.DataFrame(df.geometry.to_list())[0], pd.DataFrame(df.geometry.to_list())[1])
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70375514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档