PostGIS tablosu için sınırlayıcı kutu


19

PostGIS'te tüm bir tablo için sınırlayıcı kutu almanın kolay bir yolu var mı?

Yanıtlar:


26

ST_Extent hile yapmalı.

ST_Extent - geometri satırlarını sınırlayan sınırlayıcı kutuyu döndüren bir toplama işlevi.

Bu şekilde uygulanır:

SELECT ST_Extent(the_geom) as table_extent FROM your_table;

13

Gibi @underdark cevap , ST_Extent işi, ama bir geometriye ama dönmez akılda tutacak box2d. Bir geometri tipine ihtiyacınız varsa,

SELECT ST_SetSRID(ST_Extent(the_geom), THE_SRID) as table_extent FROM your_table;

Ayrıca, ihtiyacınız olan her satırın sınırlayıcı kutusunu da kullanabilirsiniz ST_Extentve bunun gibi bir sahte GROUP BY :

SELECT ST_SetSRID(ST_Extent(the_geom),THE_SRID) as table_extent FROM your_table GROUP BY gid;

Gid'in tablonun birincil anahtarı olduğunu varsayarsak

Ancak @ bugmenot123 yorumlarda belirtildiği gibi ST_Envelope daha iyi bir iş çıkaracak

SELECT ST_Envelope(geom) FROM your_table ;

1
Toplama olmadan her satır için bir sınırlayıcı kutuya ihtiyacınız varsa, sadece kullanın ST_Envelope! Yine de istenen bu değildi.
bugmenot123

1
Haklısın st_envelope i cevap güncelleme. "Sorulmadı" hakkında, bazen İngilizce gibi iyi konuşmayan insanlar için (benim gibi) bir cevap bulmak için doğru arama metnini seçmek zor olduğundan, ilgili cevapları vermeye çalışın. Muhtemelen bu soruya ikinci konu için bir cevap arayarak düştüm.
Francisco Puga

4

Başka bir olasılık, ST_EnvelopeSRID ile bir geometri döndüren işlevi kullanmaktır ,

ST_Envelope - Sağlanan geometrinin sınırlayıcı kutusunu temsil eden bir geometri döndürür

, ST_Uniontüm geometrilerin birleşimini (veya ilgili zarfların birleşimini) elde etmek için toplama işlevi ile birlikte :

SELECT ST_Envelope(ST_Union(geom)) AS table_extent FROM your_table

veya

SELECT ST_Envelope(ST_Union(ST_Envelope(geom))) AS table_extent FROM your_table

İkinci seçenek, münferit geometrilerin zarflarını kullanarak birleştirme işlemini basitleştirdiğinden daha hızlı olmalıdır.

bkz. Kaynak .


1
ST_Extent yaklaşımdır büyüklükleri sayılarla üzerinde tamamen çalışabilir ve herhangi bir karmaşık geometrik hesaplamalar yapmak zorunda olmadığı için daha hızlı. Mümkün olduğunca ST_Union'dan kaçının.
bugmenot123

2

Herhangi bir uzamsal toplamanın uygulanmaması çok daha hızlı olmalıdır:

select
  min(ST_XMin(geom)) as l,
  min(ST_YMin(geom)) as b,
  max(ST_XMax(geom)) as r,
  max(ST_YMax(geom)) as t
from x

1
ST_Extent ayrıca mekansal bir şey yapmak zorunda değildir. Verilerime yaklaşımınızdan 2-3 kat daha hızlı (~ 400k çokgen). Muhtemelen her şeyi bir seferde yapabileceği için, yaklaşımınız her bir geom'in çeşitli yönlerine bakmalı ve sonunda toplanmalıdır.
bugmenot123
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.