-1

所以基本上我的问题是这个。我有一个从我数据库中的表中获取的 sql 语句。此 SQL 语句在其中包含用于预准备语句变量的占位符。我正在使用包装类来处理替换变量。包装类处理确保它们在传递到 PostgreSQL 时是正确的类型。我的语句中出现语法错误,这让我发疯。准备好的语句的一部分是在 ST_GeomFromText() 函数中使用的字符串。该字符串的值通过准备好的语句变量填充。奇怪的是,这些变量不仅被连接到字符串中,而且通过我收到的错误的外观被视为单独的实体。有关我尝试过的查询示例和错误消息,请参见下文。

任何人都可以对此有所了解吗?它快把我逼疯了。我必须能够从文本构建这个几何图形,并且参数必须能够通过准备好的语句传递。我已经在 C# 中跟踪,它结束了将值作为字符串传递到我的命令对象参数中,因此在我能够查看的代码中没有进行转换,这将使这些被视为字符串以外的任何东西。

语句(从表中返回)

数字 1. 有价值观

select st_xmin(a) minx, st_ymin(a) miny, st_xmax(a) maxx, st_ymax(a) maxy 
from 
   ST_ENVELOPE(
       ST_TRANSFORM(
          ST_GeomFromText('POLYGON(('||138082||' '||12907||','||207179||' '||12907||','||207179||' '||88647||','||138082||' '||88647'||','||138082||' '||12907||'))',27700),4326)) 
as a

第一,没有价值观

select st_xmin(a) minx, st_ymin(a) miny, st_xmax(a) maxx, st_ymax(a) maxy 
from 
   ST_ENVELOPE(
      ST_TRANSFORM(
         ST_GeomFromText('POLYGON(('||:0||' '||:1||','||:2||' '||:3||','||:4||' '||:5||','||:6||' '||:7'||','||:8||' '||:9||'))',27700),:10)) 
as a

数字 2. 有价值观

select st_xmin(a) minx, st_ymin(a) miny, st_xmax(a) maxx, st_ymax(a) maxy
from 
   ST_ENVELOPE(
      ST_TRANSFORM(
         ST_GeomFromText($$POLYGON((138082 12907, 207179 12907, 207179 88647, 138082 88647, 138082 12907))$$,27700), 4326)) 
as a

数字 2. 有价值观

select st_xmin(a) minx, st_ymin(a) miny, st_xmax(a) maxx, st_ymax(a) maxy
from 
   ST_ENVELOPE(
      ST_TRANSFORM(
         ST_GeomFromText($$POLYGON((:0 :1, :2 :3, :4 :5, :6 :7, :8 :9))$$,27700),:10)) 
as a;

来自 PostgreSQL 日志的错误:

1号

2012-04-18 09:39:41 BST ERROR:  syntax error at or near "'||'" at character 283
2012-04-18 09:39:41 BST STATEMENT:  select st_xmin(a) minx, st_ymin(a) miny, st_xmax(a) maxx, st_ymax(a) maxy from ST_ENVELOPE(ST_TRANSFORM(ST_GeomFromText('POLYGON(('||((E'138082'))||' '||((E'12907'))||','||((E'207179'))||' '||((E'12907'))||','||((E'207179'))||' '||((E'88647'))||','||((E'138082'))||' '||((E'88647'))'||','||((E'138082'))||' '||((E'12907'))||'))',27700),((E'4326')))) as a

2号

09:39:27 BST ERROR:  parse error - invalid geometry
2012-04-18 09:39:27 BST HINT:  "POLYGON(((" <-- parse error at position 10 within geometry
2012-04-18 09:39:27 BST STATEMENT:  select st_xmin(a) minx, st_ymin(a) miny, st_xmax(a) maxx, st_ymax(a) maxy ,1, 1 from ST_ENVELOPE(ST_TRANSFORM(ST_GeomFromText($$POLYGON((((E'464217')) ((E'133902')), ((E'591014')) ((E'133902')), ((E'591014')) ((E'261209')), ((E'464217')) ((E'261209')), ((E'464217')) ((E'133902'))))$$,27700),((E'4326')))) as a;
4

1 回答 1

2

'您的第一个错误是一个简单的语法错误,在第 283 行字符处带有一个额外的字符。将您的无值版本更改88647'||88647||, 和:7'||to :7||

我无法重现您的第二个错误。

关于 MBR 的话题,你见过盒子功能/类型吗?他们可以帮助你。

于 2012-04-18T09:21:06.823 回答