【问题标题】:Geopandas Connect PointsGeopandas 连接点
【发布时间】:2019-03-07 23:58:18
【问题描述】:

我正在尝试创建基本的起点/终点线地图。我的数据有这样的结构:

ID lon_origin  lat_origin  lon_destination  lat_destination
0  -116.284    43.617      -116.304         43.608
1  -116.291    43.610      -116.304         43.608

关于如何连接起点和终点的任何想法?我已经尝试压缩它们,但我无法让 geopandas 一次识别两个几何列。

【问题讨论】:

  • 你期望什么输出?
  • 类似于 .drawgreatcircle tool 的东西在数据框中的每一行上迭代。当我尝试这样做时,我得到TypeError: input must be an array, list, tuple or scalar
  • 通过在每个列名后调用 .values 解决了单行的 TypeError 问题。现在迭代给了我以下信息:for index, row in df.iterrows(): m.drawgreatcircle(df['lon_orig'].values,df['lat_orig'].values,df['lon_dest'].values,df['lat_dest'].values, linewidth=2, color='orange') --------------------------------------------------------------------------- TypeError: only size-1 arrays can be converted to Python scalars

标签: python pandas gis geopandas


【解决方案1】:

如果你只是想计算距离,这里有一个解决方案:

from geopy.distance import lonlat, distance
data = """
  id      lon_origin  lat_origin  lon_destination  lat_destination
   0    -116.284    43.617      -116.304         43.608
   1    -116.291    43.610      -116.304         43.608
    """
df = pd.read_csv(pd.compat.StringIO(data), sep='\s+')
df['KM'] = df.apply(
    (lambda row:distance(lonlat(row['lon_origin'], row['lat_origin']),
                         lonlat(row['lon_destination'], row['lat_destination'])).km), axis=1)

print(df)

输出:

   id  lon_origin  lat_origin  lon_destination  lat_destination       KM
0   0    -116.284      43.617         -116.304           43.608  1.89910
1   1    -116.291      43.610         -116.304           43.608  1.07277

如果您想使用里程,只需更改指标:

df['MILES'] = df.apply(
    (lambda row:distance(lonlat(row['lon_origin'], row['lat_origin']),
                         lonlat(row['lon_destination'], row['lat_destination'])).miles), axis=1)

   id  lon_origin  lat_origin  lon_destination  lat_destination     MILES
0   0    -116.284      43.617         -116.304           43.608  1.180046
1   1    -116.291      43.610         -116.304           43.608  0.666588

【讨论】:

    【解决方案2】:

    我最终放弃了 drawgreatcircle 函数,因为它在我使用的比例下不会非常大或圆形。 plt.plot 做了我所追求的: Code & Output

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-06
      • 2018-06-14
      相关资源
      最近更新 更多