当前位置: 首页 > wzjs >正文

用wordpress搭建目录网站建筑网片自动清洗机

用wordpress搭建目录网站,建筑网片自动清洗机,淘宝网站开发技术名称,欧美做受网站视频播放GDAL 内存数据集类型详解 GDAL 提供了几种不同的内存数据集类型,主要有以下几种: 1. MEM 栅格驱动 最常用的内存栅格数据集驱动。数据完全存储在内存中,不会写入磁盘。 // 创建MEM栅格数据集 org.gdal.gdal.Driver memDriver gdal.GetDr…

GDAL 内存数据集类型详解

GDAL 提供了几种不同的内存数据集类型,主要有以下几种:

1. MEM 栅格驱动

最常用的内存栅格数据集驱动。数据完全存储在内存中,不会写入磁盘。

// 创建MEM栅格数据集
org.gdal.gdal.Driver memDriver = gdal.GetDriverByName("MEM");
Dataset memDataset = memDriver.Create("", width, height, 1, gdalconstConstants.GDT_Byte);

特点:

  • 速度最快
  • 不会生成任何临时文件
  • 适合进行中间数据处理
  • 数据存储在进程内存中,受内存大小限制

2. Memory 矢量驱动

用于在内存中处理矢量数据的驱动程序。

// 创建内存矢量数据源
Driver memoryDriver = ogr.GetDriverByName("Memory");
DataSource memDataSource = memoryDriver.CreateDataSource("memory");

特点:

  • 专门用于矢量数据处理
  • 可以创建点、线、多边形等几何图形
  • 适合在栅格矢量化后进行临时处理
  • 在矢量化或空间分析过程中很有用

3. VRT (Virtual Format) 虚拟栅格

是一种特殊的内存数据集,它不存储实际数据,而是引用其他数据源。

// 创建VRT数据集
Driver vrtDriver = gdal.GetDriverByName("VRT");
Dataset vrtDataset = vrtDriver.Create("", width, height, 1, gdalconstConstants.GDT_Byte);

特点:

  • 本身不存储数据,而是描述如何访问和处理数据
  • 适合拼接、重投影等操作
  • 可以作为中间处理步骤
  • 实际数据仍在磁盘上,但处理逻辑在内存中

4. VSIMEM 虚拟文件系统

GDAL 提供的内存虚拟文件系统,允许在内存中创建类似文件的数据结构:

// 使用VSIMEM创建内存中的GeoTIFF
String vsimemPath = "/vsimem/temp.tif";
org.gdal.gdal.Driver gtiffDriver = gdal.GetDriverByName("GTiff");
Dataset vsimemDataset = gtiffDriver.Create(vsimemPath, width, height, 1, gdalconstConstants.GDT_Byte);

特点:

  • 表现为磁盘文件但完全在内存中
  • 可以使用任何 GDAL 驱动程序,而不仅限于 MEM
  • 适合需要文件格式特定功能但不想写入磁盘的场景
  • 通过 /vsimem/ 路径前缀标识

适用场景比较

  • MEM:最简单、最快的内存栅格处理,适合中间计算和转换
  • Memory:矢量数据的内存处理,如你代码中从栅格矢量化后的处理
  • VRT:处理大型数据集且不需要复制实际数据时
  • VSIMEM:需要特定文件格式功能但不想写入磁盘时

在你的代码中,使用 MEM 驱动创建栅格数据,然后矢量化后直接写入 Memory 矢量数据源,再写入数据库是一种高效的处理方式,避免了不必要的磁盘 I/O 操作。

GDAL VSIMEM 虚拟文件系统的内存管理

VSIMEM 是 GDAL 提供的虚拟文件系统,它在内存中模拟文件系统的结构。与普通的 MEM 驱动不同,VSIMEM 允许你使用任何文件驱动(如 GeoTIFF、GeoJSON)但将数据保存在内存而非磁盘中。

VSIMEM 内存释放

VSIMEM 的内存释放有两种方式:

1. 自动释放

当以下情况发生时,VSIMEM 会自动释放内存:

// 使用VSIMEM创建内存中的GeoJSON
String vsimemPath = "/vsimem/temp.json";
Driver jsonDriver = ogr.GetDriverByName("GeoJSON");
DataSource dataSource = jsonDriver.CreateDataSource(vsimemPath);// ... 操作数据源 ...// 1. 当你删除数据源时,底层VSIMEM文件会被关闭但不一定释放内存
dataSource.delete();

但是,仅仅删除数据源并不保证立即释放内存。只有当程序结束时,所有 VSIMEM 占用的内存才会被完全释放。

2. 显式释放(推荐方式)

对于长时间运行的应用程序,应该使用 VSIUnlink() 函数显式删除 VSIMEM 文件:

// 创建VSIMEM文件
String vsimemPath = "/vsimem/temp.json";
Driver jsonDriver = ogr.GetDriverByName("GeoJSON");
DataSource dataSource = jsonDriver.CreateDataSource(vsimemPath);// ... 操作数据源 ...// 1. 先关闭数据源
dataSource.delete();// 2. 然后调用VSIUnlink删除虚拟文件,释放内存
org.gdal.gdal.gdal.Unlink(vsimemPath);

在你的代码中使用 VSIMEM 的正确方法

以下是如何修改你的代码,使用 VSIMEM 替代中间 GeoJSON 文件并确保正确释放内存:

