如何制作带孔的多边形

时间:2014-07-14 15:40:36

标签: postgis

我正在使用postgresSQL和postgis,我试图创建一个带孔的多边形。我看了很多用户要求类似的东西,但我不能自己做。我的代码是

insert into distritos(nombre,geom) values ('Distrito6',ST_MakePolygon(ST_GeomFromText('LINESTRING((-15.66486 27.91996, -15.60610 27.91820, -15.60359 27.97169, -15.66586 27.97144,-15.66486 27.91996),(-15.65753 27.95894, -15.61610 27.95995, -15.61459 27.93157, -15.65477 27.27.93007,-15.65753 27.95894))',4258)));

但它不起作用。我该怎么办?

1 个答案:

答案 0 :(得分:1)

Polygon在开头和结尾都有一个双括号,内圈用逗号之间的单对括号表示,即,),而一个Linestring在开头和结尾只有一组括号。您实际上正在使用MultiLinestring的语法,这可能是您的问题所在。您可以修复这样的查询:

insert into distritos(nombre, geom) values
      ('Distrito6', ST_GeomFromText('POLYGON((-15.66486 27.91996,
           -15.60610 27.91820, -15.60359 27.97169, -15.66586 27.97144,-15.66486 27.91996),
      (-15.65753 27.95894, -15.61610 27.95995, -15.61459 27.93157,
         -15.65477 27.93007,-15.65753 27.95894))',4258));

此外,您不需要使用ST_MakePolygon,就像使用ST_GeomFromText一样,您可以在上面的示例中使用POLYGON而不是LINESTRING直接创建多边形。当你有代表内环的Linestrings数组时,ST_MakePolygon可能会更有用。

Wikipedia WKT 文章详细说明了这一点,包括WKT和随附的图片。

NOTE: You also have an error in you linestring, you have a repeated 27. in 27.27.93007.