Maksimum genişlik / yükseklik oranıyla “eğik sınırlayıcı kutu” oluşturuluyor mu?


13

Aşağıdaki resimde gösterildiği gibi bir dizi girdi özelliğinden maksimum genişlik / yükseklik oranı ("eğik sınırlama kutusu") ile çevreleyen bir dikdörtgen oluşturmak istiyorum:

resim açıklamasını buraya girin

Örneğin PostGIS fonksiyonları ST_Envelopeile ST_Box2DFME Transformatörleri BoundingBoxReplacerve BoundingBoxAccumulatoreksen paralel sınırlama kutuları oluşturur.

PostGIS, QGIS veya FME ile yaklaşımları kullanan herhangi bir öneri büyük ölçüde hoş geldiniz!


Tam bir kopya değil , çünkü adam FME veya PostGIS'te uygulanabilir bir çözüm istemiyor. Bununla birlikte, yukarıda bahsedilen sorunun cevabında atıfta bulunulan python betiğinin FME PythonCaller transformatörüne konması oldukça yararlıdır. Çalışan bir çalışma alanım varsa, biraz değiştirilmiş bir komut dosyasına sahip bir çözüm gönderirim.
Jochen Schwarze

Sadece bir kopya değil, aynı zamanda başvurulan soru kabul edilmemiştir ve hangi algoritmayı kullandığı ve bunun doğru olup olmadığı hakkında cevaplanmamış sorular vardır.
John Powell

Cevabımı aşağıda görebilirsiniz. Bunu FME'de yapabilmelisiniz. Hangi sürümü kullanıyorsunuz?
Fezter

Yanıtlar:


9

Bu muhtemelen işleme cephesinde aşırı derecede doludur ve daha iyi bir matematiksel çözüm olması muhtemeldir, ancak bunun basitçe bir sorgu olarak yapılabileceğinin bir yolu olarak

SELECT 
   id, rotated_by, oblique_bound
  FROM 
     (
     SELECT 
        m.id,
        r rotated_by, 
        ST_Rotate(ST_Envelope(ST_Rotate(m.geom, r)),-r) oblique_bound,
        row_number OVER (PARTITION BY id) 
                   ORDER BY ST_Area(ST_Rotate(ST_Envelope(ST_Rotate(m.geom, r)),-r))) N
       FROM 
          generate_series(0, 90, 0.1) N(r), my_table m
    ) s
WHERE N = 1;

Bu, geometriyi döndürür, sınırları oluşturur, 0 ile 90 arasında bir derecenin her onda biri için dönüşü tersine çevirir. Sonuçta en az alana sahip sınırlayıcı kutu olur. Tabii ki bu bunu yapmanın tamamen doğru bir yolu değildir ve gereksinimlerinize bağlı olarak serideki artış değerinin ayarlanması gerekebilir.


Aslında bunun harika bir çözüm olduğunu düşünüyorum. Kesin çözümler son derece pahalıdır. En iyi x sınırlayıcı kutuları kaydetmek için plpgsql'de kolayca genişletebilirsiniz ve ikisi çok yakın olsaydı, tam bir çözüme yaklaşmak için yakınlaştırabilir ve daha küçük dönüşler yapabilirsiniz. Her zaman kenar durumlarda olurdu, ama hoş bir yaklaşım.
John Powell

Ve ek bir fayda olarak dönüş açısını korur :-)
Jochen Schwarze

6

QGIS tam olarak bunu yapan bir "minimum odaklı sınırlama kutusu" algoritmasına sahiptir.


"Yönlendirilmiş minimum sınırlama kutusu" olarak adlandırılır. İşleme Araç Kutusu> QGIS geoalgoritmaları> Vektör genel araçlarından arayabilirsiniz.
Stefan

Bunun QGIS 2.14'ün ötesinde olduğunu düşünüyorum, çünkü hala burada kullandığımız 2.14.15LTR'de bulamadım?
Jochen Schwarze

@JochenSchwarze QGIS 2.14.19'da bulunmaktadır. İşleme araç kutusunda arama yapmanız gerekir. Doğrudan, altında bulabilirsinizProcessing toolbox -> QGIS geoalgorithms -> Vector General tools -> Oriented minimum bounding box
ahmadhanb

4

Sınırlama kutusu ikame Bahsettiğiniz trafo, bunu yapmak gerekir. Belgelere göre,

Özelliğin geometrisini iki boyutlu sınırlayıcı kutusu veya iki boyutlu minimum yönlendirilmiş sınırlayıcı kutusuyla değiştirir.

Parametre, eksen eksenli veya doğrusal doğrusal sınırlama kutusunu seçmenizi sağlar.

Görünüşe göre, yönlendirilmiş sınırlama kutusunun daha uzun tarafının açısını dahil etmek için önerilen bir geliştirme var . Bu Güvenli Numara PR # 53924'tür.

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.