从边界框坐标列表创建形状文件

Creating a shape file from a bounding box coordinates list

关于这个主题的现有问题很少,但不幸的是我没有找到可以解决我的问题的东西。

我有一个点 Lat,Long 坐标,即 Lat= 10 和 Long = 10。我想围绕这个点创建一个 0.5 度边界框的形状文件,所以边界框应该如下:

  1. 最小多头= 9.75
  2. 最小纬度 = 9.75
  3. 最大多头 = 10.25
  4. 最大纬度 = 10.25

有谁知道如何在 Python 中做到这一点?

这是使用 shapely、geopandas 和 pandas 的一种方法:

import geopandas as gpd
import pandas as pd
from shapely.geometry import Polygon


def bbox(lat,lng, margin):                                                                                                                  
    return Polygon([[lng-margin, lat-margin],[lng-margin, lat+margin],
    [lng+margin,lat+margin],[lng+margin,lat-margin]])

gpd.GeoDataFrame(pd.DataFrame(['p1'], columns = ['geom']),
     crs = {'init':'epsg:4326'},
     geometry = [bbox(10,10, 0.25)]).to_file('poly.shp')

我想增强 Bruno Carballo 的代码。我希望它对你来说更容易

    import geopandas as gpd
    import pandas as pd
    from shapely.geometry import Polygon

    # function to return polygon
    def bbox(long0, lat0, lat1, long1):
        return Polygon([[long0, lat0],
                        [long1,lat0],
                        [long1,lat1],
                        [long0, lat1]])

    test = bbox(9.75, 9.75, 10.25, 10.25)

    gpd.GeoDataFrame(pd.DataFrame(['p1'], columns = ['geom']),
         crs = {'init':'epsg:4326'},
         geometry = [test]).to_file('poly.shp')

这里是 Bruno Carballo 的答案的实现,将其应用于整个 DataFrame:

import geopandas as gpd
import pandas as pd
from shapely.geometry import Polygon

# function to return polygon
def bbox(vec):
    long0, lat0, lat1, long1 = vec[0], vec[1], vec[2], vec[3]
    return Polygon([[long0, lat0],
                    [long0,lat1],
                    [long1,lat1],
                    [long1, lat0]])

def extentPolygon(df):
    return(
        pd.DataFrame({'geometry' : df[['ext_min_x','ext_min_y','ext_max_y','ext_max_x']].apply(bbox, axis = 1)})
    )


df = pd.DataFrame({'ext_min_x' : [9.75, 9.78], 'ext_max_x' : [10.25, 10.28], 
                    'ext_min_y' : [9.75, 9.78],  'ext_max_y' : [10.25, 10.28]})
df = extentPolygon(df)

之后您可以轻松地将生成的 DataFrame 转换为 GeoDataFrame:

df_gp = gdp.GeoDataFrame(df)