วาดขอบเขตของชุดคะแนนโดยใช้ QGIS?


9

ฉันมีชุดของจุดที่ฉันต้องการเปลี่ยนเป็นรูปหลายเหลี่ยม

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่

ฉันลองลำเรือเว้า แต่ไม่ได้รับรูปหลายเหลี่ยมตามที่คุณเห็นด้านล่าง

ป้อนคำอธิบายรูปภาพที่นี่

และเมื่อฉันใช้ Denaulay Triangulation ฉันต้องลบสามเหลี่ยมด้านนอก

ป้อนคำอธิบายรูปภาพที่นี่

มีวิธีที่มีประสิทธิภาพในการทำเช่นเดียวกัน?

ฉันยังลองฮัลล์นูน

ป้อนคำอธิบายรูปภาพที่นี่


คุณลองใช้ Vector -> เครื่องมือ Geoprocessing -> ฮัลล์นูน ... หรือกล่องเครื่องมือ Geoprocessing -> เครื่องมือเรขาคณิตเวกเตอร์ -> ฮัลล์นูนหรือไม่?
Dmitry Baryshnikov

ใช่ฉันลองแล้ว อย่างไรก็ตามฉันคิดว่าสิ่งนี้ไม่สามารถใช้ได้กับรูปร่างที่ฉันต้องการ ฉันจะอัปเดตคำถาม
สตีเฟ่นจาค็อบ

3
คุณมีเส้นที่ปรากฏในภาพแรกของคุณหรือเฉพาะจุด?
radouxju

1
ฉันมีคำถาม: เป้าหมายของคุณคืออะไร? ข้อมูลแสดงถึงอะไร? แม่น้ำ ถนน ฉันกลัวว่าถ้าคุณมีรูปร่าง "S" หรือรูปร่างที่บิดเบี้ยวมันจะไม่ทำงานแม้แต่กับงูหลาม ...
Keiko

2
@StephenJacob - คะแนนของคุณเป็นอย่างไร หากพวกเขามีคำสั่งตามเข็มนาฬิกาหรือทวนเข็มนาฬิกาก็เป็นไปได้ที่จะแปลงคะแนนของคุณเป็นบรรทัดแรก (เช่นการใช้เครื่องมือแปลงคะแนนของ SAGA เป็นบรรทัด ) แล้วแปลงเป็น poygon (เช่นLines to polygons )
โจเซฟ

คำตอบ:


5

ฉันคิดว่าคุณรู้ว่าจุดใดเป็นของ "ซ้าย" หรือ "ถูกต้อง" เพราะมิฉะนั้นจะมีวิธีแก้ปัญหามากมาย ถ้าเป็นเช่นนั้นคุณสามารถใช้การหาสามเหลี่ยม delaunay ตามด้วยการเลือกสามเหลี่ยม "กลาง" ด้วยวิธีนี้ไม่จำเป็นต้องมีคะแนนตามลำดับที่ระบุ สิ่งที่คุณต้องพิจารณาคือความจริงที่ว่าสามเหลี่ยมที่คุณต้องการต้องแตะอย่างน้อยหนึ่งจุดจากแต่ละด้าน

ตารางแอตทริบิวต์แบบเปิด> เลือกตามนิพจน์> "code" = 1

เวกเตอร์> เครื่องมือวิจัย> เลือกตามสถานที่ (ตัวเลือกใหม่ตัดกัน)

ป้อนคำอธิบายรูปภาพที่นี่

ตารางแอตทริบิวต์เปิด> กลับเลือกส่วน (ctrl + R)

เวกเตอร์> เครื่องมือวิจัย> เลือกตามสถานที่ (ลบออกจากการเลือกไม่รวม)

ป้อนคำอธิบายรูปภาพที่นี่

เวกเตอร์> เครื่องมือการประมวลผลเชิงภูมิศาสตร์> ละลาย

ป้อนคำอธิบายรูปภาพที่นี่


3

ฉันมีผลลัพธ์เช่นเดียวกับ @radouxju

การดำเนินงาน:

  1. เลือก 1 polyline [เลือกเมื่อคลิก]
  2. อัปเดตตาราง polyline ของคุณและส่งผลต่อตัวเลขให้กับแต่ละคุณลักษณะ[เครื่องคำนวณภาคสนาม]
  3. เลือกจุดที่ตัดกันหนึ่ง polyline [เครื่องมือสืบค้นเชิงพื้นที่]
  4. อัปเดตคะแนนที่เลือกตามค่าโพลีไลน์ที่ได้รับผลกระทบก่อนหน้านี้[เครื่องคำนวณฟิลด์]
  5. รักษาจุดที่เลือกไว้และเลือกสามเหลี่ยม delaunay ซึ่งตัดกันจุดที่เลือกเหล่านี้[เครื่องมือสืบค้นเชิงพื้นที่]
    ป้อนคำอธิบายรูปภาพที่นี่
    ป้อนคำอธิบายรูปภาพที่นี่

  6. กลับการเลือกจุดหรือเลือกจุดที่ตัดกันเส้นอื่น ๆ[เลือกโดยการแสดงออก]หรือ[สลับการเลือก]

  7. ลบออกจากส่วนที่เลือกในปัจจุบันสามเหลี่ยม delaunay ซึ่งแยกออกจากจุดอื่น ๆ[เครื่องมือสืบค้นเชิงพื้นที่]
    ป้อนคำอธิบายรูปภาพที่นี่
    ป้อนคำอธิบายรูปภาพที่นี่

  8. รวมคุณสมบัติโดยการเลือก[เครื่องมือประมวลผลทางภูมิศาสตร์> ละลาย]
    ป้อนคำอธิบายรูปภาพที่นี่
    ป้อนคำอธิบายรูปภาพที่นี่


สำคัญ : คุณต้องมี polylines เพื่อให้ได้ผลลัพธ์นี้!


ขอบคุณ @Keiko คำตอบของคุณมีประโยชน์ในการตีความคำตอบของ radouxju
Stephen Jacob

ไม่เป็นไร @StephenJacob! มันเป็นแค่การทำงานเป็นทีม! ;-)
Keiko

1

หากคุณมีประสบการณ์กับงูหลามคุณสามารถใช้ไลบรารี 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


จะแปลงเป็นไฟล์รูปร่างได้อย่างไร?
สตีเฟ่นจาค็อบ

1
คุณสามารถใช้เครื่องมือหลายอย่าง แต่ฉันเป็นแฟนของ geopandas ใช้ gdf.to_file ('MyGeometries.shp', driver = 'ESRI Shapefile')
RutgerH
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.