Создать многогранную поверхностьZ из таблицы вершин с помощью make_ solid () PostGIS - PullRequest
0 голосов
/ 03 февраля 2020

Я пытаюсь получить 3D-многоугольник, используя функцию sfcgal ST_MakeSolid () в PostGIS.

Моя таблица выглядит следующим образом:

 id_geom| xmin | xmax    |  ymin   |   ymax  | zmin  | zmax
--------+------+---------+---------+---------+-------+-------
   1 | 12.3235 | 12.3239 | 45.4339 | 45.4341 |    -7 |   -14
   2 | 12.3234 | 12.3238 | 45.4338 | 45.4339 |    -2 |    -7

Мне нужен еще один столбец с геометрией solid, но я не могу понять, как использовать координаты вершины, хранящиеся в моей таблице, вместо необработанных координат.

Я прочитал вопрос "ST_Make Solid () создает недопустимый solid из замкнутой полиэдральной поверхностиZ " и работает:

SELECT ST_MakeSolid('POLYHEDRALSURFACE Z (
((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0)),
((0 0 1,1 0 1,1 1 1,0 1 1,0 0 1)),
((0 0 0,0 0 1,0 1 1,0 1 0,0 0 0)),
((0 1 0,0 1 1,1 1 1,1 1 0,0 1 0)),
((1 1 0,1 1 1,1 0 1,1 0 0,1 1 0)),
((1 0 0,1 0 1,0 0 1,0 0 0,1 0 0)))')

Но я хочу использовать" xmin "," xmax "и др. c. вместо 12.3235, 12.3239 et c ..

Как я могу это сделать?

1 Ответ

1 голос
/ 05 февраля 2020

Благодаря Джиму Джонсу я решил проблему:

SELECT
ST_MakeSolid('POLYHEDRALSURFACE Z ('
'('||'('||xmin_ ||' '|| ymin_ ||' '||zmin_ ||','|| xmin_ ||' '|| ymax_ ||' '||zmin_ ||','|| xmax_ ||' '|| ymax_ ||' '||zmin_ ||','|| xmax_ ||' '|| ymin_ ||' '||zmin_ ||','|| xmin_ ||' '|| ymin_ ||' '||zmin_||')'||')'||','||
'('||'('||xmin_ ||' '|| ymin_ ||' '||zmax_ ||','|| xmax_ ||' '|| ymin_ ||' '||zmax_ ||','|| xmax_ ||' '|| ymax_ ||' '||zmax_ ||','|| xmin_ ||' '|| ymax_ ||' '||zmax_ ||','|| xmin_ ||' '|| ymin_ ||' '||zmax_||')'||')'||','||
'('||'('||xmin_ ||' '|| ymin_ ||' '||zmin_ ||','|| xmin_ ||' '|| ymin_ ||' '||zmax_ ||','|| xmin_ ||' '|| ymax_ ||' '||zmax_ ||','|| xmin_ ||' '|| ymax_ ||' '||zmin_ ||','|| xmin_ ||' '|| ymin_ ||' '||zmin_||')'||')'||','||    
'('||'('||xmin_ ||' '|| ymax_ ||' '||zmin_ ||','|| xmin_ ||' '|| ymax_ ||' '||zmax_ ||','|| xmax_ ||' '|| ymax_ ||' '||zmax_ ||','|| xmax_ ||' '|| ymax_ ||' '||zmin_ ||','|| xmin_ ||' '|| ymax_ ||' '||zmin_||')'||')'||','||        
'('||'('||xmax_ ||' '|| ymax_ ||' '||zmin_ ||','|| xmax_ ||' '|| ymax_ ||' '||zmax_ ||','|| xmax_ ||' '|| ymin_ ||' '||zmax_ ||','|| xmax_ ||' '|| ymin_ ||' '||zmin_ ||','|| xmax_ ||' '|| ymax_ ||' '||zmin_||')'||')'||','|| 
'('||'('||xmax_ ||' '|| ymin_ ||' '||zmin_ ||','|| xmax_ ||' '|| ymin_ ||' '||zmax_ ||','|| xmin_ ||' '|| ymin_ ||' '||zmax_ ||','|| xmin_ ||' '|| ymin_ ||' '||zmin_ ||','|| xmax_ ||' '|| ymin_ ||' '||zmin_||')'||')'||')'                        
)
FROM mytable
...