【问题标题】:Need Path in the form of Lat,long using pgrouting需要使用 pgrouting 的 Lat,long 形式的路径
【发布时间】:2020-01-07 00:05:09
【问题描述】:

我正在使用这个查询来查找使用 postgresql、postgis、pgrouting、使用 nodejs 的 postgis_topology 的路径

client.query(
"WITH dijkstra AS (
  SELECT * 
  FROM pgr_dijkstra('SELECT id,source,target,distance AS cost 
     FROM edges_noded',230965,3338,false)) 
 SELECT seq, 
   CASE WHEN dijkstra.node = edges_noded.source THEN edges_noded.the_geom 
   ELSE ST_Reverse(edges_noded.the_geom) END AS route_geom 
 FROM dijkstra JOIN edges_noded ON(edge = id) 
 ORDER BY seq",(err,res)=>{ var data = res.rows;})

现在的问题是这个查询返回两列

我认为上图中的 route_geom 列有路径信息。

如何修改上述查询以获取经纬度形式的路径。

我需要经纬度形式的完整路径。

【问题讨论】:

    标签: sql node.js postgresql postgis pgrouting


    【解决方案1】:

    如果我理解正确,您只需将现有坐标转换为您的应用程序可以读取的格式。您可以直接从 PostGIS 获得许多格式。以下是您可能感兴趣的一些内容:

    数据样本

    CREATE TEMPORARY TABLE t (seq INT, the_geom GEOMETRY);
    INSERT INTO t VALUES (1,'POINT(1 2)'),(2,'POINT(2 3)');
    

    PostGIS 几何格式的几何 - 到目前为止您一直在做。

    SELECT seq, the_geom FROM t;
     seq |                  the_geom                  
    -----+--------------------------------------------
       1 | 0101000000000000000000F03F0000000000000040
       2 | 010100000000000000000000400000000000000840
    (2 Zeilen)
    

    在分隔列中以纬度和经度的形式检索数据 - ST_XST_Y

    SELECT seq, ST_X(the_geom), ST_Y(the_geom) FROM t;
     seq | st_x | st_y 
    -----+------+------
       1 |    1 |    2
       2 |    2 |    3
    (2 Zeilen)
    

    作为 WKT - ST_AsText

    SELECT seq, ST_AsText(the_geom) FROM t;
     seq | st_astext  
    -----+------------
       1 | POINT(1 2)
       2 | POINT(2 3)
    (2 Zeilen)
    

    .. 或 GeoJSON - ST_AsGeoJSON

    SELECT seq, ST_AsGeoJSON(the_geom) FROM t;
     seq |             st_asgeojson             
    -----+--------------------------------------
       1 | {"type":"Point","coordinates":[1,2]}
       2 | {"type":"Point","coordinates":[2,3]}
    (2 Zeilen)
    

    所以你的CTE 很可能看起来像这样

    WITH dijkstra AS (
      SELECT *
      FROM pgr_dijkstra('SELECT id,source,target,distance AS cost 
        FROM edges_noded',230965,3338,false)) 
    SELECT seq, 
      CASE WHEN dijkstra.node = edges_noded.source THEN ST_X(edges_noded.the_geom)
      ELSE ST_X(ST_Reverse(edges_noded.the_geom)) END AS route_geom_x,
      CASE WHEN dijkstra.node = edges_noded.source THEN ST_Y(edges_noded.the_geom)
      ELSE ST_Y(ST_Reverse(edges_noded.the_geom)) END AS route_geom_y 
    FROM dijkstra JOIN edges_noded ON(edge = id) 
    ORDER BY seq
    

    【讨论】:

    • 感谢#Jim Jones 的详细解答
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-26
    • 2014-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多