【GeoTools】判断shp文件的合法性

该代码示例展示了如何使用Geotools库来检查Shapefile的合法性。通过读取shp文件的几何类型和空间参考信息,如果两者都能成功获取,则认为文件是合法的。如果出现null值,则记录错误并返回非法。
摘要由CSDN通过智能技术生成

引入geotools依赖

        <!-- geotools依赖 -->
        <dependency>
            <groupId>org.geotools</groupId>
            <artifactId>gt-shapefile</artifactId>
            <version>15.4</version>
        </dependency>

判断shape文件的合法性

总体思路:通过读取shp文件的几何类型和空间参考信息来判断合法性。如果都读取成功,则说明是合法的shp文件。(在某些场景下空间参考不是必须的)

    public static boolean isLegalShp(String shpPath) throws IOException {
        ShapefileDataStoreFactory factory = new ShapefileDataStoreFactory();
        try {
            FileDataStore dataStore = factory.createDataStore(new File(shpPath).toURI().toURL());
            GeometryDescriptor descriptor = dataStore.getFeatureSource().getSchema().getGeometryDescriptor();
            // 获取几何类型
            GeometryType type = descriptor.getType();
            // 获取空间参考信息
            CoordinateReferenceSystem coord = descriptor.getCoordinateReferenceSystem();
            if (type == null || coord == null) {
                log.error("incorrect shapefile");
                return false;
            }
            log.info("correct shapefile, geometry type:{}, coordinate system:{}", type.getName(), coord.getCoordinateSystem());
            return true;
        } catch (IOException e) {
            log.error("get shp url error", e);
            return false;
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Geotools库来读写shp文件。下面是一个简单的示例代码,可以读取shp文件并打印出其属性表信息: ```java import java.io.File; import java.io.IOException; import org.geotools.data.DataStore; import org.geotools.data.DataStoreFinder; import org.geotools.data.simple.SimpleFeatureCollection; import org.geotools.data.simple.SimpleFeatureIterator; import org.opengis.feature.simple.SimpleFeature; import org.opengis.feature.simple.SimpleFeatureType; public class ShpFileReader { public static void main(String[] args) throws IOException { // 读取shp文件 File file = new File("path/to/shapefile.shp"); DataStore dataStore = DataStoreFinder.getDataStore(file); String typeName = dataStore.getTypeNames()[0]; SimpleFeatureType schema = dataStore.getSchema(typeName); // 获取属性表信息 System.out.println("Feature Type: " + typeName); System.out.println("Number of attributes: " + schema.getAttributeCount()); System.out.println("Attributes: "); for (int i = 0; i < schema.getAttributeCount(); i++) { System.out.println(schema.getAttributeDescriptors().get(i).getName()); } // 获取要素信息 SimpleFeatureCollection collection = dataStore.getFeatureSource(typeName).getFeatures(); try (SimpleFeatureIterator features = collection.features()) { while (features.hasNext()) { SimpleFeature feature = features.next(); System.out.println(feature.getID() + ": " + feature.getDefaultGeometryProperty().getValue()); } } dataStore.dispose(); } } ``` 需要注意的是,需要在pom.xml中添加geotools依赖: ```xml <dependency> <groupId>org.geotools</groupId> <artifactId>gt-shapefile</artifactId> <version>24.0</version> </dependency> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值