从 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。
如何使用 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。