首页 > 编程语言 >【Java+GDAL】读取shp文件的坐标信息(坐标系+EPSG码)

【Java+GDAL】读取shp文件的坐标信息(坐标系+EPSG码)

时间:2024-09-16 16:56:14浏览次数:10  
标签:shp Java String EPSG GDAL 坐标系 gdal

文章目录


前言

之前写了几篇与shp字段相关的文章。
【Java+GDAL】shp新增属性字段与删除属性字段
【Java+GDAL】读取shp信息(字段、要素属性等)
Java使用gdal更改shp要素的字段属性值
Java使用gdal重命名shp属性字段
今天来看看怎么读shp的坐标系信息和EPSG编码。在shp文件中,坐标系信息存储在.prj文件当中,如果数据中不存在该文件则没有坐标系信息。shp文件通常有.shp,.dbf,.shx这三个文件,而.prj文件和.cpg文件有可能没有,.cpg文件是用来存shp的编码方式的(比如utf-8)。


一、GDAL和Java版本

GDAL版本为3.0.1
Java为JDK 17.0.11

二、代码实现

1.引入gdal环境

代码如下(示例):

import org.gdal.gdal.gdal;
import org.gdal.ogr.*;
//自定义shp工具类
public class ShpUtil {
    static {
        ogr.RegisterAll();
        gdal.AllRegister();//设置gdal环境
        gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8","YES");//支持中文路径
        gdal.SetConfigOption("SHAPE_ENCODING","CP936");//属性表字段支持中文
    }
	//......获取坐标系信息方法
}

2.读取坐标信息

代码如下(示例):

    /**
     * 读坐标系信息
     * @param shpPath,shp路径
     * @author 415411
     * @create 2024/9/11
     **/
    public static String getShpCoordinateSystem(String shpPath) {
        // 只读方式打开文件
        DataSource dataSource = ogr.Open(shpPath, 0);
        Layer layer = dataSource.GetLayer(0);
        // 获取参考坐标系的名称
        String name = layer.GetSpatialRef().GetName();
        // 输出完成参考坐标系信息        
        System.out.println(layer.GetSpatialRef().toString());
        dataSource.delete();
        return name;
    }
    /**
     * 获取坐标系EPSG编码
     * @param shpPath,shp路径
     * @author 415411
     * @create 2024/9/11
     **/
    public static String getGdbCoordinateEPSG(String shpPath) {
        DataSource dataSource = ogr.Open(shpPath, 0);
        Layer layer = dataSource.GetLayer(0);
        // 获取EPSG编码
        String code = layer.GetSpatialRef().GetAttrValue("AUTHORITY", 0)
                + ":" + layer.GetSpatialRef().GetAttrValue("AUTHORITY", 1);
        dataSource.delete();
        return code;
    }

3.测试使用

代码如下(示例):

    public static void main(String[] args) throws IOException {
        String ref = getShpCoordinateSystem("D:\\work\\testdata\\mapshp\\mbstyle_cookbook_line.shp");
        System.out.println(ref);
        String epsg = getGdbCoordinateEPSG("D:\\work\\testdata\\mapshp\\mbstyle_cookbook_line.shp");
        System.out.println(epsg);
    }

使用Sublime Text 3文本编辑器打开查看测试使用数据的.prj文件如下图:
在这里插入图片描述

程序输出结果如下图:
在这里插入图片描述


总结

提示:今天简单实现了读shp坐标和EPSG编码,对于不存在.prj文件这种无坐标信息等一些情况没有考虑。可以自己使用文本编辑器打开shp中的.prj文件查看里面的坐标信息,然后进行代码调式。

标签:shp,Java,String,EPSG,GDAL,坐标系,gdal
From: https://blog.csdn.net/weixin_45011889/article/details/142148163

相关文章

  • 【Java+GDAL】读取shp文件图层几何类型
    文章目录前言一、GDAL和Java版本二、代码实现1.引入gdal环境2.代码实现3.ogrConstants中的几何类型总结前言今天继续Java+GDAL,之前写的几篇处理shp的文章包括:【Java+GDAL】读取shp文件的坐标信息(坐标系+EPSG码)【Java+GDAL】shp新增属性字段与删除属性字段【Java......
  • java+vue计算机毕设大学生掌上校园app【源码+开题+论文+程序】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着移动互联网技术的飞速发展,智能手机已成为大学生日常生活中不可或缺的一部分。在信息化时代背景下,高校校园管理与学生服务正逐步向数字化、智能化......
  • java+vue计算机毕设大数据背景下大学生个性化学习系统的构建【源码+开题+论文+程序】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展,大数据已成为推动社会进步与产业升级的重要力量。在教育领域,大数据技术的应用正深刻改变着传统的教学模式与学习方式。当前,高......
  • java+vue计算机毕设大学生社团活动管理系统【源码+开题+论文+程序】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着高等教育的普及与校园文化的日益丰富,大学生社团活动已成为促进学生全面发展、增强实践能力、培养团队合作精神的重要平台。然而,传统的手工管理方......
  • java+vue计算机毕设大学生心理咨询管理系统【源码+开题+论文+程序】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着高等教育的普及与深入,大学生群体面临的学业压力、人际关系、职业规划等多重挑战日益凸显,心理健康问题已成为不容忽视的社会议题。传统的心理咨询......
  • Java开发环境搭建 目录与摘要(Java Developer environment Config on Windows 10 --Cat
    Java开发环境搭建目录与摘要数据结构复习一、线性结构1.栈和队列2.链表二、树形结构1.二叉排序树三、排序Title1&Title2Title3contents...aaabbbccc点击查看目录目录项1目录项2目录项3目录项1......
  • Java获取Object中Value的方法
     ​博客主页:   南来_北往系列专栏:SpringBoot实战前言在Java中,获取对象(Object)中的值通常依赖于对象的类型以及我们希望访问的属性。由于Java是一种静态类型语言,直接从一个Object类型中访问属性是不可能的,因为Object是所有类的超类,但它本身不包含任何特定的属性或方......
  • 在 Debian 12 上安装 Java 21
    在Debian12上安装Java21可以通过以下两种主要方法: 使用OracleJDK21 下载deb包:从Oracle官方网站下载适用于Linux的Java21的deb包(jdk-21_linux-x64_bin.deb)。如果是在命令行操作,可以使用 wget 命令来下载,例如:wgethttps://download.oracle.com/java/......
  • 如何打造养老院管理系统?Java SpringBoot+Vue,2025届毕业设计首选,高效运营不是梦
    ✍✍计算机编程指导师⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流!⚡⚡Java实战|SpringBoot/SSMPython实战项目|Django微信小程......
  • 如何打造高效人事管理系统?一鸣企业案例,Java SpringBoot Vue技术揭秘
    ✍✍计算机编程指导师⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流!⚡⚡Java实战|SpringBoot/SSMPython实战项目|Django微信小程......