Hello there ,
I am working udig 1.3.2 . I have created shapefile using resultset and
render.
by refering this tutorial geotool csv to
shp<http://docs.geotools.org/stable/tutorials/feature/csv2shp.html>
.
I have added layer programatically it render successfully but when i
restart the udig then error displays at bottom as "*There was no renderer
found capable of rendering this layer*"
I dont no what i am missing here is my code
/*create shapefile */
public void writeShapeFile(ResultSet rs, File outputShapeFile) throws
SQLException,
SchemaException, ParseException, IOException {
System.out.println("file path :->>>>> "+outputShapeFile);
final String geomColumnName = "the_geom";
final int srid = 32644;
CoordinateReferenceSystem crs = null;
try {
crs = CRS.decode("EPSG:32644");
} catch (NoSuchAuthorityCodeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FactoryException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String geomType = "Point";
ResultSetMetaData metaData = rs.getMetaData();
int numberOfColumns = metaData.getColumnCount();
ArrayList<String> columnNames = new ArrayList<String>();
ArrayList<String> columnTypes = new ArrayList<String>();
for (int i = 0; i < numberOfColumns; i++) {
if (metaData.getColumnLabel(i +
1).equalsIgnoreCase("the_geom")) {
columnNames.add(0, metaData.getColumnLabel(i + 1));
columnTypes.add(0, metaData.getColumnTypeName(i + 1));
} else {
columnNames.add(metaData.getColumnLabel(i + 1));
columnTypes.add(metaData.getColumnTypeName(i + 1));
}
}
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("location:" + geomType + ":srid=" + srid +
",");
/*
* Iterate incoming List. Contains column name and its data type
*/
// for (Iterator<String> iterator = columnNames.iterator();
iterator.hasNext();) {
for (int i = 0; i < columnNames.size(); i++) {
String columnName = columnNames.get(i);
String columnType = columnTypes.get(i);
if (columnName.equalsIgnoreCase(geomColumnName)) {
continue;
}
if (i < columnNames.size() - 1) {
stringBuilder.append(columnName + ":" + "String");
stringBuilder.append(",");
} else {
stringBuilder.append(columnName + ":" + "String");
}
}
String columns = stringBuilder.toString();
final SimpleFeatureType TYPE = DataUtilities.createType("Location",
columns);
List<SimpleFeature> features = new ArrayList<SimpleFeature>();
SimpleFeatureBuilder featureBuilder = new
SimpleFeatureBuilder(TYPE);
Geometry geom = null;
String wkb = null;
MultiPolygon multipolygon = null;
MultiLineString multiLineString = null;
MultiPoint multipoint = null;
while (rs.next()) {
try {
for (Iterator<String> iterator = columnNames.iterator();
iterator.hasNext();) {
String columnName = (String) iterator.next();
if (columnName.equalsIgnoreCase(geomColumnName)) {
wkb = rs.getString(columnName);
byte[] aux = WKBReader.hexToBytes(wkb);
geom = new WKBReader().read(aux);
Point[] pointArray = new
Point[geom.getNumGeometries()];
for (int i = 0; i < geom.getNumGeometries();
i++) {
Geometry partGeometry =
geom.getGeometryN(i);
pointArray[i] = new Point(new
CoordinateArraySequence(
partGeometry.getCoordinates()), new
GeometryFactory(
new PrecisionModel(), srid));
}
multipoint = new MultiPoint(pointArray, new
GeometryFactory(
new PrecisionModel(), srid));
featureBuilder.add(multipoint);
} else {
featureBuilder.add(rs.getString(columnName));
}
}
SimpleFeature simpleFeature =
featureBuilder.buildFeature(null);
features.add(simpleFeature);
} finally {
geom = null;
wkb = null;
multipolygon = null;
multiLineString = null;
multipoint = null;
}
}
ShapefileDataStoreFactory dataStoreFactory = new
ShapefileDataStoreFactory();
Map<String, Serializable> params = new HashMap<String,
Serializable>();
params.put("url", outputShapeFile.toURI().toURL());
params.put("create spatial index", Boolean.TRUE);
ShapefileDataStore shapefileDataStore = (ShapefileDataStore)
dataStoreFactory
.createNewDataStore(params);
//System.out.println("feature type" + TYPE);
shapefileDataStore.createSchema(TYPE);
// shapefileDataStore.forceSchemaCRS(DefaultGeographicCRS.WGS84);
shapefileDataStore.forceSchemaCRS(crs);
Transaction transaction = new DefaultTransaction("create");
String typeName = shapefileDataStore.getTypeNames()[0];
SimpleFeatureSource featureSource =
shapefileDataStore.getFeatureSource(typeName);
if (featureSource instanceof SimpleFeatureStore) {
SimpleFeatureStore featureStore = (SimpleFeatureStore)
featureSource;
SimpleFeatureCollection collection = new
ListFeatureCollection(TYPE, features);
featureStore.setTransaction(transaction);
featureStore.addFeatures(collection);
transaction.commit();
}
transaction.close();
}
/*loading layer programatically*/
URL fileUrl = null;
try {
fileUrl = file.toURI().toURL();
} catch (MalformedURLException e1) {
e1.printStackTrace();
}
CatalogPlugin cp = CatalogPlugin.getDefault();
IServiceFactory sf = cp.getServiceFactory();
List<IService> services = sf.createService(fileUrl);
List<IGeoResource> resources = new ArrayList<IGeoResource>();
for( IService service : services ) {
List<? extends IGeoResource> geoResource = null;
try {
geoResource = service.resources(new NullProgressMonitor());
}catch (IOException e) {
e.printStackTrace();
}
if (geoResource != null) {
for( IGeoResource iGeoResource : geoResource ) {
resources.add(iGeoResource);
}
}
}
ApplicationGIS.addLayersToMap(ApplicationGIS.getActiveMap(), resources, -1,
null, true);
It works fine but when restart the application error occured for that layer.
Can anyone help me to solve this issue ???
Thanks
Amit
_______________________________________________
User-friendly Desktop Internet GIS (uDig)
http://udig.refractions.net
http://lists.refractions.net/mailman/listinfo/udig-devel