如何转换坐标以在 GeoPandas 中使用? (例如,37_N)
How to convert coordinates for use in GeoPandas? (e.g., 37_N)
我有以下数据框:
import pandas as pd
df_coords = pd.DataFrame({'lat': {'1010': '37_N',
'1050': '32_N',
'1059': '19_N',
'1587': '6_S',
'3367': '44_N'},
'lon': {'1010': '65_W',
'1050': '117_W',
'1059': '156_W',
'1587': '106_E',
'3367': '12_E'}})
我正在尝试转换这些坐标,以便构建一个 GeoPandas
数据框对象,但我似乎无法弄清楚如何转换字符串。
import geopandas as gpd
gpd.points_from_xy(x=["37_N"], y=["65_W"])
# ---------------------------------------------------------------------------
# ValueError Traceback (most recent call last)
# <ipython-input-36-a02c9f8a011d> in <module>
# ----> 1 gpd.points_from_xy(x=["37_N"], y=["65_W"])
# ~/anaconda3/envs/soothsayer_py3.8_env/lib/python3.8/site-packages/geopandas/array.py in points_from_xy(x, y, z, crs)
# 256 output : GeometryArray
# 257 """
# --> 258 return GeometryArray(vectorized.points_from_xy(x, y, z), crs=crs)
# 259
# 260
# ~/anaconda3/envs/soothsayer_py3.8_env/lib/python3.8/site-packages/geopandas/_vectorized.py in points_from_xy(x, y, z)
# 241 def points_from_xy(x, y, z=None):
# 242
# --> 243 x = np.asarray(x, dtype="float64")
# 244 y = np.asarray(y, dtype="float64")
# 245 if z is not None:
# ~/anaconda3/envs/soothsayer_py3.8_env/lib/python3.8/site-packages/numpy/core/_asarray.py in asarray(a, dtype, order)
# 83
# 84 """
# ---> 85 return array(a, dtype, copy=False, order=order)
# 86
# 87
# ValueError: could not convert string to float: '37_N'
谁能描述一下如何将 N,S,W,E
信息转换为 GeoPandas
的实际坐标?
您需要将经度和纬度值映射到 -180 and 180
之间的范围内。 Here geopandas 文档
这是一个函数。
def convert_value(value):
if value.endswith('_N') or value.endswith('_E'):
return int(value[:-2])
if value.endswith('_S') or value.endswith('_W'):
return -int(value[:-2])
输入要转换的值,例如“12_W”。该函数将 return "-12"。不能保证什么值应该是负值,什么值应该是正值。我只是在最有意义的地方设置了减号。
geopandas.points_from_xy(value_longitude, value_latitude, crs="EPSG:4326")
我有以下数据框:
import pandas as pd
df_coords = pd.DataFrame({'lat': {'1010': '37_N',
'1050': '32_N',
'1059': '19_N',
'1587': '6_S',
'3367': '44_N'},
'lon': {'1010': '65_W',
'1050': '117_W',
'1059': '156_W',
'1587': '106_E',
'3367': '12_E'}})
我正在尝试转换这些坐标,以便构建一个 GeoPandas
数据框对象,但我似乎无法弄清楚如何转换字符串。
import geopandas as gpd
gpd.points_from_xy(x=["37_N"], y=["65_W"])
# ---------------------------------------------------------------------------
# ValueError Traceback (most recent call last)
# <ipython-input-36-a02c9f8a011d> in <module>
# ----> 1 gpd.points_from_xy(x=["37_N"], y=["65_W"])
# ~/anaconda3/envs/soothsayer_py3.8_env/lib/python3.8/site-packages/geopandas/array.py in points_from_xy(x, y, z, crs)
# 256 output : GeometryArray
# 257 """
# --> 258 return GeometryArray(vectorized.points_from_xy(x, y, z), crs=crs)
# 259
# 260
# ~/anaconda3/envs/soothsayer_py3.8_env/lib/python3.8/site-packages/geopandas/_vectorized.py in points_from_xy(x, y, z)
# 241 def points_from_xy(x, y, z=None):
# 242
# --> 243 x = np.asarray(x, dtype="float64")
# 244 y = np.asarray(y, dtype="float64")
# 245 if z is not None:
# ~/anaconda3/envs/soothsayer_py3.8_env/lib/python3.8/site-packages/numpy/core/_asarray.py in asarray(a, dtype, order)
# 83
# 84 """
# ---> 85 return array(a, dtype, copy=False, order=order)
# 86
# 87
# ValueError: could not convert string to float: '37_N'
谁能描述一下如何将 N,S,W,E
信息转换为 GeoPandas
的实际坐标?
您需要将经度和纬度值映射到 -180 and 180
之间的范围内。 Here geopandas 文档
这是一个函数。
def convert_value(value):
if value.endswith('_N') or value.endswith('_E'):
return int(value[:-2])
if value.endswith('_S') or value.endswith('_W'):
return -int(value[:-2])
输入要转换的值,例如“12_W”。该函数将 return "-12"。不能保证什么值应该是负值,什么值应该是正值。我只是在最有意义的地方设置了减号。
geopandas.points_from_xy(value_longitude, value_latitude, crs="EPSG:4326")