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

You may also like...