1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
-- 添加起点id
ALTER TABLE roads ADD COLUMN source integer;
-- 添加终点id
ALTER TABLE public.roads ADD COLUMN target integer;
-- 添加道路权重值
ALTER TABLE public.roads ADD COLUMN length double precision;
-- 创建拓扑结构
-- 为roads表创建拓扑布局,即为source和target字段赋值
SELECT pgr_createTopology('roads',0.00001, 'geom','id');
-- 创建索引
-- 为source和target字段创建索引
CREATE INDEX source_idx ON roads ("source");
CREATE INDEX target_idx ON roads ("target");
-- 为length赋值,这里在计算的时候用 ST_Transform 进行了转换
UPDATE roads SET length =st_length(ST_Transform(geom,3857));
-- 为 roads 表添加 reverse_cost 字段并用length的值赋值
ALTER TABLE roads ADD COLUMN reverse_cost double precision;
UPDATE roads SET reverse_cost =length;
-- 规划路径
SELECT * from public.pgr_dijkstra(
'SELECT
id,
source::integer,
target::integer,
length::double precision AS cost,
reverse_cost
FROM roads',
100941,
100942,
false
);
-- 在缓冲区范围内规划路径,并将规划结果组合成矢量线
SELECT st_union(geom) from roads where "id" in
(
SELECT edge from public.pgr_dijkstra(
'SELECT
id,
source::integer,
target::integer,
length::double precision AS cost,
reverse_cost
FROM roads
where st_intersects(geom, (select st_setsrid(st_buffer(st_extent(a.the_geom),0.001),4326) from roads_vertices_pgr a where a.id in (264810, 264809)))
',
264810,
264809,
false
)
);
|