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