Reputation: 2809
I have a WKT-file containing some geometric data.
Here a sample (a polyline):
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)"
What I want is the coordinates of the points. So I did the following:
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']
the s2, s3, s4 and s5
are just dummy variables to showcase that this solution is beyond good and Evil.
Is there any more concise solution for this?
Upvotes: 7
Views: 16702
Reputation: 2953
from shapely import wkt
p1 = wkt.loads('POLYGON((0 0, 1 0, 1 1, 0 1, 0 0))')
Upvotes: 5
Reputation: 563
Old question, but here is an alternative using JSON and geomet, a small Python library that converts GeoJSON <-> WKT.
from geomet import wkt
import json
#your WKT input:
ls = 'LINESTRING(2.379444 48.723333, 2.365278 48.720278, 2.2525 48.696111, 2.224167 48.69, 2.129167 48.652222, 2.093611 48.638056)'
#convert it to GeoJSON:
ls_json = wkt.loads(ls)
#from this point on, ls_json is storing your data in JSON format,
#which you can access like a python dict:
point = ls_json['coordinates'][5][1]
# --> gives you 48.638056
#e.g. turn everything into a list:
arr = []
for point in a['coordinates']:
arr.append(point)
print(arr)
Upvotes: 12
Reputation: 142156
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')]
You could utilise map(float, nums)
or equiv. if you wanted floats instead of strings.
Upvotes: 5
Reputation: 1797
you can try https://pypi.python.org/pypi/pygeoif which parses wkt or https://pypi.python.org/pypi/parsewkt
Upvotes: 1