python - 计算 LineString 对象的长度时出错

python - Error calculating length in LineString objects

目前在编写如下所示的代码时遇到两个错误,我想知道是否有人可以帮助我或提供一些提示来解决它们,谢谢。

1) 在尝试将多个 LineString 对象分配给一个 MultiLineString 对象时,我遇到了困难。这个想法是根据馈线 (fdr) 创建一个 name 并将其用作 MultiLineString 对象中的变量。尝试了不同的方法(例如 globals()[]、列表理解、..),但在下面的代码中产生错误或类似的东西给出了 AssertionError。问题是 namen 产生字符串对象 'l_6_1', 'l_6_2', .. 而变量 l_6_1, l_6_2, .. 是必需的。 (已解决)

2) 我的第二个问题与计算长度有关,其中 gdf 是用 espg:4326 读取的,我在 class 对象中应用了一个转换(它改变了 LineString 对象! -- 这已经过检查),同时 print(lengte) 的结果不受影响。我知道我的错误在哪里吗?

class Lines:
    def __init__(self, fdr, node, gdf):

        j= 1
        lines= {}
        gdf= gdf.to_crs({'init': 'epsg:3857'})

        for i, k in zip(node[0::2], node[1::2]):
            name= 'l_'+str(fdr)+'_'+str(j)
            lines[name]= LineString([gdf.loc[i][['X', 'Y']], gdf.loc[k][['X', 'Y']]])
            lengte= lines[name].length 
            print(lengte)
            j= j+1

        lines= pd.Series(lines)
        s= lines.values

        f= geometry.MultiLineString([l_6_0]+ list(s))
        self.f = ops.linemerge(f)

此外,我将其附加到地图并保存(并导出),因为我使用 Spyder。

x= Lines(6, nodes_6, gdf6)  
folium.GeoJson(x.f).add_to(m)
m.save(os.path.join(dest, "grid.html"))

@LuisBlanche 在检查 values() 的属性时我注意到这适用于数据帧和 not 字典。第一个问题的答案是通过应用 s= lines.values 并将其作为列表进一步切入 MultiLineString 来解决的。

class Lines:
    def __init__(self, fdr, node, gdf):

        j= 1
        lines= {}
        gdf= gdf.to_crs({'init': 'epsg:3857'})
        for i, k in zip(node[0::2], node[1::2]):
            name= 'l_'+str(fdr)+'_'+str(j)
            lines[name]= LineString([gdf.loc[i][['X', 'Y']], gdf.loc[k][['X', 'Y']]])
            lengte= lines[name].length 
            print(lengte)
            j= j+1

        lines= pd.Series(lines)
        s= lines.values

        f= geometry.MultiLineString([l_6_0]+ list(s))
        self.f = ops.linemerge(f)