Geopandas:获取一个包含地理区域GeoDataFrame的框,以使用它来反转地图

问题描述 投票:0回答:2

我正在尝试反转地图。

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')

有一个简单,快捷的方法来获得这个盒子?或者有没有办法反转DataFrame?

geopandas
2个回答
2
投票

GeoDataFrame具有total_bounds属性,该属性返回所有几何的minx,miny,maxx,maxy(所有几何的bounds的最小值/最大值)。 要创建一个Polygon,你可以将这些值传递给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
投票

看起来GeoDataFrame的属性为“total_bounds”

所以这是

denmark.total_bounds

返回

array([ 8.08997684, 54.80001455, 12.69000614, 57.73001659])
© www.soinside.com 2019 - 2024. All rights reserved.