geotools 工具 导入shp 文件并解析

这篇博客介绍了如何使用GeoTools库来处理地理数据,包括导入相关依赖、读取shapefile、解析prj文件、读取dbf坐标文件以及进行坐标转换。示例代码展示了从文件获取store、读取prj属性、读取dbf文件头信息以及获取shp文件坐标信息的过程,为地理数据处理提供了一套实用工具。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

喜欢的点赞👍 不喜欢的解散 创作不易记得三连

开整

1 导入依赖

<dependency>
   <groupId>org.geotools</groupId>
    <artifactId>gt-geojson</artifactId>
    <version>23.2</version>
</dependency>
<dependency>
    <groupId>org.geotools</groupId>
    <artifactId>gt-shapefile</artifactId>
    <version>23.2</version>
</dependency>
<dependency>
    <groupId>org.geotools</groupId>
    <artifactId>gt-swing</artifactId>
    <version>23.2</version>
</dependency>
<dependency>
    <groupId>org.geotools</groupId>
    <artifactId>gt-epsg-hsql</artifactId>
    <version>23.2</version>
</dependency>

导入文件获取store工具类

public ShapefileDataStore singleFileByUrl(String file, String fromShpResource, Double height, String targetCRS,Integer isPrj) throws Exception {
   File dest = new File(file);
   ShapefileDataStore store = new ShapefileDataStore(dest.toURI().toURL());
   store.setCharset(StandardCharsets.UTF_8);
   return store;
}

读取prj属性 文件工具类

public CoordinateReferenceSystem readPrjFile(FileDataStore store) throws Exception {
        CoordinateReferenceSystem coordinateReferenceSystem = store.getFeatureReader().getFeatureType().getCoordinateReferenceSystem();
        return coordinateReferenceSystem;
    }

读取dbf 坐标文件工具类

public DbaseFileHeader readDbfFile(String path) throws Exception {
        String substring = path.substring(path.lastIndexOf("/") + 1);
        String[] split = substring.split("\\.");
        ImportFile importFile = new ImportFile();
        importFile.setFileType(split[1]);
        importFile.setFileName(split[0]);
        importFile.setFileUrl(path);
        importFile.setIsDelete(1);
        importFile.setIsResolved(1);
        List<String> list=new ArrayList<>();
        Map<Object, Object> values = null;
        DbaseFileReader reader = null;
        reader = new DbaseFileReader(new ShpFiles(path), false, StandardCharsets.UTF_8);
        DbaseFileHeader header = reader.getHeader();
        int numFields = header.getNumFields();
       	return header;
    }

坐标转换工具类

 public MathTransform getTransform(FileDataStore store) throws Exception {
       CoordinateReferenceSystem coordinateReferenceSystem = readPrjFile(store);
       MathTransform transform = CRS.findMathTransform(CRS.getProjectedCRS(coordinateReferenceSystem), DefaultGeographicCRS.WGS84, true);
       return transform;

获取shp文件坐标信息

public List<Geometry> importShape(FileDataStore store) throws Exception {

    List<Geometry> geometries = new ArrayList<>();

    CoordinateReferenceSystem coordinateReferenceSystem = readPrjFile(store);
    // 通过store获取featurecollection
    SimpleFeatureSource featureSource = store.getFeatureSource();
    SimpleFeatureCollection simpleFeatureCollection = featureSource.getFeatures();
    SimpleFeatureIterator itertor = simpleFeatureCollection.features();
    // 遍历featurecollection
    ArrayList<MarkVo> markVos = new ArrayList<>();
    MathTransform transform =
        CRS.findMathTransform(
            CRS.getProjectedCRS(coordinateReferenceSystem), DefaultGeographicCRS.WGS84, true);
    while (itertor.hasNext()) {
      SimpleFeature feature = itertor.next();
      Geometry defaultGeometry = (Geometry) feature.getDefaultGeometry();
      Geometry targetGeometry = JTS.transform(defaultGeometry, transform);
      geometries.add(targetGeometry);
    }
    return geometries;
 }

总结 后期有空再补上

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值