У меня есть фрейм данных геопанд под названием geodf
. Геометрия каждой строки в этом фрейме данных представляет собой мультиполигон. Например, если мы рассмотрим первую строку в столбце геометрии через фрейм геоданных:
bound = geodf['geometry'].iloc[0]
print(bound)
это выглядит примерно так:
MULTIPOLYGON (((-86.46228799973933 34.31021100007911, -86.46447100007661 34.31018399970606, -86.46447800010341 34.31197299998977, -86.4623920000716 34.31198799958079
Сам по себе мультиполигон массивный, поэтому я попытался создать для него коробку.
box = shapely.geometry.box(*geodf.bounds)
а затем я передал box
через следующий запрос через наш сервер Crate DB:
query = """
SELECT geohash, grid,shape
FROM geo
WHERE layer = 'pop'
AND MATCH(shape, '{}') USING within;
""".format(box)
geoCursor.execute(query)
results = geoCursor.fetchall()
District = gpd.GeoDataFrame(results, columns = ['geohash', 'grid','shape'])
где я передаю polygonbox
в запросе выше через .format(box)
Вместо этого я хотел бы передать bound
вместо box
в запросе выше (обратите внимание, что запрос выше работает для box
). Однако когда я пытаюсь пройти bound
, я получаю следующую ошибку:
ProgrammingError: SQLActionException[UnhandledServerException: java.lang.IllegalArgumentException: Cannot convert Map "{type=MultiPolygon, coordinates=[[[[D@2b59d486}" to shape]
Я не смог диагностировать ошибку выше. Мне было интересно, почему bounds
не работает и как я могу заставить его работать? Мы не хотим использовать граничную рамку, потому что есть много лишней области, которая не содержится в нашей границе мультиполигона.