Java使用GeoTools读写shp文件

根据geotools自己封装的工具类,主要有shp文件的内容读取,转geojson,要素的增删改,新shp生成

需要的依赖

这里主要用的是geotools的依赖,版本是<geotools.version>23.2</geotools.version>
还用到了fastjson,版本1.2.57

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.57</version>
</dependency>
<!-- geotools -->
<dependency>
    <groupId>org.geotools</groupId>
    <artifactId>gt-shapefile</artifactId>
    <version>${geotools.version}</version>
</dependency>
<dependency>
    <groupId>org.geotools</groupId>
    <artifactId>gt-geojson</artifactId>
    <version>${geotools.version}</version>
</dependency>
<dependency>
    <groupId>org.geotools</groupId>
    <artifactId>gt-cql</artifactId>
    <version>${geotools.version}</version>
</dependency>
<dependency>
    <groupId>org.geotools</groupId>
    <artifactId>gt-ysld</artifactId>
    <version>${geotools.version}</version>
</dependency>
<dependency>
    <groupId>org.geotools</groupId>
    <artifactId>gt-epsg-hsql</artifactId>
    <version>${geotools.version}</version>
</dependency>
<dependency>
    <groupId>org.geotools</groupId>
    <artifactId>gt-epsg-extension</artifactId>
    <version>${geotools.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.geotools/gt-main -->
<dependency>
    <groupId>org.geotools</groupId>
    <artifactId>gt-main</artifactId>
    <version>${geotools.version}</version>
</dependency>
<dependency>
    <groupId>org.geotools</groupId>
    <artifactId>gt-opengis</artifactId>
    <version>${geotools.version}</version>
</dependency>
<dependency>
    <groupId>org.geotools</groupId>
    <artifactId>gt-xml</artifactId>
    <version>${geotools.version}</version>
</dependency>
<dependency>
    <groupId>org.geotools</groupId>
    <artifactId>gt-referencing</artifactId>
    <version>${geotools.version}</version>
</dependency>

如果不好下需要指定一下repository

<repository>
    <id>GeoSolutions</id>
    <url>http://maven.geo-solutions.it/</url>
</repository>

读取工具

public class ShapeFileReaderUtils {
   
   

    /**
     * 校验shp文件
     *
     * @param fileUrl 文件地址 shp或shp文件夹
     * @return File
     * @throws Exception e
     */
    public static File checkShapeFile(String fileUrl) throws Exception {
   
   
        File file = new File(fileUrl);
        if (file.isDirectory()) {
   
   
            File[] fa = file.listFiles();
            if (fa == null || fa.length < 1) {
   
   
                throw new Exception("找不到shp文件");
            }
            boolean flag = true;
            for (File f : fa) {
   
   
                if (new ShpFiles(file).exists(ShpFileType.SHP)) {
   
   
                    file = f;
                    flag = false;
                    break;
                }
            }
            if (flag) {
   
   
                throw new Exception("找不到shp文件");
            }
        } else {
   
   
            if (!new ShpFiles(file).exists(ShpFileType.SHP)) {
   
   
                throw new Exception("找不到shp文件");
            }
        }
        return file;
    }

    /**
     * shp文件要素源
     *
     * @param fileUrl 文件地址
     * @return ContentFeatureSource
     * @throws Exception e
     */
    public static ContentFeatureSource getFeatureSourceFromShapeFile(String fileUrl) throws Exception {
   
   
        ShapefileDataStore sds = null;
        try {
   
   
            ShapefileDataStoreFactory dataStoreFactory = new ShapefileDataStoreFactory();
            File file = checkShapeFile(fileUrl);

            sds = (ShapefileDataStore) dataStoreFactory.createDataStore(file.toURI().toURL());
            String type = sds.getTypeNames()[0];
            sds.setCharset(getShapeFileCharsetName(fileUrl));

            return sds.getFeatureSource(type);
        } catch (Exception e) {
   
   
            e.printStackTrace();
            return 
可以使用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> ```
评论 19
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值