Как сделать полигон / шейп-файл, который соответствует внешней границе заданных точек? - PullRequest
0 голосов
/ 12 февраля 2020

у меня есть датафрейм, который содержит X и Y кординаты точек

df =

80.4    30  17.11755
80.1    30  17.11755
80.7    30  17.11755
80.7    30.3    17.11755
80.4    30.3    17.11755
80.1    30.3    17.11755
81.3    30  17.11755
81  30  17.11755
81  30.3    17.11755
81.3    30.3    17.11755
81.6    30  17.11755
81.6    30.3    17.11755
81.9    30.3    17.11755
81.9    30  17.11755
82.2    29.7    17.11755
81  29.7    17.11755
81.3    29.7    17.11755
81.6    29.7    17.11755
81.9    29.7    17.11755
82.2    30  17.11755
82.2    30.3    17.11755
80.7    29.7    17.11755
80.4    29.7    17.11755
80.1    29.7    17.11755

, которые можно представить, как показано ниже enter image description here

Как создать шейп-файл / многоугольник, который соответствует прямоугольнику на рисунке (ie, внешняя граница группы точек), если такие точки заданы?

NB: точки делают случайные формы

Любая помощь?

Ответы [ 2 ]

3 голосов
/ 12 февраля 2020

вы можете использовать красивую библиотеку для этого

from __future__ import print_function # py2
from shapely.geometry import MultiPoint

if __name__=="__main__":
    pts = MultiPoint([(16,3), (12,17), (0,6), (-4,-6), (16,6), (16,-7), (16,-3), (17,-4), (5,19), (19,-8), (3,16), (12,13), (3,-4), (17,5), (-3,15), (-3,-9), (0,11), (-9,-3), (-4,-2), (12,10)])
    print (pts.convex_hull)

(я только что украл это у https://rosettacode.org/wiki/Convex_hull#Python)

2 голосов
/ 12 февраля 2020

Добавить к правильному ответу выше:

import geopandas as gpd
from shapely.geometry import MultiPoint, Polygon

pts = [[80.4,    30,  17.11755],
 [80.1,    30,  17.11755],
[80.7,    29.7,  17.11755]]

mp = MultiPoint(pts)

conv_hull = mp.convex_hull

poly = Polygon(conv_hull)

df = gpd.GeoDataFrame({'geometry': gpd.GeoSeries(poly)})
df.crs = {'init': 'epsg:4326'} #Or whatever crs you want
df.to_file('poly.shp')
...