Geopandas: получите окно, которое покрывает область GeoDataFrame геопанды, чтобы использовать ее для инвертирования карты - PullRequest
0 голосов
/ 19 апреля 2019

Я пытаюсь инвертировать карту.

import geopandas as gpd
import geoplot as gplt

world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
denmark = world[world.name == 'Denmark']

Я хотел бы выяснить границы "данных Дании", к которым я могу создать рамку GeoDataFrame в форме рамки, которая охватывает всю Данию.

Затем я бы пересек это с "Данией", чтобы получить форму всего, что не является Данией, которое я позже смогу использовать для покрытия частей карты, которые я не хочу показывать.

Я пытался просмотреть GeoDataFrame, чтобы создать это поле вручную, но это не работает.

cords = [c3
         for c in mapping(denmark['geometry'])['features']
         for c2 in c['geometry']['coordinates']
         for c3 in c2
        ]


xcords = [x[0] for x in cords if isinstance(x[0], float)]
ycords = [y[1] for y in cords if isinstance(y[1], float)]

w3 = gpd.GeoDataFrame(
    [Polygon([[max(xcords), max(ycords)],
         [max(xcords), min(ycords)],
         [min(xcords), min(ycords)],
         [min(xcords), max(ycords)]
         ])],
    columns = ['geometry'],
    geometry='geometry')

Есть ли простой и быстрый способ получить эту коробку? Или есть способ инвертировать GeoDataFrame?

Ответы [ 2 ]

2 голосов
/ 19 апреля 2019

GeoDataFrame имеет атрибут total_bounds, который возвращает minx, miny, maxx, maxy всех геометрий (мин / макс bounds всех геометрий).
И для создания этого многоугольника вы можете затем передать эти значения в функцию shapely.geometry.box:

>>> denmark.total_bounds                                                      
array([ 8.08997684, 54.80001455, 12.69000614, 57.73001659])

>>> from shapely.geometry import box

>>> box(*denmark.total_bounds)                                 
<shapely.geometry.polygon.Polygon at 0x7f06be3e7668>

>>> print(box(*denmark.total_bounds))                                          
POLYGON ((12.6900061377556 54.80001455343792, 12.6900061377556 57.73001658795485, 8.089976840862221 57.73001658795485, 8.089976840862221 54.80001455343792, 12.6900061377556 54.80001455343792))
0 голосов
/ 19 апреля 2019

Похоже, что GeoDataFrame имеет свойство "total_bounds"

Так что это

denmark.total_bounds

, которое возвращает

array([ 8.08997684, 54.80001455, 12.69000614, 57.73001659])
...