前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Geotools Vector ShapeFile 对矢量文件进行坐标系转换,并且保存

Geotools Vector ShapeFile 对矢量文件进行坐标系转换,并且保存

作者头像
Freedom123
发布2024-03-29 08:56:34
610
发布2024-03-29 08:56:34
举报
文章被收录于专栏:DevOpsDevOps
代码语言:javascript
复制
//坐标转换(基于矢量 Geometry)
Geometry transformGeometryCRS(Geometry srcGeom,String srcEpsgId,String dstEpsgId){
  try{
    CoordinateReferenceSystem srcCRS = CRS.decode(srcEpsgId);
    CoordinateReferenceSystem dstCRS = CRS.decode(dstEpsgId);
    Geometry geom = FeatureUtils.transformGeometryCRS(srcGeom,srcCRS,dstCRS);
    return geom;
  }catch (Exception e){
    e.printStackTrace();
    return  null;
  }
}

/**
 * 坐标转换
 * @return
 */
public static Geometry transformGeometryCRS(Geometry srcGeom, CoordinateReferenceSystem srcCRS ,CoordinateReferenceSystem  dstCRS){
  try{
    boolean lenient = true; // allow for some error due to different datums
    MathTransform transform = CRS.findMathTransform( srcCRS, dstCRS,lenient);
    Geometry newGeom = JTS.transform(srcGeom, transform);
    return newGeom;
  }catch (Exception e){
    e.printStackTrace();
    return null;
  }
}

/**
 * 坐标转换
 * @return
 */
public static boolean transformFile(String shpFile,String epsgId,String dstFile){

  try{
    CoordinateReferenceSystem dstCRS = CRS.decode(epsgId);

    //打开shp文件
    File file = new File (shpFile);
    ShapefileDataStore featureSource = new ShapefileDataStore(file.toURL());
    CoordinateReferenceSystem srcCRS = featureSource.getSchema().getCoordinateReferenceSystem();
    SimpleFeatureType featureType = featureSource.getSchema();
    SimpleFeatureTypeImpl typeImpl = (SimpleFeatureTypeImpl)featureType;

    //创建新的shapefile
    File newFile = new File(dstFile);
    ShapefileDataStoreFactory dataStoreFactory = new ShapefileDataStoreFactory();
    Map<String, Serializable> params = new HashMap<String, Serializable>();
    params.put("url", newFile.toURI().toURL());
    params.put("create spatial index", Boolean.TRUE);
    ShapefileDataStore newDataStore = (ShapefileDataStore) dataStoreFactory.createNewDataStore(params);
    SimpleFeatureType newType = SimpleFeatureTypeBuilder.retype(featureType,dstCRS);
    newDataStore.createSchema(newType);

    //处理单个要素
    String typeName = newDataStore.getTypeNames()[0];
    SimpleFeatureSource newFeatureSource = newDataStore.getFeatureSource(typeName);
    Transaction transaction = new DefaultTransaction("Reproject");
    FeatureWriter<SimpleFeatureType, SimpleFeature> writer = newDataStore.getFeatureWriter(newDataStore.getTypeNames()[0], Transaction.AUTO_COMMIT);
    SimpleFeatureIterator iter = featureSource.getFeatureSource().getFeatures().features();
    while(iter.hasNext()){
      SimpleFeature feature = (SimpleFeature) iter.next();

      SimpleFeature newFeature = writer.next();
      newFeature.setAttributes(feature.getAttributes());

      Geometry geometry = (Geometry) feature.getDefaultGeometry();
      Geometry newGeom = FeatureUtils.transformGeometryCRS(geometry,srcCRS,dstCRS);

      newFeature.setDefaultGeometry(newGeom);
    }

    writer.write();
    writer.close();

    iter.close();

    return true;
  }catch (Exception e){
    e.printStackTrace();
    return false;
  }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-03-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档