从 WKT 字符串中提取 XY 范围

Extract XY extent from WKT string

如何使用 python 提取 WKT 多边形的 XY 范围?我需要它的 gdal 兼容格式,例如:minx miny maxx maxy

所以对于下面的例子,我需要将 wkt 转换为 wkt_extent:

wkt = "Polygon ((366247 156971, 366247 174054, 383331 174054, 383331 156971, 366247 156971))"
# need xy bounding box coordinates of wkt, as shown below
wkt_extent = "366247 156971 383331 174054"

请记住,wkt 并不总是 rectangle/square,也不总是 'drawn' 顺时针方向,如此处显示的示例 wkt。

这里的SRID是27700,单位是米

假设您的 WKT 作为字符串传递:

def parse_geometry(geometry):
    regex = r'[0-9-\.]+'
    parsed_geom = re.findall(regex, geometry)
    parsed_geom = [float(i) for i in parsed_geom]
    return max(parsed_geom[::2]), min(parsed_geom[::2]), max(parsed_geom[1::2]), min(parsed_geom[1::2])

如果您不介意对 GDAL/OGR 的依赖,您可以使用这个:

geom = ogr.CreateGeometryFromWkt(wkt)
extent = geom.GetEnvelope()

范围将是一个元组:(366247.0, 383331.0, 156971.0, 174054.0)

具有额外的依赖性当然是一个缺点,但 OGR 确实会为您处理 parsing/validation。