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

问题描述 投票:-1回答:1

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

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

2)我的第二个问题与计算长度有关,其中用gdf读取espg:4326,我在类对象中应用了转换(更改了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"))
python python-3.x geopandas shapely multilinestring
1个回答
0
投票

@ 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)
© www.soinside.com 2019 - 2024. All rights reserved.