从边界框坐标列表创建形状文件
Creating a shape file from a bounding box coordinates list
关于这个主题的现有问题很少,但不幸的是我没有找到可以解决我的问题的东西。
我有一个点 Lat,Long 坐标,即 Lat= 10 和 Long = 10。我想围绕这个点创建一个 0.5 度边界框的形状文件,所以边界框应该如下:
- 最小多头= 9.75
- 最小纬度 = 9.75
- 最大多头 = 10.25
- 最大纬度 = 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)
关于这个主题的现有问题很少,但不幸的是我没有找到可以解决我的问题的东西。
我有一个点 Lat,Long 坐标,即 Lat= 10 和 Long = 10。我想围绕这个点创建一个 0.5 度边界框的形状文件,所以边界框应该如下:
- 最小多头= 9.75
- 最小纬度 = 9.75
- 最大多头 = 10.25
- 最大纬度 = 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)