POSTGIS uzyskuje maksymalną długość wielokąta i średnią szerokość

13

Mam postgis tabelę typów wielokątów.

Muszę automatycznie obliczyć maksymalną długość wielokąta:

wprowadź opis zdjęcia tutaj

A druga to średnia szerokość:

wprowadź opis zdjęcia tutaj

Wątpię teraz, czy jest to możliwe, ponieważ chociaż wszystkie moje wielokąty będą prawie prostokątne, w innych przypadkach mogą być naprawdę niejednoznaczne i prawie niemożliwe jest rozróżnienie między szerokością a wysokością.

Zobaczmy, czy ktoś może rzucić na to światło.

Pozdrowienia,

Egidi
źródło
To interesujące pytanie i na pewno jest możliwe. Przynajmniej rysujesz po prostu linię z każdego wierzchołka do każdego innego, na pewno wielomianowe środowisko wykonawcze, ale rozwiązanie. Bardziej eleganckie rozwiązania można znaleźć na stronie gis.stackexchange.com/questions/32552/...
John Powell,
Twoja ilustracja „maksymalnej długości” wydaje się jasna, ale twój przykład „średniej szerokości” nie jest prostopadły do ​​tej długości. Nie powinno tak być? Następnie wspominasz o „wysokości”. Wszystko trochę mylące!
Martin F
Myślę, że potrzeba więcej szczegółów na temat tej koncepcji średniej szerokości, w szczególności z przykładami rzeczywistych geometrii, których używasz
raphael

Odpowiedzi:

13

Pierwsza część pytania: co powiesz na ST_LongestLine, która używa tej samej geometrii dwukrotnie jako danych wejściowych?

SELECT 
  ST_Length(ST_LongestLine(
   (SELECT geom FROM mylayer WHERE gid=1),
   (SELECT geom FROM mylayer WHERE gid=1))
);

W przypadku drugiej części pytania:

W kwestii obliczania średniej szerokości wielokątów można znaleźć kilka interesujących odpowiedzi: Jak obliczyć średnią szerokość wielokąta?

Thomas B.
źródło
To sprytne, nie znałem tej funkcji.
John Powell,
To bardzo przydatne. Czy istnieje sposób na utworzenie polilinii z tej powstałej najdłuższej linii?
user1655130,
7

W części pierwszej użyj ST_MaxDistance

Zwraca maksymalną dwuwymiarową odległość między dwoma liniami w rzutowanych jednostkach. Jeśli g1 i g2 są tej samej geometrii, funkcja zwróci odległość między dwoma wierzchołkami najbardziej oddalonymi od siebie w tej geometrii.

Przykład:

SELECT
gid,
ST_MaxDistance(geom, geom) AS "Max Length"
FROM layer
Rafael
źródło