如何使用4点创建多边形?

时间:2019-06-10 08:35:24

标签: python python-3.x pandas polygon geopandas

我有CSV文件,其中包含点(超过100行)的坐标。 CSV文件中有两列:纬度,经度。
这些点是某些多边形的左上角。 (正方形)
所有多边形的大小都相同(例如100x100米)。

Latitude               Longitude
56.37769816725615     -4.325049868061924
55.37769816725615     -3.325049868061924
51.749167440074324    -4.963575226888083 
...

我可以将CSV加载到数据框中,可以使用GeoPandas从坐标中取得点(或行中的4点)。
但是如何为连接4个点的每一行制作多边形?

感谢您的帮助。

df = pd.read_csv('ExportPolyID.csv',nrows=10)
gdf= geopandas.GeoDataFrame(df,geometry=geopandas.points_from_xy(df.long, df.lat))
gdf['point2']= gdf.translate(2,2)
gdf['point3']=gdf.translate(3,3)
gdf['point4']=gdf.translate(4,4)
#After this I have 4 points for each row, but I can't connect them to create Polygons

1 个答案:

答案 0 :(得分:1)

如果要以米为单位定义平方,请确保使用的是投影CRS(http://geopandas.org/projections.html#re-projecting)。

然后您可以使用类似的方法(可能有更有效的方法,但这是明确的方法):

from shapely.geometry import Polygon
lat = [0, 2, 4]
lon = [0, 2, 4]

gdf = gpd.GeoDataFrame()
gdf['lat'] = lat
gdf['lon'] = lon

dim = 1  # define the length of the side of the square
geoms = []
for index, row in gdf.iterrows():
    ln = row.lon
    lt = row.lat
    geom = Polygon([(ln, lt), ((ln + dim), lt), ((ln + dim), (lt - dim)), (ln, (lt - dim))])
    geoms.append(geom)

gdf['geometry'] = geoms 

这将根据大小为dim x dim的设置坐标生成正方形多边形,其中给定坐标定义的点位于左上角。