问题描述
我有一个来自使用 pykml 解析的 kml 的 lxml.objectify.StringElement。 解析如下:
with open('btgdbgdgnh.kml') as f:
documento = parser.parse(f).getroot().Document
d = {}
for p in documento.Folder:
d[p.name] = {}
for place in p.Placemark:
d[p.name][place.name] = []
for pol in place.MultiGeometry.Polygon:
d[p.name[place.name].append(pol.outerBoundaryIs.LinearRing.coordinates)
这种解析的输出如下:
'\n -0.458304,38.368177,0\n -0.458486,38.368272,0\n -0.458679,38.36836,0\n
在与几个 kml 库搏斗后,我决定采用 hacky 方式并尝试自己格式化它,以便将其提供给它来创建像这样的匀称多边形:
s='\n -0.458304,38.368177,0\n -0.458486,38.368272,0\n -0.458679,38.36836,0\n
s = s.replace('0\n','0)|(')
s = s.replace('\n','(')
s = " ".join(s.split())
s = s.split('|')
呈现此输出:
['( -0.458304,38.368177,0)',
'( -0.458486,38.368272,0)',
'( -0.465878,38.368924,0)',
'( -0.468405,38.368941,0)',
'( -0.472423,38.369025,0)']
而且我无法将里面的内容转换为简单的元组。 我尝试了 ast 库,但似乎已被弃用(?),numpy 数组,这似乎是最像这样的“pythonic”:
results = np.fromstring(s, dtype=int, sep='|')
但返回了一个空数组。 我从一开始的解决方案似乎不是一个很好的解决方案,但这是我第一次使用 pykml,所以这是我唯一能想到的方法,现在我迷路了。 任何帮助将不胜感激,谢谢!
1楼
结束使用列表理解:
s=str(d['erveg']['dbgbtn'])
s = " ".join(s.split())
po = [tuple(float(j) for j in i.split(",")) for i in s.split()[1:-2]]