Skip to main content
English usage; naming; removed helpme
Source Link
Vince
  • 20.3k
  • 16
  • 48
  • 65

How to increase creating shape fileshapefile creation speed from csvCSV file in geotools?GeoTools

I want create shape fileshapefile from csvCSV. hereHere is my code

I got this code from geotoolsGeoTools tutorial. AndIt is working perfect for 500 000 points. But I have 8000000 points. featureStore.addFeatures(collection); is working so slowslowly. Can anyone help me toHow can I increase of countingthe performance?

How increase creating shape file from csv file in geotools?

I want create shape file from csv. here is my code

I got this code from geotools tutorial. And working perfect for 500 000 points. But I have 8000000 points. featureStore.addFeatures(collection); working so slow. Can anyone help me to increase of counting?

How to increase shapefile creation speed from CSV file in GeoTools

I want create shapefile from CSV. Here is my code

I got this code from GeoTools tutorial. It is working perfect for 500 000 points. But I have 8000000 points. featureStore.addFeatures(collection); is working so slowly. How can I increase the performance?

Source Link

How increase creating shape file from csv file in geotools?

I want create shape file from csv. here is my code

 File file = JFileDataStoreChooser.showOpenFile("csv", null);
    if (file == null) {
        return;
    }

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

     /*
     * A list to collect features as we create them.
     */
    List<SimpleFeature> features = new ArrayList<>();

    /*
     * GeometryFactory will be used to create the geometry attribute of each feature,
     * using a Point object for the location.
     */
    GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();

    SimpleFeatureBuilder featureBuilder = new SimpleFeatureBuilder(TYPE);

    try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
        /* First line of the data file is the header */
        String line = reader.readLine();
        System.out.println("Header: " + line);

        double latitude;
        double longitude;
        double number;
        String name;
        int index=0;

        for (line = reader.readLine(); line != null; line = reader.readLine()) {
            if (line.trim().length() > 0) { // skip blank lines
                String[] tokens = line.split(";");
                try {
                    latitude = Double.parseDouble(tokens[9].replace(',', '.').replace(" ",""));
                    longitude = Double.parseDouble(tokens[8].replace(',', '.').replace(" ",""));
                    name = tokens[1].trim();
                    number = Double.parseDouble(tokens[5].trim().replace(",",".").replace(" ",""));
                }catch (Exception e){
                    System.out.print("ERROR on line:"+e.toString()+(index++)+"=>");
                    for (String tkn:tokens)
                        System.out.print( tkn + ";");
                    System.out.println();
                    continue;
                }

                /* Longitude (= x coord) first ! */
                Point point = geometryFactory.createPoint(new Coordinate(longitude, latitude));

                featureBuilder.add(point);
                featureBuilder.add(name);
                featureBuilder.add(number);
                SimpleFeature feature = featureBuilder.buildFeature(null);
                features.add(feature);
            }
        }
    }

     /*
     * Get an output file name and create the new shapefile
     */
    File newFile = getNewShapeFile(file);

    ShapefileDataStoreFactory dataStoreFactory = new ShapefileDataStoreFactory();

    Map<String, Serializable> params = new HashMap<>();
    params.put("url", newFile.toURI().toURL());
    params.put("create spatial index", Boolean.TRUE);

    ShapefileDataStore newDataStore =
            (ShapefileDataStore) dataStoreFactory.createNewDataStore(params);

    /*
     * TYPE is used as a template to describe the file contents
     */
    newDataStore.createSchema(TYPE);

     /*
     * Write the features to the shapefile
     */
    Transaction transaction = new DefaultTransaction("create");

    String typeName = newDataStore.getTypeNames()[0];
    SimpleFeatureSource featureSource = newDataStore.getFeatureSource(typeName);
    SimpleFeatureType SHAPE_TYPE = featureSource.getSchema();
    /*
     * The Shapefile format has a couple limitations:
     * - "the_geom" is always first, and used for the geometry attribute name
     * - "the_geom" must be of type Point, MultiPoint, MuiltiLineString, MultiPolygon
     * - Attribute names are limited in length
     * - Not all data types are supported (example Timestamp represented as Date)
     *
     * Each data store has different limitations so check the resulting SimpleFeatureType.
     */
    System.out.println("SHAPE:" + SHAPE_TYPE);

    if (featureSource instanceof SimpleFeatureStore) {
        SimpleFeatureStore featureStore = (SimpleFeatureStore) featureSource;
        /*
         * SimpleFeatureStore has a method to add features from a
         * SimpleFeatureCollection object, so we use the ListFeatureCollection
         * class to wrap our list of features.
         */
        SimpleFeatureCollection collection = new ListFeatureCollection(TYPE, features);
        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);
    }

I got this code from geotools tutorial. And working perfect for 500 000 points. But I have 8000000 points. featureStore.addFeatures(collection); working so slow. Can anyone help me to increase of counting?