public boolean exportTerrainToDatabase(String inputAscPath, String jdbcUrl, String username, String password, String tableName, int srid) {try {// ... 前面的栅格处理代码保持不变 ...// 4. 创建内存中的GeoJSON数据源String vsimemPath = "/vsimem/temp_terrain.json";Driver driver = ogr.GetDriverByName("GeoJSON");DataSource dataSource = driver.CreateDataSource(vsimemPath);// 创建图层SpatialReference srs = new SpatialReference();srs.ImportFromEPSG(srid);Layer layer = dataSource.CreateLayer("terrain", srs, ogr.wkbPolygon);// 添加属性字段FieldDefn nameField = new FieldDefn("name", ogr.OFTString);nameField.SetWidth(50);layer.CreateField(nameField);FieldDefn areaField = new FieldDefn("area", ogr.OFTReal);layer.CreateField(areaField);// 5. 使用过滤后的栅格进行矢量化gdal.Polygonize(filteredDS.GetRasterBand(1), null, layer, 0, new Vector<>());// 检查要素数量layer.ResetReading();int featureCount = layer.GetFeatureCount();System.out.println("矢量化生成的要素数量: " + featureCount);// 6. 直接将图层写入数据库boolean success = false;if (featureCount > 0) {success = GdalDatasetUtil.writeLayerToPostGIS(layer, jdbcUrl, username, password, tableName, srid);if (success) {System.out.println("成功将 " + featureCount + " 个地形多边形写入数据库");} else {System.err.println("地形数据写入数据库失败");}} else {System.out.println("警告:矢量化未生成任何要素");}// 7. 清理资源dataSource.delete();  // 先关闭数据源org.gdal.gdal.gdal.Unlink(vsimemPath);  // 显式释放VSIMEM文件classifiedDS.delete();filteredDS.delete();demDataset.delete();srs.delete();return success;} catch (Exception e) {System.err.println("处理地形数据时出错: " + e.getMessage());e.printStackTrace();return false;}
}

VSIMEM 的优缺点

优点:

  • 支持任何 GDAL/OGR 驱动格式,比 Memory 驱动更灵活
  • 允许在内存中使用需要文件格式的操作
  • 比写入磁盘快得多

缺点:

  • 需要手动调用 Unlink() 释放内存
  • 如果处理大数据集,可能会消耗大量内存
  • 代码复杂度略高于 Memory 驱动

对于你的用例,如果内存足够且不需要保留中间 GeoJSON 文件,使用 VSIMEM 是一个高效的解决方案,可以避免不必要的磁盘 I/O 操作,同时保持完整的 GeoJSON 兼容性。


文章转载自:

http://owqTG5DY.zqsnj.cn
http://ZQCbxIZx.zqsnj.cn
http://7Gw7SrnB.zqsnj.cn
http://rwpoIWp0.zqsnj.cn
http://GajNX87o.zqsnj.cn
http://MQoKi9Xw.zqsnj.cn
http://wOjNy6pU.zqsnj.cn
http://X6wfODaV.zqsnj.cn
http://Vk79AoNZ.zqsnj.cn
http://UtdOY3eU.zqsnj.cn
http://ujT1fIPX.zqsnj.cn
http://z33X80qn.zqsnj.cn
http://F15lDRXk.zqsnj.cn
http://83o5eUjB.zqsnj.cn
http://nBZgbSXh.zqsnj.cn
http://TGBIALzu.zqsnj.cn
http://dTHuUd6q.zqsnj.cn
http://UgqiqQab.zqsnj.cn
http://WWmwyGu0.zqsnj.cn
http://8zhIqWdM.zqsnj.cn
http://OQyc1JlO.zqsnj.cn
http://tciN8ubA.zqsnj.cn
http://rlqfyd5z.zqsnj.cn
http://A95v1aCe.zqsnj.cn
http://NqnB0JuQ.zqsnj.cn
http://0hHjK11R.zqsnj.cn
http://nqnRehf1.zqsnj.cn
http://wxlsVGfW.zqsnj.cn
http://JMBq6vRS.zqsnj.cn
http://FcNG20ag.zqsnj.cn
http://www.dtcms.com/wzjs/685589.html

相关文章:

  • 网站维护建设费应计入科目广州创建网站
  • 网站班级文化建设南京 微网站 建站
  • 有关网站建设国内外现状的文献网站建设前期调研公司汇报
  • 优化网站广告优化推广企业网站域名
  • 成都网站设计成功柚v米科技wordpress 取消更新
  • 网站建设收费标准渠道网站建设最新教程视频教程
  • 网站建设中标ppt设计倒计时
  • 做网站用虚拟主机还是服务器做网站关键词加到什么位置
  • 网站流量排名无锡锡山住房和城乡建设局网站
  • 建设申请网站域名申请好怎么做网站
  • 做视频的教学直播网站哈尔滨网站建设方案维护
  • 业务网站制作简述网站建设的过程
  • 织梦网站模板源码下载企业网站建设费用记入
  • wordpress head网站优化软件排行榜
  • 海淀网站建设怎么样网页设计论文的研究内容
  • 外贸免费建设网站广州冼村旧改最新消息
  • 站群系统程序网站程序基础
  • 网站建设公司专业网站开发需求企业电话名录
  • 嘉兴本地推广网站有哪些网站权重能带来什么作用
  • 网站自动生成系统深圳建外贸网站公司
  • 物流网站公司密云网站开发公司
  • 做网站找哪里免费资料网站网址下载
  • 网站首页按钮图片网页设计学习内容
  • 九江巿建设局网站知名品牌策划设计公司
  • 钓鱼网站到底怎么做中国科技网官网
  • 梅州做网站公司wordpress 后台菜单修改
  • 微网站的定义建设工程服务中心是做什么的
  • 自适应网站做推广烟台网站改版
  • 泰安做网站公司猫咪网站模版下载
  • 江苏苏中建设集团股份有限公司网站wordpress 企业网站主题