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

Shapefile格式文件解析和显示

Java实现GIS SHP文件格式的解析和显示,JDK19下编译,awt图形系统显示。

SHP文件对应的属性存储在DBF格式数据库中,解析见:DBASE DBF数据库文件解析_数据库文件在线解析-CSDN博客

解析SHP文件代码:

	public static Shapefile parse(String file) throws IOException {byte _bytes[] = Files.readAllBytes(Paths.get(file));	// 读取文件内容BinaryBufferArray bis = new BinaryBufferArray(_bytes, ByteOrder.BIG_ENDIAN); // 设置大端模式ShapefileImpl shp = new ShapefileImpl();shp.magic = bis.ReadUInt32();	// 读取标志bis.ReadInt32();bis.ReadInt32();bis.ReadInt32();bis.ReadInt32();bis.ReadInt32();shp.length = bis.ReadUInt32();	// 读取长度bis.SetByteOrder(ByteOrder.LITTLE_ENDIAN); // 切换小端模式shp.version = bis.ReadUInt32();	// 读取版本号shp.type = bis.ReadInt32();shp.mbr = bis.ReadDouble(4);shp.z = bis.ReadDouble(2);shp.m = bis.ReadDouble(2);while (bis.available() > 0) {bis.SetByteOrder(ByteOrder.BIG_ENDIAN); // 切换大端模式int gno = bis.ReadInt32();long glen = bis.ReadUInt32();	// 按16-bit word为1个内容长度,这样内容长度是16bit为单位计算的bis.SetByteOrder(ByteOrder.LITTLE_ENDIAN); 	// 切换小端模式long gtype = bis.ReadUInt32();	// 图形类型if (gtype == 5) {  // Polygon	// 测试文件仅有多边形,程序只实现了多边形double[] box = bis.ReadDouble(4);int NumParts = bis.ReadInt32();	int NumPoints = bis.ReadInt32();int[] Parts = bis.ReadInt32(NumParts);ArrayList<SHPPolygon> ps = new ArrayList<>();	// 多边形存储列表for (int i=0; i<NumParts; i++) {int n =  (i==NumParts-1 ? NumPoints- Parts[i] : Parts[i+1] - Parts[i] );SHPPoint[] _points = new SHPPoint[n];for (int j=0;j<n;j++)_points[j] = new SHPPoint(bis.ReadDouble(), bis.ReadDouble());SHPPolygon p = new SHPPolygon(_points);ps.add(p);}SHPPolygonArray p = new SHPPolygonArray(gno, box, ps);shp.geos.add(p);}else throw new java.lang.UnsupportedOperationException("" + gtype);}return shp;}

使用AWT显示世界地图绘制结果,未采用双缓冲模式有闪烁,当鼠标移动时在状态栏显示国家地名属性,从DBF文件解析获得


http://www.mrgr.cn/news/90017.html

相关文章:

  • [笔记.AI]Deepseek-R1 各参数版本的蒸馏模型对比
  • JVM常见命令
  • 【JVM详解一】类加载过程与内存区域划分
  • 大数据-HDFS客户端_NFS挂载到windows本地
  • <tauri><rust><GUI>基于rust和tauri,在已有的前端框架上手动集成tauri示例
  • 基于钉钉API的连接器实现:企业数据集成与自动化管理
  • Office/WPS接入DeepSeek等多个AI工具,开启办公新模式!
  • 《Wiki.js知识库部署实践 + CNB Git数据同步方案解析》
  • 【算法】动态规划专题⑨ —— 二维费用背包问题 python
  • springboot简单应用
  • 【SQL教程|05】Mysql中Limit用法详解
  • 大疆前端开发面试题及参考答案(4万字长文)
  • 【R语言】卡方检验
  • HTML应用指南:利用GET请求获取全国盒马门店位置信息
  • 《Cherry Studio+DeepSeek+Whoosh:三剑合璧,打造高效AI知识库与全文搜索系统》
  • 【Spring】什么是Spring?
  • (六)C++的函数模板与类模板
  • camera系统之cameraprovider
  • 【CubeMX-HAL库】STM32F407—无刷电机学习笔记
  • 保研考研机试攻略:python笔记(4)
  • 【python】简单的flask做页面。一组字母组成的所有单词。这里的输入是一组字母,而输出是所有可能得字母组成的单词列表
  • 全程Kali linux---CTFshow misc入门(38-50)
  • 大数据学习之SparkSql
  • ZoomIt:提高演示效率的画板工具
  • leetcode_深度搜索和广度搜索 100. 相同的树
  • 【设计模式】【行为型模式】模板方法模式(Template Method)