java读取shp文件,获取点位

    @Test
    void contextLoads() {
        System.out.println(System.currentTimeMillis());//1716516228057  1716516228798
        String zipFilePath = "C:\\code\\risk\\risk_management_backend\\edatope-app\\src\\main\\resources\\新中心范围SHP导入模板.zip";
        String destDir = "C:\\code\\risk\\risk_management_backend\\edatope-app\\src\\main\\resources\\tt";
        Boolean unzip = unzip(zipFilePath, destDir);
        if(!unzip) try {
            throw new Exception("解压失败");
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        // 创建一个File对象,指向你的Shapefile
        File file = new File("C:\\code\\risk\\risk_management_backend\\edatope-app\\src\\main\\resources\\tt\\地块1984.shp");

        // 使用FileDataStoreFinder来查找和创建FileDataStore
        FileDataStore store = null;
        try {
            store = FileDataStoreFinder.getDataStore(file);
            // 获取FeatureSource
            SimpleFeatureSource featureSource = store.getFeatureSource();

            // 获取所有的Features
            SimpleFeatureCollection featureCollection = featureSource.getFeatures();
            // 使用SimpleFeatureIterator遍历features
            List<SimpleFeature> featuresList = new ArrayList<>();
            SimpleFeatureIterator iterator = featureCollection.features();
            try {
                while (iterator.hasNext()) {
                    SimpleFeature feature = iterator.next();

                    // 获取几何信息
                    System.out.println("Geometry: " + feature.getDefaultGeometry());

                    // 获取属性信息
                    System.out.println("Properties: ");
                    feature.getProperties().forEach(prop -> {
                        System.out.println(prop.getName().toString() + ": " + feature.getAttribute(prop.getName()));
                    });
                }
            } finally {
                // 请记住关闭迭代器以释放资源
                iterator.close();
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        System.out.println(System.currentTimeMillis());

    }

    public static Boolean unzip(String zipFilePath, String destDirectory) {
        File dir = new File(destDirectory);
        // 如果目标文件夹不存在,则创建
        if (!dir.exists()) {
            dir.mkdirs();
        }

        byte[] buffer = new byte[1024];
        try (ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFilePath),Charset.forName("GBK"))) {
            ZipEntry zipEntry = zis.getNextEntry();
            while (zipEntry != null) {
                File newFile = newFile(dir, zipEntry);
                if (zipEntry.isDirectory()) {
                    // 创建目录
                    newFile.mkdirs();
                } else {
                    // 创建父目录
                    newFile.getParentFile().mkdirs();
                    // 写入文件
                    try (BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(newFile))) {
                        int len;
                        while ((len = zis.read(buffer)) > 0) {
                            bos.write(buffer, 0, len);
                        }
                    }
                }
                zipEntry = zis.getNextEntry();
            }
            zis.closeEntry();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return true;
    }

    // 保护文件路径,防止ZipPathTraversal攻击
    private static File newFile(File destinationDir, ZipEntry zipEntry) throws IOException {
        File destFile = new File(destinationDir, zipEntry.getName());

        String destDirPath = destinationDir.getCanonicalPath();
        String destFilePath = destFile.getCanonicalPath();

        if (!destFilePath.startsWith(destDirPath + File.separator)) {
            throw new IOException("Entry is outside of the target directory: " + zipEntry.getName());
        }

        return destFile;
    }

注意

引入依赖不起作用,需要去geotools官网下载jar包导入项目
GeoTools
在这里插入图片描述
![](https://img-blog.csdnimg.cn/direct/cf07eb8b594b40b09b24e2bf8eb090cc.png

  • 9
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java可以使用一些库来读取和处理SHP文件,其中最常用的是开源库GeoTools。以下是一个简单的示例代码,展示了如何使用GeoTools读取SHP文件: ```java import org.geotools.data.FileDataStore; import org.geotools.data.FileDataStoreFinder; import org.geotools.data.simple.SimpleFeatureCollection; import org.geotools.data.simple.SimpleFeatureIterator; import org.opengis.feature.simple.SimpleFeature; public class SHPReader { public static void main(String[] args) { try { // 打开SHP文件 FileDataStore dataStore = FileDataStoreFinder.getDataStore(new File("path/to/your/file.shp")); // 获取SHP文件中的要素集合 SimpleFeatureCollection features = dataStore.getFeatureSource().getFeatures(); // 遍历要素集合 try (SimpleFeatureIterator iterator = features.features()) { while (iterator.hasNext()) { SimpleFeature feature = iterator.next(); // 处理每个要素的属性和几何信息 System.out.println("属性信息: " + feature.getAttribute("attributeName")); System.out.println("几何信息: " + feature.getDefaultGeometry()); } } // 关闭数据存储 dataStore.dispose(); } catch (Exception e) { e.printStackTrace(); } } } ``` 在代码中,你需要将`"path/to/your/file.shp"`替换为你实际的SHP文件路径。然后,你可以通过`feature.getAttribute("attributeName")`来获取每个要素的属性信息,`feature.getDefaultGeometry()`来获取几何信息。 请注意,这只是一个基本的示例,你可以根据自己的需求进一步扩展和处理SHP文件中的数据。同时,确保你已经将GeoTools库添加到你的项目中,并正确引入所需的依赖项。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值