【发布时间】:2020-04-30 07:35:09
【问题描述】:
目前在编写下面显示的代码时处理两个错误,我想知道是否有人可以帮助我或提供一些解决它们的提示,谢谢。
1) 尝试将多个 LineString 对象分配给 MultiLineString 对象时遇到了困难。这个想法是根据馈送器(@987654324@)创建一个name,并将其用作MultiLineStringobject 中的变量。尝试了不同的方法(例如 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"))
【问题讨论】:
-
l_6_0是 LineString 吗?在这种情况下,你的名字列表中的项目也应该是 LineStrings .. 所以也许你做了类似的事情:f = geometry.MultiLineString([l_6_0] + lines.values()) -
@LuisBlanche 确实是
LineString,我也尝试过,但给了我TypeError: 'numpy.ndarray' object is not callable。可能需要注意:当使用lines['l_6_1'], lines['l_6_2'], ..., lines['l_6_X']而不是namen时,不会发生错误,并且地图会显示所有行。 -
我的错误:然后尝试
f = geometry.MultiLineString([l_6_0] + list(lines.values())
标签: python python-3.x geopandas shapely multilinestring