Я загрузил шейп-файл строки в PostGIS и использовал pgr_createTopology
в pgRouting, чтобы сделать таблицу маршрутизируемой, добавив источник и цель (назначив 2 конечных узла номера источника строки и номера цели). Следующий рисунок был частью таблицы:
Теперь у меня есть некоторые координаты конечных узлов, которые принадлежат строкам в таблице, и я хочу знать, какое количество источников/целей соответствовало этим координатам.
Например, в таблице выше предположим, что 259463.392, 2737830.062
был одним из конечных узлов line id=1
и line id=2
, тогда эта координата имеет source/target=175
Я новичок в SQL и попробовал какой-то запрос, но получил ошибки:
SELECT ST_AsText(geom) from source;
FROM public.tc_line15_split;
ошибка:
ERROR: syntax error at or near "FROM"
LINE 2: FROM public.tc_line15_split;
^
********** Error **********
ERROR: syntax error at or near "FROM"
SQL state: 42601
Character: 45
ОБНОВЛЕНИЕ №1
Я думаю, что мог бы просто знать, что я хочу, если источник/цель столбца содержит информацию о координате узла, но, похоже, это не так, это просто столбец, содержащий числа.
Я получил таблицу вершин, как показано ниже:
Я использовал следующий запрос, чтобы получить таблицу ниже:
select source, target, st_astext(geom) as geom from public.tc_line15_split;
и я все еще ищу, могу ли я получить мою потребность через 2 таблицы выше.
Итак, я попробовал запрос ниже и получил 2 строки рядом с заданной координатой:
select id from tc_line15_split
where st_dwithin(geom, st_setsrid(st_makepoint(259463.392, 2737830.062), 3826), 0.1);
и позже я нашел из таблицы показал на первом рисунке, что координата источник/цель=54 id 170/51 соответственно, но это все еще неэффективно.
Мне интересно, есть ли способы найти один и тот же номер источника/цели, которые в данном случае содержат line id=51
и line id=170
, после того, как я обнаружил, что данная координата находится между этими двумя строками?
ОБНОВЛЕНИЕ №2
Основываясь на таблице вершин, я использовал следующий запрос, чтобы получить соответствующий исходный номер, который также является идентификатором точки данной координаты:
select id from tc_line15_split_vertices_pgr
where st_dwithin(the_geom, st_setsrid(st_makepoint(259463.392, 2737830.062), 3826), 0.1);
tc_line15_split_pgr
, но она содержит только id, cnt, chk и геометрию, без подробностей о количестве источника/цели. - person Heinz   schedule 03.11.2016cnt
— это количество ребер, у которых есть источник/цель в этой вершине. - person songololo   schedule 03.11.2016