Postgresql插入多边形(sql语句以及C++接口(包括变量)插入)
目录
1、 sql语句插入
首先建立表格,属性值包括id, name
CREATE TABLE polygon ( id int4, name varchar(50) )
然后加入添加一个空间栏用于存储城市的位置。习惯上这个栏目叫做 the_geom
。它记录了数据为什么类型(点、线、面)、有几维(这里是二维)以及空间坐标系统。此处使用 EPSG:4326 坐标系统
SELECT AddGeometryColumn ('polygon', 'the_geom', 4326, 'POLYGON', 2)
最后利用sql语句进行插入(我用的是 navicat for postgresql)
INSERT INTO polygon (ID, NAME, the_geom)
VALUES
(
1,
'Wuhan, China',
ST_GeomFromText (
'POLYGON((113.412350 29.971457,115.156783 29.971457,115.156783 31.428195,113.412350 31.428195,113.412350 29.971457))',
4326
)
)
我插入的多边形是武汉区域,用QGIS可以看到
插入多边形的时候要注意,第一个点和最后一个点是一样的,即闭合。
例如我插入的是四边形,但是我实际上sql语句里面写了5个点。如果不闭合,会提示 geometry contains non-closed rings 错误
2、 C++代码插入(包括变量)
如果是利用C++接口插入(libpqxx),并且sql语句里面加入变量值,那么代码如下:
connection C("dbname=gisdb user=postgres password=123456 \
hostaddr=127.0.0.1 port=5432");
if (C.is_open()) {
MessageBox("Opened database successfully:");
}
else {
MessageBox("Can't open database");
}
/* Create a transactional object. */
work W(C);
string LeftBottom = "108.84 28.80";
string RightBottom = "109.70 28.80";
string RightTop = "109.70 30.04";
string LeftTop = "108.84 30.04";
/* Execute SQL query */
W.exec("INSERT INTO polygons (ID, NAME, the_geom) VALUES (3,'Christine,China',ST_GeomFromText ('POLYGON((" + W.esc(LeftBottom) + "," + W.esc(RightBottom) + "," + W.esc(RightTop) + "," + W.esc(LeftTop) + "," + W.esc(LeftBottom) + "))',4326));");
W.commit();
C.disconnect();
最后插入的多边形如图所示(左下角那个):
转载自:https://blog.csdn.net/u010057769/article/details/81239280