Bael 817 (#2411)
* Stashed changes * Changed method access restriction * Added test class * Changes to pom file * Changed formatting. Changed file path variable * Changed pom file. Changed unit test name * pom file
This commit is contained in:
parent
a3cbc25dd8
commit
b65bccabd1
@ -481,8 +481,43 @@
|
|||||||
<groupId>io.vavr</groupId>
|
<groupId>io.vavr</groupId>
|
||||||
<artifactId>vavr</artifactId>
|
<artifactId>vavr</artifactId>
|
||||||
<version>${vavr.version}</version>
|
<version>${vavr.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.geotools</groupId>
|
||||||
|
<artifactId>gt-shapefile</artifactId>
|
||||||
|
<version>${geotools.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.geotools</groupId>
|
||||||
|
<artifactId>gt-epsg-hsql</artifactId>
|
||||||
|
<version>${geotools.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.geotools</groupId>
|
||||||
|
<artifactId>gt-swing</artifactId>
|
||||||
|
<version>${geotools.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
<repositories>
|
||||||
|
<repository>
|
||||||
|
<id>maven2-repository.dev.java.net</id>
|
||||||
|
<name>Java.net repository</name>
|
||||||
|
<url>http://download.java.net/maven/2</url>
|
||||||
|
</repository>
|
||||||
|
<repository>
|
||||||
|
<id>osgeo</id>
|
||||||
|
<name>Open Source Geospatial Foundation Repository</name>
|
||||||
|
<url>http://download.osgeo.org/webdav/geotools/</url>
|
||||||
|
</repository>
|
||||||
|
<repository>
|
||||||
|
<snapshots>
|
||||||
|
<enabled>true</enabled>
|
||||||
|
</snapshots>
|
||||||
|
<id>opengeo</id>
|
||||||
|
<name>OpenGeo Maven Repository</name>
|
||||||
|
<url>http://repo.opengeo.org</url>
|
||||||
|
</repository>
|
||||||
|
</repositories>
|
||||||
<properties>
|
<properties>
|
||||||
<multiverse.version>0.7.0</multiverse.version>
|
<multiverse.version>0.7.0</multiverse.version>
|
||||||
<cglib.version>3.2.4</cglib.version>
|
<cglib.version>3.2.4</cglib.version>
|
||||||
@ -527,5 +562,7 @@
|
|||||||
<eclipse-collections.version>8.2.0</eclipse-collections.version>
|
<eclipse-collections.version>8.2.0</eclipse-collections.version>
|
||||||
<streamex.version>0.6.5</streamex.version>
|
<streamex.version>0.6.5</streamex.version>
|
||||||
<vavr.version>0.9.0</vavr.version>
|
<vavr.version>0.9.0</vavr.version>
|
||||||
|
<geotools.version>15.2</geotools.version>
|
||||||
</properties>
|
</properties>
|
||||||
</project>
|
</project>
|
||||||
|
|
||||||
|
187
libraries/src/main/java/com/baeldung/geotools/ShapeFile.java
Normal file
187
libraries/src/main/java/com/baeldung/geotools/ShapeFile.java
Normal file
@ -0,0 +1,187 @@
|
|||||||
|
package com.baeldung.geotools;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.geotools.data.DataUtilities;
|
||||||
|
import org.geotools.data.DefaultTransaction;
|
||||||
|
import org.geotools.data.Transaction;
|
||||||
|
import org.geotools.data.shapefile.ShapefileDataStore;
|
||||||
|
import org.geotools.data.shapefile.ShapefileDataStoreFactory;
|
||||||
|
import org.geotools.data.simple.SimpleFeatureSource;
|
||||||
|
import org.geotools.data.simple.SimpleFeatureStore;
|
||||||
|
import org.geotools.feature.DefaultFeatureCollection;
|
||||||
|
import org.geotools.feature.simple.SimpleFeatureBuilder;
|
||||||
|
import org.geotools.feature.simple.SimpleFeatureTypeBuilder;
|
||||||
|
import org.geotools.geometry.jts.JTSFactoryFinder;
|
||||||
|
import org.geotools.referencing.crs.DefaultGeographicCRS;
|
||||||
|
import org.geotools.swing.data.JFileDataStoreChooser;
|
||||||
|
import org.opengis.feature.simple.SimpleFeature;
|
||||||
|
import org.opengis.feature.simple.SimpleFeatureType;
|
||||||
|
|
||||||
|
import com.vividsolutions.jts.geom.Coordinate;
|
||||||
|
import com.vividsolutions.jts.geom.GeometryFactory;
|
||||||
|
import com.vividsolutions.jts.geom.Point;
|
||||||
|
|
||||||
|
public class ShapeFile {
|
||||||
|
|
||||||
|
private static final String FILE_NAME = "shapefile.shp";
|
||||||
|
|
||||||
|
public static void main(String[] args) throws Exception {
|
||||||
|
|
||||||
|
DefaultFeatureCollection collection = new DefaultFeatureCollection();
|
||||||
|
|
||||||
|
GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory(null);
|
||||||
|
|
||||||
|
SimpleFeatureType TYPE = DataUtilities.createType("Location", "location:Point:srid=4326," + "name:String");
|
||||||
|
|
||||||
|
SimpleFeatureType CITY = createFeatureType();
|
||||||
|
|
||||||
|
SimpleFeatureBuilder featureBuilder = new SimpleFeatureBuilder(CITY);
|
||||||
|
|
||||||
|
addLocations(featureBuilder, collection);
|
||||||
|
|
||||||
|
File shapeFile = getNewShapeFile();
|
||||||
|
|
||||||
|
ShapefileDataStoreFactory dataStoreFactory = new ShapefileDataStoreFactory();
|
||||||
|
|
||||||
|
Map<String, Serializable> params = new HashMap<String, Serializable>();
|
||||||
|
params.put("url", shapeFile.toURI()
|
||||||
|
.toURL());
|
||||||
|
params.put("create spatial index", Boolean.TRUE);
|
||||||
|
|
||||||
|
ShapefileDataStore dataStore = (ShapefileDataStore) dataStoreFactory.createNewDataStore(params);
|
||||||
|
dataStore.createSchema(CITY);
|
||||||
|
|
||||||
|
// If you decide to use the TYPE type and create a Data Store with it,
|
||||||
|
// You will need to uncomment this line to set the Coordinate Reference System
|
||||||
|
// newDataStore.forceSchemaCRS(DefaultGeographicCRS.WGS84);
|
||||||
|
|
||||||
|
Transaction transaction = new DefaultTransaction("create");
|
||||||
|
|
||||||
|
String typeName = dataStore.getTypeNames()[0];
|
||||||
|
SimpleFeatureSource featureSource = dataStore.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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static SimpleFeatureType createFeatureType() {
|
||||||
|
|
||||||
|
SimpleFeatureTypeBuilder builder = new SimpleFeatureTypeBuilder();
|
||||||
|
builder.setName("Location");
|
||||||
|
builder.setCRS(DefaultGeographicCRS.WGS84);
|
||||||
|
|
||||||
|
builder.add("Location", Point.class);
|
||||||
|
builder.length(15)
|
||||||
|
.add("Name", String.class);
|
||||||
|
|
||||||
|
SimpleFeatureType CITY = builder.buildFeatureType();
|
||||||
|
|
||||||
|
return CITY;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void addLocations(SimpleFeatureBuilder featureBuilder, DefaultFeatureCollection collection) {
|
||||||
|
|
||||||
|
Map<String, List<Double>> locations = new HashMap<>();
|
||||||
|
|
||||||
|
double lat = 13.752222;
|
||||||
|
double lng = 100.493889;
|
||||||
|
String name = "Bangkok";
|
||||||
|
addToLocationMap(name, lat, lng, locations);
|
||||||
|
|
||||||
|
lat = 53.083333;
|
||||||
|
lng = -0.15;
|
||||||
|
name = "New York";
|
||||||
|
addToLocationMap(name, lat, lng, locations);
|
||||||
|
|
||||||
|
lat = -33.925278;
|
||||||
|
lng = 18.423889;
|
||||||
|
name = "Cape Town";
|
||||||
|
addToLocationMap(name, lat, lng, locations);
|
||||||
|
|
||||||
|
lat = -33.859972;
|
||||||
|
lng = 151.211111;
|
||||||
|
name = "Sydney";
|
||||||
|
addToLocationMap(name, lat, lng, locations);
|
||||||
|
|
||||||
|
lat = 45.420833;
|
||||||
|
lng = -75.69;
|
||||||
|
name = "Ottawa";
|
||||||
|
addToLocationMap(name, lat, lng, locations);
|
||||||
|
|
||||||
|
lat = 30.07708;
|
||||||
|
lng = 31.285909;
|
||||||
|
name = "Cairo";
|
||||||
|
addToLocationMap(name, lat, lng, locations);
|
||||||
|
|
||||||
|
GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory(null);
|
||||||
|
|
||||||
|
for (Map.Entry<String, List<Double>> location : locations.entrySet()) {
|
||||||
|
Point point = geometryFactory.createPoint(new Coordinate(location.getValue()
|
||||||
|
.get(0),
|
||||||
|
location.getValue()
|
||||||
|
.get(1)));
|
||||||
|
featureBuilder.add(point);
|
||||||
|
featureBuilder.add(name);
|
||||||
|
SimpleFeature feature = featureBuilder.buildFeature(null);
|
||||||
|
collection.add(feature);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void addToLocationMap(String name, double lat, double lng, Map<String, List<Double>> locations) {
|
||||||
|
List<Double> coordinates = new ArrayList<>();
|
||||||
|
|
||||||
|
coordinates.add(lat);
|
||||||
|
coordinates.add(lng);
|
||||||
|
locations.put(name, coordinates);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static File getNewShapeFile() {
|
||||||
|
String filePath = new File(".").getAbsolutePath() + FILE_NAME;
|
||||||
|
|
||||||
|
|
||||||
|
JFileDataStoreChooser chooser = new JFileDataStoreChooser("shp");
|
||||||
|
chooser.setDialogTitle("Save shapefile");
|
||||||
|
chooser.setSelectedFile(new File(filePath));
|
||||||
|
|
||||||
|
int returnVal = chooser.showSaveDialog(null);
|
||||||
|
|
||||||
|
if (returnVal != JFileDataStoreChooser.APPROVE_OPTION) {
|
||||||
|
System.exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
File shapeFile = chooser.getSelectedFile();
|
||||||
|
if (shapeFile.equals(filePath)) {
|
||||||
|
System.out.println("Error: cannot replace " + filePath);
|
||||||
|
System.exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
return shapeFile;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,27 @@
|
|||||||
|
package com.baeldung.geotools;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertNotNull;
|
||||||
|
|
||||||
|
import org.geotools.feature.DefaultFeatureCollection;
|
||||||
|
import org.geotools.feature.simple.SimpleFeatureBuilder;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.opengis.feature.simple.SimpleFeatureType;
|
||||||
|
|
||||||
|
public class GeoToolsUnitTestTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenFeatureType_whenAddLocations_returnFeatureCollection() {
|
||||||
|
|
||||||
|
DefaultFeatureCollection collection = new DefaultFeatureCollection();
|
||||||
|
|
||||||
|
SimpleFeatureType CITY = ShapeFile.createFeatureType();
|
||||||
|
|
||||||
|
SimpleFeatureBuilder featureBuilder = new SimpleFeatureBuilder(CITY);
|
||||||
|
|
||||||
|
ShapeFile.addLocations(featureBuilder, collection);
|
||||||
|
|
||||||
|
assertNotNull(collection);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user