如何在真实多边形上转换多边形字符串
How to transform a polygon string on a real polygon
我需要一些支持来真实多边形。
今天我有一个字符串,我需要更改一种可以识别为多边形的格式。
我直接从SQL获取多边形的值:
示例:
我是这样阅读的:
string = "POLYGON ((-47.158846224312285 -21.349760242365733;-47.158943117468695 -21.349706412900805;-47.159778541623055 -21.349008036758804))"
我需要改成这个格式
list = [(-47.158846224312285, -21.349760242365733), (47.158943117468695 -21.349706412900805), (-47.159778541623055, -21.349008036758804)]
知道如何修改吗?
您可以尝试通过 re
module 使用正则表达式解析字符串,如下所示:
import re
pat = re.compile(r'''(-*\d+\.\d+ -*\d+\.\d+);*''')
s = "POLYGON ((-47.158846224312285 -21.349760242365733;-47.158943117468695 -21.349706412900805;-47.159778541623055 -21.349008036758804))"
matches = pat.findall(s)
if matches:
lst = [tuple(map(float, m.split())) for m in matches]
print(lst)
输出:
[(-47.158846224312285, -21.349760242365733), (-47.158943117468695, -21.349706412900805), (-47.159778541623055, -21.349008036758804)]
根据您输入的字符串,这可能是一种简单的情况,只需使用一些字符串操作 regular expression 库和一些字符串操作。
import re
# create a regular expression to extract polygon coordinates
polygon_re = re.compile(r"^POLYGON \(\((.*)\)\)")
input = "POLYGON ((-47.1 -21.3;-47.1 -21.3;-47.1 -21.3))"
polygon_match = polygon_re.match(input)
if polygon_match is not None:
coords_str = polygon_match.groups()[0]
# parse string of coordinates into a list of float pairs
point_strs = coord_str.split(";")
polygon = [[float(s) for s in p.split()] for p in coords_str.split(";")]
我需要一些支持来真实多边形。 今天我有一个字符串,我需要更改一种可以识别为多边形的格式。
我直接从SQL获取多边形的值:
示例:
我是这样阅读的:
string = "POLYGON ((-47.158846224312285 -21.349760242365733;-47.158943117468695 -21.349706412900805;-47.159778541623055 -21.349008036758804))"
我需要改成这个格式
list = [(-47.158846224312285, -21.349760242365733), (47.158943117468695 -21.349706412900805), (-47.159778541623055, -21.349008036758804)]
知道如何修改吗?
您可以尝试通过 re
module 使用正则表达式解析字符串,如下所示:
import re
pat = re.compile(r'''(-*\d+\.\d+ -*\d+\.\d+);*''')
s = "POLYGON ((-47.158846224312285 -21.349760242365733;-47.158943117468695 -21.349706412900805;-47.159778541623055 -21.349008036758804))"
matches = pat.findall(s)
if matches:
lst = [tuple(map(float, m.split())) for m in matches]
print(lst)
输出:
[(-47.158846224312285, -21.349760242365733), (-47.158943117468695, -21.349706412900805), (-47.159778541623055, -21.349008036758804)]
根据您输入的字符串,这可能是一种简单的情况,只需使用一些字符串操作 regular expression 库和一些字符串操作。
import re
# create a regular expression to extract polygon coordinates
polygon_re = re.compile(r"^POLYGON \(\((.*)\)\)")
input = "POLYGON ((-47.1 -21.3;-47.1 -21.3;-47.1 -21.3))"
polygon_match = polygon_re.match(input)
if polygon_match is not None:
coords_str = polygon_match.groups()[0]
# parse string of coordinates into a list of float pairs
point_strs = coord_str.split(";")
polygon = [[float(s) for s in p.split()] for p in coords_str.split(";")]