Возврат очков SETOF из plpython/Postgis

Я хотел бы создать функцию в pl/python3/postgis, которая возвращает набор записей геометрии (например, точек). Мне удалось создать словарь с координатами моих точек, но я не могу понять, как превратить их в реальные "точечные" геометрии postgis. Это мой код до сих пор:

CREATE OR REPLACE FUNCTION grid_points()
  RETURNS text AS
  $$

  grid_cell_length_x = 2
  grid_cell_length_y = 1

  grid_points = {}

  for i in range(0, 3):
    for j in range(0,3):
      key   = "grid_poin_" + str(i) + "" + str(j)

      x = 5  + i * grid_cell_length_x
      y = 10 - j * grid_cell_length_y

      value = (x, y)
      grid_points[key] = value

  return(
  grid_points)

$$
LANGUAGE plpython3u;

select grid_points();

person Stefan F    schedule 22.12.2014    source источник


Ответы (1)


Вы можете использовать plyp.execute для доступа к объектам геометрии и их возврата. из функций -- хотя тип возвращаемого значения по существу будет строкой в ​​шестнадцатеричном коде, представляющей геометрию.

CREATE OR REPLACE FUNCTION grid_points () 
  RETURNS SETOF geometry AS $$

  pts = plpy.execute ("SELECT geom FROM sometable WHERE ...")

  return pts
 $$
LANGUAGE plpython3u;

По этой ссылке также есть пара примеров.

В вашем случае вы можете использовать ST_MakePoint или ST_GeomFromText для фактического построения точек внутри процедуры.

В качестве альтернативы вы можете использовать библиотеку, например shapely внутри процедуры plpython.

person John Powell    schedule 23.12.2014