Как создать полигон, используя 4 балла? - PullRequest
0 голосов
/ 10 июня 2019

У меня есть CSV-файл, который содержит координаты точек (более 100 строк).В файле CSV есть 2 столбца: широта, долгота.
Эти точки являются верхними левыми углами некоторых полигонов.(квадраты)
Все полигоны имеют одинаковый размер (например, 100x100 метров).

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

Я могу загрузить CSV в фрейм данных, я могу делать точки (или 4 точки в пределахстрока) из координат с GeoPandas.
Но как я могу сделать полигоны для каждой строки, которая соединяет 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 Ответ

1 голос
/ 10 июня 2019

Если вы хотите определить квадрат в метрах, убедитесь, что вы используете проецируемую 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 с точкой, определенной данными координатами, в верхнем левом углу.

...