【问题标题】:How to create and populate shp file with GeoTools API如何使用 GeoTools API 创建和填充 shp 文件
【发布时间】:2018-10-24 08:35:18
【问题描述】:

我需要创建一个空的形状文件并用我的 java 集合中的数据填充它。有人可以向我展示如何实现这一目标的示例吗?提前致谢。

【问题讨论】:

    标签: java shape geotools


    【解决方案1】:

    有关详细信息,请参阅CSV to Shapefile tutorial

    基本上您需要在SimpleFeatureType 对象中定义Shapefiles 列,最简单的方法是使用SimpleFeatureTypeBuilder。这里是直接使用实用程序方法生成的,以节省时间。

        final SimpleFeatureType TYPE = 
            DataUtilities.createType("Location",
                "location:Point:srid=4326," + // <- the geometry attribute: Point type
                        "name:String," + // <- a String attribute
                        "number:Integer" // a number attribute
        );
    

    现在,您可以创建 Shapefile:

        /*
         * Get an output file name and create the new shapefile
         */
        File newFile = getNewShapeFile(file);
    
        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);
        newDataStore.createSchema(TYPE);
    
        /*
         * You can comment out this line if you are using the createFeatureType method (at end of
         * class file) rather than DataUtilities.createType
         */
        newDataStore.forceSchemaCRS(DefaultGeographicCRS.WGS84);
    

    并且,最后将Features的集合写入它:

        Transaction transaction = new DefaultTransaction("create");
    
        String typeName = newDataStore.getTypeNames()[0];
        SimpleFeatureSource featureSource = newDataStore.getFeatureSource(typeName);
    
        if (featureSource instanceof SimpleFeatureStore) {
            SimpleFeatureStore featureStore = (SimpleFeatureStore) featureSource;
    
            featureStore.setTransaction(transaction);
            try {
                featureStore.addFeatures(collection);
                transaction.commit();
    
            } catch (Exception problem) {
                problem.printStackTrace();
                transaction.rollback();
    
            } finally {
                transaction.close();
            }
            System.exit(0); // success!
        } else {
            System.out.println(typeName + " does not support read/write access");
            System.exit(1);
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-25
      • 2021-05-26
      相关资源
      最近更新 更多