Seçilen bir çokgenin sınırlama kutusu koordinatlarını QGIS ile hesaplama


17

Ben sadece elle (ve biraz yanlış eminim) ilçe çokgen için sınırlama kutusu koordinatları, ilçe şekiller daha büyük bir katman bir seçim aldı. Bunu hızlı ve elle değil hesaplamak için bir QGIS eklentisi veya başka bir işlev kullanabilmek istiyorum. Bu neredeyse kesinlikle mümkün, ancak Google aramasıyla hiçbir şey bulamadım

Yanıtlar:


26

Aşağıdaki küçük Python işlevi, o anda etkin olan özelliğin sınırlayıcı kutu koordinatlarını verir:

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

İşlevi tanımlamak için, Eklentiler menüsünden Python konsolunu açın, üç satırı kopyalayıp konsola yapıştırın ve enter tuşuna basın. Ardından printBB(), istediğiniz özellik seçiliyken enter yazıp enter tuşuna basarak işlevi çağırabilirsiniz .


1
Bu komut dosyasını çalıştırmayı denediğimde bu hatayı alıyorum:File "<input>", line 4 printBB() ^ SyntaxError: invalid syntax
cbunn

@cbunn katmanı katmanlar / içindekiler bölümünde seçtiğinizden emin olun - buna çok duyarlıdır!
DPSSpatial

yardım için teşekkürler. Ayrıca, printBB () işlevini çağırmadan önce tam olarak tanımlamak için enter tuşuna basmayı unutuyordum.
cbunn

2
Satır 3 için print (feature.geometry (). BoundingBox (). ToString ()) kullanmak zorunda kaldım
cm1

17

QGIS, Katman Uzantısından Çokgen ile yapabilir

Stok Fotoğraf - Araştırma araçları - Katman Extent itibaren Çokgen

XMIN XMAX YMIN YMAX ALAN GENİŞLİK YÜKSEKLİĞİ gibi özelliklere sahip yeni bir şekil dosyası üretecek


1
İstenilen sonucu kontrol etmek Use only selected obectsve calculate for every objectalmak zorundasınız .
AndreJ

hmm benim için çalışmadı, çıktı şekil dosyası aslında
boştu

1
Yalnızca seçili nesneleriniz varsa 'Yalnızca seçilen nesneleri kullan' seçeneğini işaretlemek istersiniz. Her iki alanı da işaretsiz bıraktım ve iyi bir sonuç elde ettim.
Johanna

4

Bunu Python'da PyShp eklentisini kullanarak da yapabilirsiniz .. Bu çok daha basit ...

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 ve diğer işlevler hakkında daha fazla bilgiyi burada bulabilirsiniz .


3

Birçok çokgenin sınırlayıcı kutusuna ihtiyacınız varsa WRITE_BBOX = YES seçeneğiyle katmanınızı GeoJSON'a "Farklı Kaydet ..." yapabilirsiniz ve "çokgenli" için bile "geometri" özelliğinizden önce tek bir "bbox" özelliği olacaktır.

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

1

Başka bir yerde liste olarak alabileceğim bir alan oluşturmak için bunu yapmak zorunda kaldım.

  1. QGIS eklentisini yükleyin FieldPyculator
  2. Katmanın düzenlenmesini aç / kapat
  3. Nitelik tablosunda dize olarak yeni sütun oluşturma, örn. Bbox (düzenlemeleri kaydet)
  4. Open FieldPyculator
  5. Güncelleme Alanını bbox olarak ayarla
  6. Alan ifadesinde aşağıdakine benzer bir şey yazın:

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

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

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

    value = bb

  7. Çalıştırmak

  8. Düzenlemeyi kapatın ve katmanı kaydedin

1

Hızlı erişim için, seçenek bbox koordinatlarını öznitelik tablosunda tutmaktır.

  • Google düzenleme modu
  • Başlatma Alanı hesaplayıcısı
  • Yeni alan oluştur, adı ayarla (örneğin xmin), tür (ondalık), uzunluk, (kesinlik)
  • İfade: x_min ($ geometri)
  • LEFT koordinatıyla öznitelik tablosunda yeni bir alan alacaksınız.

    Şunu ifadelerle SAĞ, ALT, ÜST için tekrarlayın:

  • x_max ($ geometri)
  • y_min ($ geometri)
  • y_max ($ geometri)
  • Sonuç örneği resim açıklamasını buraya girin

    Daha sonra özellik değiştirildiğinde bu alanları otomatik olarak güncellemek için AutoFields eklentisini ayarlayabilirsiniz .

    Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
    Licensed under cc by-sa 3.0 with attribution required.