【问题标题】:Syntax error when adding a MultiPolygon geometry添加 MultiPolygon 几何图形时出现语法错误
【发布时间】:2019-03-09 21:49:44
【问题描述】:

我尝试在我的 postgre 数据库中添加一个 MultiPolygon 几何,所以我使用了这个 SQL 语句:

'INSERT INTO potentiel_foncier_ccry (nature, geom, nbr_lgmt)  VALUES  ('+ mysql.escape(nature)+', ST_GeomFromText(MULTIPOLYGON((("'+mysql.escape(geom)+')))",2154),"'+ mysql.escape(logement) +'")'

但它失败了,我有这个错误:

error: syntax error at end of input

我的几何图形如下所示:

有什么问题?提前谢谢你

PS:我使用 Nodejs 进行编码

【问题讨论】:

  • 那是一个多边形。为多面体再添加一组[ ]
  • 我又添加了一组 () 它不起作用,我尝试使用 4 [] 控制台告诉我:“[”或附近的语法错误

标签: javascript node.js postgresql geometry openlayers


【解决方案1】:

如果您通过 OpenLayers 应用程序执行此操作,则可以转换格式

var geom = [[[[101, 201],
              [102, 202],
              [103, 203],
              [101, 201]]]];

var wkt = new ol.format.WKT().writeGeometry(new ol.geom.MultiPolygon(geom));

console.log(wkt);  // 'MULTIPOLYGON(((101 201,102 202,103 203,101 201)))'

假设您的 SQL 的其余部分是正确的,您仍然需要 ST_GeomFromText2154

var geom1 = [[[[101, 201],
               [102, 202],
               [103, 203],
               [101, 201]]]];

var wkt = new ol.format.WKT().writeGeometry(new ol.geom.MultiPolygon(geom1));

var geom2 = "ST_GeomFromText('" + wkt + "'),2154)"

 'INSERT INTO potentiel_foncier_ccry (nature, geom, nbr_lgmt) VALUES ('+ mysql.escape(nature)+', '+geom2+','+ mysql.escape(logement) +')'

【讨论】:

  • 我正在使用 OpenLayers 应用程序执行此操作,我像您向我展示的那样进行转换,但我有另一个错误:“在“6379121.466596267”或附近出现语法错误我的 sql 语句:'INSERT INTO potentiel_foncier_ccry (nature, geom, nbr_lgmt) 值 ('+ mysql.escape(nature)+', '+geom+','+ mysql.escape(logement) +')'
  • 您的新geom 是否包括ST_GeomFromText(''),2154)
【解决方案2】:

(声誉仍然太低,无法发表评论) 查看postgis examples,MultiPolygon 应该看起来像这样(只有圆括号):

SELECT ST_GeomFromText('MULTIPOLYGON(((-71.1031880899493 42.3152774590236, -71.1031627617667 42.3152960829043,-71.102923838298 42.3149156848307, -71.1023097974109 42.3151969047397,-71.1019285062273 42.3147384934248, -71.102505233663 42.3144722937587,-71.10277487471 42.3141658254797, -71.103113945163 42.3142739188902,-71.10324876416 42.31402489987, -71.1033002961013 42.3140393340215,-71.1033488797549 42.3139495090772, -71.103396240451 42.3138632439557,-71.1041521907712 42.3141153348029, -71.1041411411543 42.3141545014533,-71.1041287795912 42.3142114839058, -71.1041188134329 42.3142693656241,-71.1041112482575 42.3143272556118, -71.1041072845732 42.3143851580048,-71.1041057218871 42.3144430686681, -71.1041065602059 42.3145009876017,-71.1041097995362 42.3145589148055, -71.1041166403905 42.3146168544148,-71.1041258822717 42.3146748022936, -71.1041375307579 42.3147318674446,-71.1041492906949 42.3147711126569, -71.1041598612795 42.314808571739,-71.1042515013869 42.3151287620809, -71.1041173835118 42.3150739481917,-71.1040809891419 42.3151344119048, -71.1040438678912 42.3151191367447,-71.1040194562988 42.3151832057859, -71.1038734225584 42.3151140942995,-71.1038446938243 42.3151006300338, -71.1038315271889 42.315094347535,-71.1037393329282 42.315054824985, -71.1035447555574 42.3152608696313,-71.1033436658644 42.3151648370544, -71.1032580383161 42.3152269126061,-71.103223066939 42.3152517403219, -71.1031880899493 42.3152774590236)), ((-71.1043632495873 42.315113108546,-71.1043583974082 42.3151211109857, -71.1043443253471 42.3150676015829,-71.1043850704575 42.3150793250568,-71.1043632495873 42.315113108546)))',4326);

你确定 mysql.escape(geom) 创建了这个语法吗?

【讨论】:

  • Mysql.escape 不创建这种语法,它转义特殊字符。我不知道创建这种语法的函数,所以这就是为什么我在开头指定“(((”)和“ )))" 结尾
  • 也许有更好的方法,但是如果您将几何图形作为字符串(例如 geojson),您可以将括号替换为其他类型的括号,也许这会有所帮助:stackoverflow.com/questions/42228387/…
  • 感谢您的帮助,但我有一个错误:“6378801.386540322”或附近的语法错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多