6

幾何学的データを含むWKTファイルがあります。

ここにサンプル(ポリライン)があります:

s = "ST_GeomFromText( 'LINESTRING( 11.6614 48.0189, 11.6671 48.011, 11.6712 48.0051, 11.6747 48.0001, 11.6777 47.9956, 11.6795 47.9927)',4326)"

私が欲しいのは、ポイントの座標です。だから私は次のことをしました:

s2 = s.split("'")[1]
s3 = s2.split("(")[1]
s4 = s3.strip(' )')
s5 = s4.split(',')
print s5
['11.6614 48.0189',
 ' 11.6671 48.011',
 ' 11.6712 48.0051',
 ' 11.6747 48.0001',
 ' 11.6777 47.9956',
 ' 11.6795 47.9927']

これらs2, s3, s4 and s5は、このソリューションが善悪を超えていることを示すための単なるダミー変数です。

これに対するより簡潔な解決策はありますか?

4

4 に答える 4

5
import re
from pprint import pprint

s = "ST_GeomFromText( 'LINESTRING( 11.6614 48.0189, 11.6671 48.011, 11.6712 48.0051, 11.6747 48.0001, 11.6777 47.9956, 11.6795 47.9927)',4326)"

nums = re.findall(r'\d+(?:\.\d*)?', s.rpartition(',')[0])
coords = zip(*[iter(nums)] * 2)
pprint(coords)

[('11.6614', '48.0189'),
 ('11.6671', '48.011'),
 ('11.6712', '48.0051'),
 ('11.6747', '48.0001'),
 ('11.6777', '47.9956'),
 ('11.6795', '47.9927')]

利用map(float, nums)または同等にすることができます。文字列の代わりにフロートが必要な場合。

于 2013-05-24T09:22:37.677 に答える
1

wkt またはhttps://pypi.python.org/pypi/parsewktを解析するhttps://pypi.python.org/pypi/pygeoifを試すことができます

于 2013-10-30T10:28:15.473 に答える