postgresql geometry数据类型插入数据示例

本文提供了一个实用的Java示例,展示如何将包含经纬度坐标对的JSON字符串转换为地理空间多边形数据格式(Polygon)。这对于地理信息系统(GIS)开发及地图应用的数据处理非常有用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 数据类型: fence geometry(Polygon,4326)

  2. 具体数据示例: POLYGON((120.163629 30.259207,120.163599 30.259802,120.163617 30.259803,120.163647 30.259207,120.163629 30.259207))

  3. java 转换 string为polygon 示例

public void convertStrToPolygon() {
		String str = "[{\"lng\":120.163629,\"lat\":30.259207},{\"lng\":120.163599,\"lat\":30.259802},"
				+ "{\"lng\":120.163617,\"lat\":30.259803},{\"lng\":120.163647,\"lat\":30.259207}]";
		System.out.println(str);
		String lng;
		String lat;
		StringBuffer sb = new StringBuffer();
		JSONArray jsonArray = JSONArray.parseArray(str);
		for (int i = 0; i < jsonArray.size(); i++) {
			JSONObject jsonObj = jsonArray.getJSONObject(i);
			lng = jsonObj.getString("lng");
			lat = jsonObj.getString("lat");
			sb.append(lng).append(" ").append(lat).append(",");
		}
		String polygon = sb.toString();
		if(polygon.endsWith(",")) {
			polygon = polygon.substring(0, polygon.lastIndexOf(","));
			System.out.println(String.format("POLYGON ((%s))", polygon));
		}
//		[{"lng":120.163629,"lat":30.259207},{"lng":120.163599,"lat":30.259802},{"lng":120.163617,"lat":30.259803},{"lng":120.163647,"lat":30.259207}]
//		POLYGON ((120.163629 30.259207,120.163599 30.259802,120.163617 30.259803,120.163647 30.259207))
	}
### PostgreSQL 中 `geometry` 数据类型的面积计算方法 在 PostgreSQL 结合 PostGIS 扩展的情况下,`geometry` 类型用于表示欧几里得平面中的几何对象。对于这种数据类型,在平面上执行的任何操作都假设是在笛卡尔坐标系下完成的。 为了计算 `geometry` 对象的面积,可以使用内置函数 `ST_Area()` 函数来获取给定几何图形的面积[^1]: ```sql SELECT ST_Area(geom) AS area FROM your_table; ``` 这里 `your_table` 是包含有 `geom` 列的数据表名,该列存储的是 `geometry` 类型的对象。此命令返回的结果将是基于所选投影单位下的面积值;如果使用的坐标参照系统 (CRS) 的单位是米,则得到的就是平方米数。 需要注意的是,当处理地理坐标(经度/纬度)时,应该考虑采用 `geography` 类型而不是 `geometry` 来确保更精确的距离和面积测量,因为后者不适用于球面模型上的距离或面积计算。 然而,如果确实要利用 `geometry` 类型来进行近似估算,并且已知输入坐标的 SRID 编号,可以通过如下方式指定坐标系统的 ID 号码后再调用 `ST_Area()`: ```sql SELECT ST_Area(ST_SetSRID(geom, srid)) AS projected_area FROM your_table; ``` 其中 `srid` 应替换为实际应用中的适当 EPSG 代码,这有助于转换成适合本地区域的地图投影从而提高精度[^2]。 #### 示例:创建并查询多边形的面积 下面是一个完整的例子,展示如何定义一个多边形并将它作为 `geometry` 存储,之后再求其面积: ```sql -- 创建测试表格 CREATE TABLE test_polygon ( id serial PRIMARY KEY, geom geometry(Polygon) ); -- 插入一条记录到新建立的表中 INSERT INTO test_polygon (geom) VALUES ('POLYGON((0 0, 4 0, 4 4, 0 4, 0 0))'); -- 查询刚刚插入的那个矩形的面积 SELECT ST_Area(geom) as square_meter_area FROM test_polygon WHERE id=1; ``` 上述 SQL 片段会创建一个新的名为 `test_polygon` 表格,向里面加入了一个简单的正方形形状,最后通过 `ST_Area()` 获取这个正方形占据的空间大小。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值