ฉันมีชุดของจุดที่ฉันต้องการเปลี่ยนเป็นรูปหลายเหลี่ยม
ฉันลองลำเรือเว้า แต่ไม่ได้รับรูปหลายเหลี่ยมตามที่คุณเห็นด้านล่าง
และเมื่อฉันใช้ Denaulay Triangulation ฉันต้องลบสามเหลี่ยมด้านนอก
มีวิธีที่มีประสิทธิภาพในการทำเช่นเดียวกัน?
ฉันยังลองฮัลล์นูน
ฉันมีชุดของจุดที่ฉันต้องการเปลี่ยนเป็นรูปหลายเหลี่ยม
ฉันลองลำเรือเว้า แต่ไม่ได้รับรูปหลายเหลี่ยมตามที่คุณเห็นด้านล่าง
และเมื่อฉันใช้ Denaulay Triangulation ฉันต้องลบสามเหลี่ยมด้านนอก
มีวิธีที่มีประสิทธิภาพในการทำเช่นเดียวกัน?
ฉันยังลองฮัลล์นูน
คำตอบ:
ฉันคิดว่าคุณรู้ว่าจุดใดเป็นของ "ซ้าย" หรือ "ถูกต้อง" เพราะมิฉะนั้นจะมีวิธีแก้ปัญหามากมาย ถ้าเป็นเช่นนั้นคุณสามารถใช้การหาสามเหลี่ยม delaunay ตามด้วยการเลือกสามเหลี่ยม "กลาง" ด้วยวิธีนี้ไม่จำเป็นต้องมีคะแนนตามลำดับที่ระบุ สิ่งที่คุณต้องพิจารณาคือความจริงที่ว่าสามเหลี่ยมที่คุณต้องการต้องแตะอย่างน้อยหนึ่งจุดจากแต่ละด้าน
ตารางแอตทริบิวต์แบบเปิด> เลือกตามนิพจน์> "code" = 1
เวกเตอร์> เครื่องมือวิจัย> เลือกตามสถานที่ (ตัวเลือกใหม่ตัดกัน)
ตารางแอตทริบิวต์เปิด> กลับเลือกส่วน (ctrl + R)
เวกเตอร์> เครื่องมือวิจัย> เลือกตามสถานที่ (ลบออกจากการเลือกไม่รวม)
เวกเตอร์> เครื่องมือการประมวลผลเชิงภูมิศาสตร์> ละลาย
ฉันมีผลลัพธ์เช่นเดียวกับ @radouxju
การดำเนินงาน:
รักษาจุดที่เลือกไว้และเลือกสามเหลี่ยม delaunay ซึ่งตัดกันจุดที่เลือกเหล่านี้[เครื่องมือสืบค้นเชิงพื้นที่]
กลับการเลือกจุดหรือเลือกจุดที่ตัดกันเส้นอื่น ๆ[เลือกโดยการแสดงออก]หรือ[สลับการเลือก]
ลบออกจากส่วนที่เลือกในปัจจุบันสามเหลี่ยม delaunay ซึ่งแยกออกจากจุดอื่น ๆ[เครื่องมือสืบค้นเชิงพื้นที่]
สำคัญ : คุณต้องมี polylines เพื่อให้ได้ผลลัพธ์นี้!
หากคุณมีประสบการณ์กับงูหลามคุณสามารถใช้ไลบรารี Shapely และสร้างรูปหลายเหลี่ยมจากจุดในสองบรรทัด คุณจะต้องบอก python ว่าจุดเริ่มต้นและจุดสิ้นสุดของทั้งสองบรรทัดคืออะไร
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 ช่วยให้คุณบันทึกลงในหลาย ๆ รูปแบบได้อย่างง่ายดายรวมถึง shapefiles
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