dem数据矢量化,并获取矢量化后每个点的海拔值存入矢量文件,Java代码

时间: 2024-05-04 11:15:21 浏览: 11
以下是使用Java进行DEM数据矢量化并获取每个点的海拔值存入矢量文件的示例代码: ```java import java.io.File; import java.io.IOException; import java.util.ArrayList; import org.gdal.gdal.Dataset; import org.gdal.gdal.gdal; import org.gdal.ogr.DataSource; import org.gdal.ogr.Driver; import org.gdal.ogr.Feature; import org.gdal.ogr.FieldDefn; import org.gdal.ogr.Geometry; import org.gdal.ogr.Layer; import org.gdal.ogr.ogr; public class DEMtoVector { public static void main(String[] args) { // Load GDAL library gdal.AllRegister(); // Input DEM file String demFile = "inputDEM.tif"; // Output vector file String vectorFile = "outputVector.shp"; // Open DEM file Dataset demDataset = gdal.Open(demFile, gdalconstConstants.GA_ReadOnly); // Get DEM metadata int width = demDataset.getRasterXSize(); int height = demDataset.getRasterYSize(); double[] geotransform = demDataset.GetGeoTransform(); // Create output vector file Driver driver = ogr.GetDriverByName("ESRI Shapefile"); File vectorFileObj = new File(vectorFile); if (vectorFileObj.exists()) { driver.DeleteDataSource(vectorFile); } DataSource vectorDataset = driver.CreateDataSource(vectorFile); // Create output layer Layer vectorLayer = vectorDataset.CreateLayer("elevation", null, ogr.wkbPoint, null); // Add elevation field to layer FieldDefn elevationField = new FieldDefn("elevation", ogr.OFTReal); vectorLayer.CreateField(elevationField); // Loop through DEM pixels and create point features for each pixel for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { // Get elevation value for pixel double[] pixelValue = new double[1]; demDataset.GetRasterBand(1).RasterIO(gdalconstConstants.GF_Read, x, y, 1, 1, pixelValue, 1, 1, gdalconstConstants.GDT_Float64, 0, 0); // Convert pixel coordinates to map coordinates double xMap = geotransform[0] + x * geotransform[1] + y * geotransform[2]; double yMap = geotransform[3] + x * geotransform[4] + y * geotransform[5]; // Create point geometry Geometry pointGeom = ogr.CreateGeometryFromWkt("POINT(" + xMap + " " + yMap + ")"); // Create feature and set elevation field value Feature pointFeature = new Feature(vectorLayer.GetLayerDefn()); pointFeature.SetGeometry(pointGeom); pointFeature.SetField("elevation", pixelValue[0]); // Add feature to layer vectorLayer.CreateFeature(pointFeature); pointFeature.delete(); pointGeom.delete(); } } // Clean up vectorDataset.delete(); demDataset.delete(); ogr.RegisterAll(); } } ``` 在代码中,我们首先加载了GDAL库,然后指定了输入DEM文件和输出矢量文件的路径。接着,我们打开了DEM文件并获取了其元数据。然后,我们创建了输出矢量文件和输出图层,并添加了一个海拔字段到图层中。接下来,我们循环遍历DEM像素并为每个像素创建一个点特征。我们获取了像素的海拔值,并将像素坐标转换为地图坐标。然后,我们创建了一个点几何体并将其添加到特征中。最后,我们将特征添加到图层中。在代码的结尾,我们清理了GDAL资源并完成了DEM数据矢量化过程。

相关推荐

最新推荐

recommend-type

全球免费DEM数据介绍.docx

上篇介绍了ETOPO和GTOPO30两个全球DEM数据产品家族,作为最早的全球DEM数据产品,受制于当时的数据获取手段,均采用已有数据源汇集编制的生产方法,在高程系统一致性、获取时间一致性、分辨率、精度评价、更新等几个...
recommend-type

栅格数据转换dem教程.docx

简称DEM,是通过有限的地形高程数据实现对地面地形的数字化模拟(即地形表面形态的数字化表达),它是用一组有序数值阵列形式表示地面高程的一种实体地面模型,是数字地形模型(Digital Terrain Model,简称DTM)的一...
recommend-type

opengl读DEM数据的代码

这个是我们老师提供的代码,用于数字高程模型文件,实现该数字高程模型的三维可视化(不用LOD算法,只需用原始数据绘制相同层次的网格即可)。
recommend-type

USGS DEM 数据格式

USGS 是美国地质调查局(U.S. Geological Survey)的英文缩写,USGS负责管理美国全国的数字地图数据的采集与分发。
recommend-type

美国USGS的数据说明---DEM数据格式读取等

美国USGS的数据说明---DEM数据格式读取等
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB柱状图在信号处理中的应用:可视化信号特征和频谱分析

![matlab画柱状图](https://img-blog.csdnimg.cn/3f32348f1c9c4481a6f5931993732f97.png) # 1. MATLAB柱状图概述** MATLAB柱状图是一种图形化工具,用于可视化数据中不同类别或组的分布情况。它通过绘制垂直条形来表示每个类别或组中的数据值。柱状图在信号处理中广泛用于可视化信号特征和进行频谱分析。 柱状图的优点在于其简单易懂,能够直观地展示数据分布。在信号处理中,柱状图可以帮助工程师识别信号中的模式、趋势和异常情况,从而为信号分析和处理提供有价值的见解。 # 2. 柱状图在信号处理中的应用 柱状图在信号处理
recommend-type

HSV转为RGB的计算公式

HSV (Hue, Saturation, Value) 和 RGB (Red, Green, Blue) 是两种表示颜色的方式。下面是将 HSV 转换为 RGB 的计算公式: 1. 将 HSV 中的 S 和 V 值除以 100,得到范围在 0~1 之间的值。 2. 计算色相 H 在 RGB 中的值。如果 H 的范围在 0~60 或者 300~360 之间,则 R = V,G = (H/60)×V,B = 0。如果 H 的范围在 60~120 之间,则 R = ((120-H)/60)×V,G = V,B = 0。如果 H 的范围在 120~180 之间,则 R = 0,G = V,B =
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。