запрос не возвращает результатов- Postgres - PullRequest
0 голосов
/ 11 марта 2020

Я пытаюсь создать таблицу, содержащую пересечения в месте пересечения каждой дороги Roadname 1 & Roadname 2, а также геометрические пространственные данные для пересечения ST_Intersection(a.geom, b.geom)

Но, похоже, это не так Я не работаю. Я довольно новичок в postgres, и мне интересно, есть ли способ сделать это? Вот что я имею в виду:

Create Table roads(
    intid_ integer,
    muni text,
    alias_ text,
    roadnames text,
    geom geometry);

Insert into roads (roadnames, geom, intid_, alias_)
SELECT 
    trim(student.sc_e911slrn.prefix) || trim(student.sc_e911slrn.name) || trim(student.sc_e911slrn.suffix), 
    geom, objectid, alias
FROM student.sc_e911slrn;

--------------------------------------------------------------------

CREATE type student.inter AS (
     roadnames text,
        intid_ int,
        alias_ text,
        muni text,
        ST_Intersection geometry,
        geom geometry);

--< Cursor >--------------------------------------------------------
Create function create_intersections()
    /*returns table student.intersect_roads As $method1$*/
    RETURNS table (
        roadnames text,
        intid_ int,
        alias_ text,
        muni text,
        ST_Intersection geometry,
        geom geometry) As $$

Declare
    return_intersect inter;
    rec_road Record;
    cur_road Cursor()
        For Select intid_, geom, roadnames
        From student.roads;

Begin
    Open cur_road();

    Loop
        fetch cur_road into rec_road;
        exit when not found;

        If ST_Touches(rec_road.geom, student.roads.geom) AND
            rec_road.geom != student.roads.geom AND 
            rec_road.intid_ != student.roads.intid_

        Then Update student.intersect_road
             Set st_intersection = ST_Intersection (rec_road.geom, student.roads.geom),
                 intid_ = rec_road.intid_,
                 intersections = rec_road.roadnames|| ' & ' || student.raods.roadnames,
                 alias_ = rec_road.alias_,
                 /*muni = */
                 polyline = ST_Union(rec_road.geom, student.roads.geom)
                 RETURNING * into return_intersect;
                 RETURN NEXT;
        End if;
    End Loop;
    Close cur_road;

    RETURN;

End; 
$$ Language plpgsql;

--< return the table>----------------------------------------------
SELECT create_intersections(); 

Roadname 1 & Roadname 2 должен быть сгенерирован из roadnames столбца из таблицы ROADS, а геометрия для пересечения ST_Intersection(a.geom, b.geom) должна быть сгенерирована из geom столбец из ROADS таблицы. Когда я запускаю его, он возвращает без результата .

Таблица ROADS выглядит примерно так таблица дорог , ( представление геометрии ):

Intid_     Muni    Alias_           Roadnames            geom
24581722   NULL    CR 52       Coopers Falls road        ...
24581723   NULL    CR 44       Rama road                 ...

Ожидаемый результат должен быть похож на этот, но нам нужно заполнить и другие поля .---> таблица ( представление геометрии )

Я тоже пробовал

CREATE FUNCTION create_intersections() 
     UPDATE student.intersect_roads AS $$
Declare
Begin
End
$$

, что тоже не работает. Любые отзывы будут оценены. Спасибо!

...