postGIS:ST_MakeEnvelope() 为什么只有一个类似的查询有效?

postGIS: ST_MakeEnvelope() why does only one of those similar queries work?

为什么这些类似的查询之一有效?

我正在尝试创建一个 BBOX 多边形并将其保存到几何列中。

然而只有一种方法有效,但我无法插入不同的值。

这个查询没有问题:

res <- DBI::dbExecute(con,
                        "INSERT INTO graphs (
                      left_xmin,
                      bottom_ymin,
                      right_xmax,
                      top_ymax,
                      filename,
                      BBOX_Diagonale,
                      file, bbox) VALUES (,, , ,, ,,ST_GeomFromText(ST_AsText(ST_MakeEnvelope(11.29589921,  47.5205857,  12.21999367, 48.14282422, 4326) )));",
                        list(round(bbox_dimensions[[1]],digits=8),
                             round(bbox_dimensions[[2]],digits=8),
                             round(bbox_dimensions[[3]],digits=8),
                             round(bbox_dimensions[[4]],digits=8),
                             filename_save,
                             bbox_diagonale,
                             paste0( "\x",paste(data, collapse = ""))))

但他的没有。

res <- DBI::dbExecute(con,
                        "INSERT INTO graphs (
                      left_xmin,
                      bottom_ymin,
                      right_xmax,
                      top_ymax,
                      filename,
                      BBOX_Diagonale,
                      file, bbox) VALUES (,, , ,, ,,);",
                        list(round(bbox_dimensions[[1]],digits=8),
                             round(bbox_dimensions[[2]],digits=8),
                             round(bbox_dimensions[[3]],digits=8),
                             round(bbox_dimensions[[4]],digits=8),
                             filename_save,
                             bbox_diagonale,
                             paste0( "\x",paste(data, collapse = "")),
                             paste0("ST_GeomFromText(ST_AsText(ST_MakeEnvelope(11.29589921,  47.5205857,  12.21999367, 48.14282422, 4326) )))")))
  

我希望能够用 bbox 对象替换值 „11.29589921, 47.5205857, 12.21999367…“

为此,我想我会使用 paste0 函数来创建 string。 然而我得到这个错误:

Error: Failed to fetch row: ERROR:  parse error - invalid geometry
HINT:  "ST" <-- parse error at position 2 within geometry

bbox 列创建于:

SELECT AddGeometryColumn('graphs', 'bbox', 4326, 'POLYGON', 2 );

如果正确理解查询,尤其是带有 bbox 多边形的部分.. 它会生成地理数据,所以它应该可以工作......但它没有:)

我现在是这样做的:

res <- DBI::dbExecute(con,
                          paste("INSERT INTO graphs (
                      left_xmin,
                      bottom_ymin,
                      right_xmax,
                      top_ymax,
                      filename,
                      BBOX_Diagonale,
                      file, bbox) VALUES (,, , ,, ,,ST_GeomFromText(ST_AsText(ST_MakeEnvelope(",
                                round(bbox_dimensions[[1]],digits=8),",",
                                round(bbox_dimensions[[2]],digits=8),",",
                                round(bbox_dimensions[[3]],digits=8),",", 
                                round(bbox_dimensions[[3]],digits=8),
                                ", 4326) )));"),
                          list(round(bbox_dimensions[[1]],digits=8),
                               round(bbox_dimensions[[2]],digits=8),
                               round(bbox_dimensions[[3]],digits=8),
                               round(bbox_dimensions[[4]],digits=8),
                               filename_save,
                               bbox_diagonale,
                               paste0( "\x",paste(data, collapse = ""))))