GIS面积计算

文章介绍了PostGIS中的空间数据操作,包括几何对象的度/秒转换,几何到WKT字符串的转换,设置几何对象的SRID,获取图形中心点,判断包含关系,查询和修改SRID,面积计算以及不同坐标系之间的转换方法,如GCJ02、WGS84和BD09之间的转换。

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

1、度/秒互转
UPDATE 表名 SET geom = st_scale(shape, 1/3600.0,1/3600.0)
2、geom转wkt字符串
SELETC st_astext(t.shape)
3、wkt字符串转geom 并设置坐标系
SELECT st_setsrid(ST_GeomFromText(‘POINT(428626.908 110737.8)’), 4326)
4、获取图形中心点坐标
SELECT ST_X(st_centroid(c.shape)) AS x , ST_Y(st_centroid(c.shape)) AS y
5、A是否包含B
ST_CONTAINS(A, b)
6、查询和修改SRID
SELECT st_srid(geom) FROM road limit 1;

UpdateGeometrySRID(varchar table_name, varchar column_name, integer srid);

UpdateGeometrySRID(varchar schema_name, varchar table_name, varchar column_name, integer srid);

UpdateGeometrySRID(varchar catalog_name, varchar schema_name, varchar table_name, varchar column_name, integer srid);
–schema_name表示schema的名称,一般默认是public

示例:
select UpdateGeometrySRID(‘road’, ‘geom’, 4326);
–road为表名
–geom为空间字段
–4326为更新的SRID

7、面积计算
ST_AREA(shape)
注意:st_area必须在以米为单位的坐标系中才能计算出准确的面积,WGS84(4326)是以度为单位。计算时需用st_transform将几何体转换到以米为单位的坐标系中。
修改后使用 st_area(st_transform(shape,4527))计算面积
不对

4326是以度为坐标的,st_area计算出来的也是度的面积,需将度的面积转为平方米,则使用
st_area(shape)111000111000
8、获取图形的类型
ST_GeometryType
GeometryType
9、坐标系转换
GCJ02转WGS84
select geoc_gcj02towgs84(geom) from test_table
WGS84转GCJ02
select geoc_wgs84togcj02(geom) from test_table
WGS84转BD09
select geoc_wgs84tobd09(geom) from test_table
BD09转WGS84
select geoc_bd09towgs84(geom) from test_table
GCJ02转BD09
select geoc_gcj02tobd09(geom) from test_table
BD09转GCJ02
select geoc_bd09togcj02(geom) from test_table

### 如何在 GIS计算栅格面积 #### 方法概述 在地理信息系统 (GIS) 中,计算栅格面积是一个常见需求。由于栅格数据是由像素组成的二维网格结构,因此可以通过多种方法实现面积的统计和计算。以下是几种常用的技术及其对应的工具。 --- #### 利用 ArcGIS 统计面要素内的栅格面积 ArcGIS 提供了一种高效的方式对面要素范围内的栅格数据进行面积统计。具体来说,可以先使用 **Extract by Mask** 或者 **Clip** 工具将感兴趣区域提取出来,然后再基于该区域内每个唯一值(类别)的像素数量乘以其分辨率平方得到总面积[^2]。 对于多类别的栅格数据而言,还可以进一步借助 Python 脚本或者字段计算器完成自动化流程: ```python import arcpy # 定义输入参数 in_raster = "path_to_your_raster" mask_feature = "path_to_mask_polygon" # 使用 Extract by Mask 工具裁剪栅格 arcpy.sa.ExtractByMask(in_raster, mask_feature).save("clipped_raster") # 获取像元大小并计算每种类别覆盖的总像素数 cell_size = float(arcpy.GetRasterProperties_management(in_raster, "CELLSIZEX").getOutput(0)) unique_values = set([row[0] for row in arcpy.da.SearchCursor("clipped_raster", ["Value"])]) area_dict = {} for value in unique_values: query = f'"Value" = {value}' count = int(arcpy.GetCount_management( arcpy.SelectLayerByAttribute_management("clipped_raster", "NEW_SELECTION", query)).getOutput(0)) area_dict[value] = count * cell_size**2 print(area_dict) ``` 上述脚本实现了按类别分类汇总各部分所占实际地面面积的功能。 --- #### 借助 R 语言读取与处理栅格数据 除了商业软件外,也可以采用免费开源的语言——R 来执行类似的运算任务。`raster` 包作为专门针对空间数据分析设计的一个扩展模块,在这方面表现尤为突出[^3]。 下面展示一段简单的示范程序说明如何加载指定路径下的 TIFF 文件,并求解其中某一层次下所有有效数值占据的空间比例关系: ```R library(raster) # 加载目标影像至内存环境之中 img <- raster("example.tif") # 查看基本信息确认行列尺寸以及坐标系定义情况 summary(img) # 如果存在掩膜边界条件,则需先行应用 crop/cutout 函数限定作用域后再继续后续步骤 masked_img <- mask(img, extent(c(xmin=..., xmax=..., ymin=..., ymax=...))) # 计算单个像元代表的真实世界单位长度距离 res_x <- res(masked_img)[1]; res_y <- abs(res(masked_img)[2]) # 对整幅画面按照不同等级分组累加各自贡献份额 zones <- zonal(values(masked_img), zones=values(masked_img), fun="sum") areas <- as.data.frame(zones$extract * (res_x*res_y)) colnames(areas) <- c('Class', 'Area') head(areas) ``` 此段代码片段展示了从导入原始资料到最终输出各类别占地面积表格的整体逻辑链条。 --- #### 数据来源的影响因素考虑 值得注意的是,不同的栅格数据生成途径可能会影响最后得出的结果精度。例如来源于遥感卫星拍摄的照片往往具有较高的分辨率;而经由纸质地图数字化后的产物则相对粗糙一些。此外还有诸如投影变换过程中可能出现的比例失真等问题都需要提前加以注意以便采取适当措施校正偏差[^4]。 --- ### 结论 综上所述,无论是通过专业的桌面应用程序还是编程接口都可以方便快捷地达成对给定范围内栅格单元总计覆盖面积的有效评估目的。选择合适自己的方案取决于项目规模、预算限制和个人偏好等因素综合考量之后再做决定即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值