คำนวณพิกัดกล่องขอบเขตของรูปหลายเหลี่ยมที่เลือกด้วย QGIS


17

ฉันเพียงแค่ด้วยตนเอง (และค่อนข้างไม่ถูกต้องฉันแน่ใจ) ดึงพิกัดกล่องขอบเขตสำหรับรูปหลายเหลี่ยมเขตซึ่งเป็นตัวเลือกจากชั้นที่ใหญ่กว่าของรูปร่างเคาน์ตี ฉันต้องการใช้ปลั๊กอิน QGIS หรือฟังก์ชั่นอื่น ๆ เพื่อคำนวณสิ่งนี้อย่างรวดเร็วและไม่ต้องทำด้วยมือ เกือบจะเป็นไปได้แน่นอน แต่ฉันไม่พบสิ่งใดจากการค้นหาของ Google

คำตอบ:


26

ฟังก์ชั่น Python เล็กน้อยต่อไปนี้จะส่งออกพิกัดของกล่องขอบเขตของคุณสมบัติที่ใช้งานในปัจจุบัน:

def printBB():
    feature = iface.activeLayer().selectedFeatures()[0]
    print feature.geometry().boundingBox().toString()

ในการกำหนดฟังก์ชั่นให้เปิดคอนโซล Python จากเมนูปลั๊กอินคัดลอกและวางสามบรรทัดลงในคอนโซลแล้วกด Enter จากนั้นคุณสามารถเรียกใช้ฟังก์ชั่นได้โดยพิมพ์printBB()และกด Enter ขณะที่เลือกคุณสมบัติที่ต้องการ


1
ฉันได้รับข้อผิดพลาดนี้เมื่อฉันพยายามเรียกใช้สคริปต์นี้: File "<input>", line 4 printBB() ^ SyntaxError: invalid syntax
cbunn

@cbunn ตรวจสอบให้แน่ใจว่าคุณได้เลือกเลเยอร์ในเลเยอร์ / สารบัญ - มันอ่อนไหวมากต่อสิ่งนี้!
DPSSpatial

ขอบคุณสำหรับความช่วยเหลือ ฉันก็ลืมกด enter เพื่อกำหนดฟังก์ชั่น printBB () อย่างเต็มที่ก่อนที่จะเรียกมัน
cbunn

2
ฉันต้องใช้การพิมพ์ (feature.geometry (). boundingBox (). toString ()) สำหรับบรรทัด 3
cm1

16

QGIS สามารถทำได้ผ่าน Polygon จาก Layer Extent

เวกเตอร์ - เครื่องมือวิจัย - รูปหลายเหลี่ยมจากเลเยอร์ขอบเขต

จะสร้างไฟล์รูปร่างใหม่พร้อมแอตทริบิวต์เช่น XMIN XMAX YMIN YMAX AREA WIDTH HEIGHT


1
คุณต้องตรวจสอบUse only selected obectsและcalculate for every objectเพื่อให้ได้ผลลัพธ์ที่ต้องการ
AndreJ

อืมมันไม่ได้ผลสำหรับฉันไฟล์
รูปร่าง

1
คุณต้องการตรวจสอบ 'ใช้เฉพาะวัตถุที่เลือก' หากคุณเลือกวัตถุ ฉันไม่ได้เลือกช่องทั้งสองและทำให้ได้ผลดี
Johanna

4

คุณสามารถทำได้โดยใช้ปลั๊กอิน PyShp ใน Python .. มันง่ายกว่ามาก ...

import shapefile

sf = shapefile.Reader("Path to shapefile...") 
shapes = sf.shapes() 
bbox = shapes[0].bbox # Retrieves the bounding box of the first shape

print bbox # Will print the bounding box coordinates

ข้อมูลเพิ่มเติมเกี่ยวกับ PyShp และฟังก์ชันอื่น ๆ สามารถพบได้ที่นี่


3

หากคุณต้องการกล่อง จำกัด ของรูปหลายเหลี่ยมคุณสามารถ "บันทึกเป็น ... " เลเยอร์ของคุณไปยัง GeoJSON ด้วยตัวเลือก WRITE_BBOX = YES และจะมีแอตทริบิวต์ "bbox" เดียวก่อนแอตทริบิวต์ "รูปทรงเรขาคณิต" ของคุณแม้จะเป็นแบบหลายจุด

..., "bbox": [ -70.062408006999874, 12.417669989000046, -69.876820441999939, 12.632147528000104 ], "geometry": ...

1

ฉันต้องทำสิ่งนี้เพื่อสร้างเขตข้อมูลที่ฉันสามารถนำเข้าเป็นรายการอื่นได้

  1. ติดตั้งปลั๊กอิน QGIS FieldPyculator
  2. สลับการแก้ไขเลเยอร์
  3. สร้างคอลัมน์ใหม่ในตารางแอตทริบิวต์เป็นสตริงเช่น bbox (บันทึกการแก้ไข)
  4. เปิด FieldPyculator
  5. ตั้งค่า Update Field เป็น bbox
  6. ในนิพจน์ฟิลด์ให้พิมพ์ดังนี้:

    bb = $geom.boundingBox().toString()

    bb = bb.replace(' ','')

    bb = bb.replace(':',',')

    value = bb

  7. วิ่ง

  8. ปิดการแก้ไขและบันทึกเลเยอร์

1

สำหรับ acces ด่วนตัวเลือกคือการรักษาพิกัด bbox ในตารางคุณลักษณะ

  • โหมดแก้ไขของ Google
  • เปิดตัวเครื่องคิดเลขภาคสนาม
  • ตั้งค่าสร้างฟิลด์ใหม่, ชื่อชุด(เช่น xmin), ประเภท (ทศนิยม), ความยาว, (ความแม่นยำ)
  • นิพจน์: x_min ($ เรขาคณิต)
  • คุณจะได้รับฟิลด์ใหม่ในตารางแอตทริบิวต์ด้วยพิกัด LEFT

    ทำซ้ำสิ่งนี้สำหรับ RIGHT, BOTTOM, TOP ด้วยนิพจน์:

  • x_max ($ เรขาคณิต)
  • y_min ($ เรขาคณิต)
  • y_max ($ เรขาคณิต)
  • ตัวอย่างของผล ป้อนคำอธิบายรูปภาพที่นี่

    จากนั้นคุณสามารถตั้งค่าปลั๊กอิน AutoFieldsให้อัปเดตฟิลด์เหล่านี้โดยอัตโนมัติเมื่อมีการเปลี่ยนแปลงคุณสมบัติ

    โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
    Licensed under cc by-sa 3.0 with attribution required.