Parsing a WKT file

I have a WKT file containing some geometric data.

Here's the sample (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 demonstrate that this solution cannot be good and evil.

Is there a more concise solution for this?

+4
source share
3 answers
 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 can use map(float, nums) or equiv. if you want floats instead of strings.

+4
source

An 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 #eg turn everything into a list: arr = [] for point in a['coordinates']: arr.append(point) print(arr) 
+2
source

Source: https://habr.com/ru/post/1482532/


All Articles