Извлечь экстент XY из строки WKT

Как с помощью python извлечь XY-экстент многоугольника WKT? Мне нужно это в формате, совместимом с 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 не всегда является прямоугольником / квадратом и не всегда «рисуется» по часовой стрелке, как в примере wkt, показанном здесь.

SRID здесь 27700, а единицы измерения - метры.


person Theo F    schedule 27.01.2020    source источник


Ответы (2)


Предполагая, что ваш 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])
person bm13563    schedule 27.01.2020
comment
Разве вам не нужно где-то там float ()? - person Ture Pålsson; 27.01.2020
comment
да, если вы хотите, чтобы выходы были как числа с плавающей запятой, тогда вы делаете - person bm13563; 27.01.2020

Если вы не против зависимости от GDAL / OGR, вы можете использовать это:

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

Экстент будет кортежем: (366247.0, 383331.0, 156971.0, 174054.0)

Наличие дополнительной зависимости, конечно, является недостатком, но OGR выполняет синтаксический анализ / проверку за вас.

person Rutger Kassies    schedule 28.01.2020