有一大推geojson数据,现在需要对其进行坐标转换,geojson数据示例coordinates=[119,35]coordinates=[[119,35],[119,35]]coordinates=[[[119,35],[119,35]],[[119,35],[119,35]]]期望转换后的坐标:coordinates=[11900,3500]coordinates=[[11900,3500],[11900,3500]]coordinates=[[[11900,3500],[11900,3500]],[[11900,3500],[11900,3500]]]怎么遍历到每一个position(坐标对)?我现在是这么做的:deftransform(x,y,other_parameter):return....defmiterator(ary,mapper):ifisinstance(ary,list):ifisinstance(ary[0],list):forelinary:miterator(el,mapper)else:ary[0],ary[1]=mapper(ary[0],ary[1])deflogic(...):other_parameter=....coordinates=get_coordinates(..)miterator(coordinates,transform)#??????然后问题就出来了,我怎么把other_parameter传到transform里面?所以我希望最好通过generator方式:defxgenerator(ary):ifxx:...yield(x,y)然后我就可以通过这种方式调用:deflogic(...):other_parameter=....coordinates=get_coordinates(..)forx,yinxgenerator(coordinates):transform(x,y,other_parameter)但是这个generator我死活写不出来,怎么破?
2 回答
慕神8447489
TA贡献1780条经验 获得超1个赞
这个递归很难写?不过估计Python除了递归应该有更好的方法吧,我也不太懂。顺带帮你把所有的坐标从序列改成元组格式了。仅供参考:#!/usr/bin/envpython3deftransform(el,args):return(el[0]*args[0],el[1]*args[0])defmiterator(arrs,mapper,*args):ifisinstance(arrs[0],int):returnmapper(arrs,args[0])arr=[];forelinarrs:ifisinstance(el[0],int):item=mapper(el,args[0])else:item=miterator(el,mapper,args)arr.append(item)returnarrcoordinates=[[[119,35],[119,35]],[[119,35],[119,35]]]print(miterator(coordinates,transform,100))#[[(11900,3500),(11900,3500)],[(11900,3500),(11900,3500)]]
添加回答
举报
0/150
提交
取消