如何在真实多边形上转换多边形字符串

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(";")]