geotools 工具 导入shp 文件并解析

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

开整

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;
 }

总结 后期有空再补上

经验分享 程序员 微信小程序 职场和发展