다각형으로 바꾸고 싶은 점들이 있습니다.
오목 선체를 시도했지만 아래에서 볼 수 있듯이 원하는 다각형을 얻지 못합니다.
그리고 Denaulay Triangulation을 사용할 때 바깥 쪽 삼각형을 삭제해야합니다.
효율적인 방법이 있습니까?
또한 볼록 껍질을 시도했습니다.
다각형으로 바꾸고 싶은 점들이 있습니다.
오목 선체를 시도했지만 아래에서 볼 수 있듯이 원하는 다각형을 얻지 못합니다.
그리고 Denaulay Triangulation을 사용할 때 바깥 쪽 삼각형을 삭제해야합니다.
효율적인 방법이 있습니까?
또한 볼록 껍질을 시도했습니다.
답변:
다른 방법이 많기 때문에 "왼쪽"또는 "오른쪽"에 속하는 점을 알고 있다고 가정합니다. 그렇다면 들로네 삼각 분할 (Delaunay Triangulation)과 "중심"삼각형을 선택할 수 있습니다. 이 방법을 사용하면 특정 순서로 포인트를 가질 필요가 없습니다. 고려해야 할 것은 필요한 삼각형이 각 측면에서 하나 이상의 점에 닿아 야한다는 사실입니다.
속성 테이블 열기> 표현식으로 선택> "code"= 1
벡터> 연구 도구> 위치별로 선택 (새로운 선택, 교차)
속성 테이블 열기> 점 선택 반전 (ctrl + R)
벡터> 조사 도구> 위치별로 선택 (선택에서 제거, 분리)
벡터> 지오 프로세싱 도구> 디졸브
@radouxju와 동일한 결과가 있습니다.
운영 :
점 선택을 반전 시키거나 다른 폴리 라인 [표현식 선택] 또는 [선택 반전 ] 과 교차하는 점을 선택하십시오
중요 :이 결과를 얻으려면 폴리 라인이 있어야합니다!
파이썬 경험이 있다면, Shapely 라이브러리를 사용하여 두 줄의 점에서 다각형을 만들 수 있습니다. 파이썬에게 두 줄의 시작과 끝 점이 무엇인지 알려 주어야합니다.
from shapely.geometry import Point, Polygon, LineString
import geopandas as gpd
import pandas as pd
line1 = [(1,1),(2,1.2),(3,1)]
line2 = [(1,2),(2,2.2),(3,2)]
# you need to reverse the order of one line to make it a polygon
line2reverse = list(reversed(line2))
polgonList2 = line1 + line2reverse
Polygon(polgonList2)
더 좋은 방법 : geopandas를 사용하여이 작업을 수행 할 수도 있습니다. geopandas를 사용하면 shapefile을 포함한 여러 형식으로 쉽게 저장할 수 있습니다
d = {'identifier' : [1, 2],
'name' : ["Netherlands", "Germany"],
"line1": [[(1,1),(2,1.2),(3,1)], [(1,1),(2,1.2),(3,1)]],
"line2": [[(1.1,2.1),(2.1,2.3),(3.1,2.2)],[(1,2),(2,2.2),(3,2)]]
}
df = pd.DataFrame(d)
def makePolygon(row):
line2reverse = list(reversed(row["line2"]))
return Polygon(line1+line2reverse)
geometries = []
for index, row in df.iterrows():
geometries.append(makePolygon(row))
crs = {'init': 'epsg:4326'}
gdf = gpd.GeoDataFrame(df, crs=crs, geometry=geometries)
gdf.to_file('MyGeometries.shp', driver='ESRI Shapefile')
geopandas gpd.read_file () 함수를 사용하여 라인 지오메트리를 읽을 수 있습니다.
일반적인 GIS에서 다각형 정점의 순서 : 시계 방향 또는 시계 반대 방향
https://nbviewer.jupyter.org/gist/rutgerhofste/b01c17aa6851ea577f10c21a4c3717bc