/** @param args */ public static void main(String[] args) { // TODO Auto-generated method stub String networkPath = args[0]; String newNetworkPath = args[1]; String shapeFilePath = args[2]; // String shapeFile = "C:/Work/Roadpricing Scenarios/SiouxFalls/Network/SiouxFalls_nodes.shp"; Scenario scenario = ScenarioUtils.createScenario(ConfigUtils.createConfig()); new NetworkReaderMatsimV1(scenario).parse(networkPath); Network network = scenario.getNetwork(); Map<Id<Node>, ? extends Node> nodes = network.getNodes(); Double x = 0.0; Double y = 0.0; System.out.println(shapeFilePath); ShapeFileReader shapeFileReader = new ShapeFileReader(); Collection<SimpleFeature> fts = shapeFileReader.readFileAndInitialize(shapeFilePath); log.info("Shape file contains " + fts.size() + " features!"); for (SimpleFeature ft : fts) { Geometry geo = (Geometry) ft.getDefaultGeometry(); Coordinate[] coordinates = geo.getCoordinates(); Collection<Property> properties = ft.getProperties("Id"); System.out.println( "Feature: " + ft.getID() + "," + ft.getIdentifier().toString() + "," + ft.getName().toString()); for (int i = 0; i < coordinates.length; i++) { System.out.print(coordinates[i].x + "," + coordinates[i].y + " "); x = coordinates[i].x; y = coordinates[i].y; } for (Property p : properties) { System.out.println("Value: " + p.getValue().toString()); Node node = nodes.get(Id.create(p.getValue().toString(), Node.class)); node.getCoord().setXY(x, y); System.out.println("Name: " + p.getName().toString()); System.out.println("Descriptor: " + p.getDescriptor().toString()); } System.out.println(); System.out.println(); NetworkWriter writer = new NetworkWriter(network); writer.write(newNetworkPath); } }
@Test public void testImageReaderPolyphemusSimple() throws Exception { final File file = TestData.file(this, "O3-NO2.nc"); final NetCDFImageReaderSpi unidataImageReaderSpi = new NetCDFImageReaderSpi(); assertTrue(unidataImageReaderSpi.canDecodeInput(file)); NetCDFImageReader reader = null; try { // checking low level reader = (NetCDFImageReader) unidataImageReaderSpi.createReaderInstance(); reader.setInput(file); int numImages = reader.getNumImages(true); LOGGER.info("Found " + numImages + " images."); for (int i = 0; i < numImages; i++) { Slice2DIndex sliceIndex = reader.getSlice2DIndex(i); assertNotNull(sliceIndex); spitOutSliceInformation(i, sliceIndex); } // checking slice catalog final CoverageSlicesCatalog cs = reader.getCatalog(); assertNotNull(cs); // get typenames final String[] typeNames = cs.getTypeNames(); for (String typeName : typeNames) { final List<CoverageSlice> granules = cs.getGranules(new Query(typeName, Filter.INCLUDE)); assertNotNull(granules); assertFalse(granules.isEmpty()); for (CoverageSlice slice : granules) { final SimpleFeature sf = slice.getOriginator(); if (TestData.isInteractiveTest()) { LOGGER.info(DataUtilities.encodeFeature(sf)); } // checks for (Property p : sf.getProperties()) { assertNotNull("Property " + p.getName() + " had a null value!", p.getValue()); } } } } finally { if (reader != null) { try { reader.dispose(); } catch (Throwable t) { // Does nothing } } } }
public BugInfo(SimpleFeature next, long idx) throws IndexOutOfBoundsException, ParseException { bugId = idx; attributes = new HashMap<>(); Collection<Property> properties = next.getProperties(); Iterator<Property> it = properties.iterator(); while (it.hasNext()) { Property p = it.next(); attributes.put(p.getName().toString(), p.getValue().toString()); } this.geom = (Geometry) next.getAttribute(0); this.desc = (String) next.getAttribute("error_desc"); this.id = next.getID(); name = next.getName(); }
/** * Parses SimpleFeature typed object recursively to Map - field names (keys) are combined with * parent sub property names, if properties in property * * @param feature * @return feature all properties as a HashMap */ private static void parseFeatureProperties(Map result, SimpleFeature feature) { for (Property prop : feature.getProperties()) { String field = prop.getName().toString(); Object value = feature.getAttribute(field); if (value != null) { // hide null properties if (value instanceof Map) { parseFeaturePropertiesMap(result, (Map) value, field); } else if (value instanceof List) { parseFeaturePropertiesMapList(result, (List) value, field); } else { result.put(field, value.toString()); } } } }
@Override public String[] encode(SimpleFeature feature) { List<String> csvRecord = new ArrayList<String>(); for (Property property : feature.getProperties()) { Object value = property.getValue(); if (value == null) { csvRecord.add(""); } else if (value instanceof Point) { Point point = (Point) value; csvRecord.add(Double.toString(point.getY())); csvRecord.add(Double.toString(point.getX())); } else { String txt = value.toString(); csvRecord.add(txt); } } return csvRecord.toArray(new String[csvRecord.size() - 1]); }
@Test public void testImageReaderPolyphemunsComplex() throws Exception { File file = null; try { file = TestData.file(this, "polyphemus_20130301.nc"); } catch (IOException e) { LOGGER.warning("Unable to find file polyphemus_20130301.nc"); return; } if (!file.exists()) { LOGGER.warning("Unable to find file polyphemus_20130301.nc"); return; } final NetCDFImageReaderSpi unidataImageReaderSpi = new NetCDFImageReaderSpi(); assertTrue(unidataImageReaderSpi.canDecodeInput(file)); NetCDFImageReader reader = null; try { reader = (NetCDFImageReader) unidataImageReaderSpi.createReaderInstance(); reader.setInput(file); int numImages = reader.getNumImages(true); assertEquals(1008, numImages); for (int i = 0; i < numImages; i++) { Slice2DIndex sliceIndex = reader.getSlice2DIndex(i); assertNotNull(sliceIndex); spitOutSliceInformation(i, sliceIndex); } // check coverage names final List<Name> names = reader.getCoveragesNames(); assertNotNull(names); assertTrue(!names.isEmpty()); assertTrue(3 == names.size()); assertTrue(names.contains(new NameImpl("NO2"))); assertTrue(names.contains(new NameImpl("O3"))); assertTrue(names.contains(new NameImpl("V"))); // checking slice catalog final CoverageSlicesCatalog cs = reader.getCatalog(); assertNotNull(cs); // get typenames final String[] typeNames = cs.getTypeNames(); for (String typeName : typeNames) { final List<CoverageSlice> granules = cs.getGranules(new Query(typeName, Filter.INCLUDE)); assertNotNull(granules); assertFalse(granules.isEmpty()); for (CoverageSlice slice : granules) { final SimpleFeature sf = slice.getOriginator(); if (TestData.isInteractiveTest()) { LOGGER.info(DataUtilities.encodeFeature(sf)); } // checks for (Property p : sf.getProperties()) { assertNotNull("Property " + p.getName() + " had a null value!", p.getValue()); } } } } finally { if (reader != null) { try { reader.dispose(); } catch (Throwable t) { // Does nothing } } } }
@Test public void testImageReaderPolyphemunsComplex2() throws Exception { File file = null; try { file = TestData.file(this, "polyphemus_20130301.nc"); } catch (IOException e) { LOGGER.warning("Unable to find file polyphemus_20130301.nc"); return; } if (!file.exists()) { LOGGER.warning("Unable to find file polyphemus_20130301.nc"); return; } FileUtils.copyFile(file, new File(TestData.file(this, null), "polyphemus.nc")); file = TestData.file(this, "polyphemus.nc"); final NetCDFImageReaderSpi unidataImageReaderSpi = new NetCDFImageReaderSpi(); assertTrue(unidataImageReaderSpi.canDecodeInput(file)); NetCDFImageReader reader = null; try { reader = (NetCDFImageReader) unidataImageReaderSpi.createReaderInstance(); reader.setInput(file); int numImages = reader.getNumImages(true); assertEquals(1008, numImages); for (int i = 0; i < numImages; i++) { Slice2DIndex sliceIndex = reader.getSlice2DIndex(i); assertNotNull(sliceIndex); spitOutSliceInformation(i, sliceIndex); } // check dimensions CoverageSourceDescriptor cd = reader.getCoverageDescriptor(new NameImpl("NO2")); final List<AdditionalDomain> additionalDomains = cd.getAdditionalDomains(); assertNull(additionalDomains); final List<DimensionDescriptor> dimensions = cd.getDimensionDescriptors(); assertNotNull(dimensions); assertTrue(!dimensions.isEmpty()); assertEquals("wrong dimensions", 2, dimensions.size()); DimensionDescriptor dim = dimensions.get(0); assertTrue(dim.getName().equals("TIME")); assertTrue(dim.getStartAttribute().equals("time")); dim = dimensions.get(1); assertTrue(dim.getName().equals("ELEVATION")); assertTrue(dim.getStartAttribute().equals("z")); // check coverage names final List<Name> names = reader.getCoveragesNames(); assertNotNull(names); assertTrue(!names.isEmpty()); assertTrue(3 == names.size()); assertTrue(names.contains(new NameImpl("NO2"))); assertTrue(names.contains(new NameImpl("O3"))); assertTrue(names.contains(new NameImpl("V"))); // checking slice catalog final CoverageSlicesCatalog cs = reader.getCatalog(); assertNotNull(cs); // get typenames final String[] typeNames = cs.getTypeNames(); for (String typeName : typeNames) { final List<CoverageSlice> granules = cs.getGranules(new Query(typeName, Filter.INCLUDE)); assertNotNull(granules); assertFalse(granules.isEmpty()); for (CoverageSlice slice : granules) { final SimpleFeature sf = slice.getOriginator(); if (TestData.isInteractiveTest()) { LOGGER.info(DataUtilities.encodeFeature(sf)); } // checks for (Property p : sf.getProperties()) { assertNotNull("Property " + p.getName() + " had a null value!", p.getValue()); } } } } finally { // close reader if (reader != null) { try { reader.dispose(); } catch (Throwable t) { // Does nothing } } // specific clean up FileUtils.deleteDirectory(TestData.file(this, ".polyphemus")); } }
@Test public void testImageReaderAscat() throws Exception { File file = null; try { file = TestData.file(this, "ascatl1.nc"); } catch (IOException e) { LOGGER.warning("Unable to find file ascatl1.nc"); return; } if (!file.exists()) { LOGGER.warning("Unable to find file ascatl1.nc"); return; } final NetCDFImageReaderSpi unidataImageReaderSpi = new NetCDFImageReaderSpi(); assertTrue(unidataImageReaderSpi.canDecodeInput(file)); NetCDFImageReader reader = null; try { reader = (NetCDFImageReader) unidataImageReaderSpi.createReaderInstance(); reader.setInput(file); int numImages = reader.getNumImages(true); for (int i = 0; i < numImages; i++) { Slice2DIndex sliceIndex = reader.getSlice2DIndex(i); assertNotNull(sliceIndex); spitOutSliceInformation(i, sliceIndex); } // check coverage names final List<Name> names = reader.getCoveragesNames(); assertNotNull(names); assertTrue(!names.isEmpty()); assertTrue(2 == names.size()); assertEquals("cell_index", names.get(0).toString()); assertEquals("f_land", names.get(1).toString()); // checking slice catalog final CoverageSlicesCatalog cs = reader.getCatalog(); assertNotNull(cs); // get typenames final String[] typeNames = cs.getTypeNames(); for (String typeName : typeNames) { final List<CoverageSlice> granules = cs.getGranules(new Query(typeName, Filter.INCLUDE)); assertNotNull(granules); assertFalse(granules.isEmpty()); for (CoverageSlice slice : granules) { final SimpleFeature sf = slice.getOriginator(); if (TestData.isInteractiveTest()) { LOGGER.info(DataUtilities.encodeFeature(sf)); } // checks for (Property p : sf.getProperties()) { final String pName = p.getName().toString(); if (!pName.equalsIgnoreCase("time") && !pName.equalsIgnoreCase("elevation")) { assertNotNull("Property " + p.getName() + " had a null value!", p.getValue()); } else { assertNull("Property " + p.getName() + " did not have a null value!", p.getValue()); } } } } } finally { if (reader != null) { try { reader.dispose(); } catch (Throwable t) { // Does nothing } } } }
/** * Write SQL string to create tables in the test database based on the property files. * * @param propertyFiles Property files from app-schema-test suite. * @param parser The parser (WKT or an SC4O one for 3D tests) * @throws IllegalAttributeException * @throws NoSuchElementException * @throws IOException */ private void createTables(Map<String, File> propertyFiles, String parser) throws IllegalAttributeException, NoSuchElementException, IOException { StringBuffer buf = new StringBuffer(); StringBuffer spatialIndex = new StringBuffer(); // drop table procedure I copied from Victor's Oracle_Data_ref_set.sql buf.append("CREATE OR REPLACE PROCEDURE DROP_TABLE_OR_VIEW(TabName in Varchar2) IS ") .append("temp number:=0;") .append(" tes VARCHAR2 (200) := TabName;") .append(" drp_stmt VARCHAR2 (200):=null;") .append("BEGIN select count(*) into temp from user_tables where TABLE_NAME = tes;") .append("if temp = 1 then drp_stmt := 'Drop Table '||tes;") .append("EXECUTE IMMEDIATE drp_stmt;") // drop views too .append("else select count(*) into temp from user_views where VIEW_NAME = tes;") .append("if temp = 1 then drp_stmt := 'Drop VIEW '||tes;") .append("EXECUTE IMMEDIATE drp_stmt;end if;end if;") .append("EXCEPTION WHEN OTHERS THEN ") .append( "raise_application_error(-20001,'An error was encountered - '||SQLCODE||' -ERROR- '||SQLERRM);") .append("END DROP_TABLE_OR_VIEW;\n"); for (String fileName : propertyFiles.keySet()) { File file = new File(propertyFiles.get(fileName), fileName); try (PropertyFeatureReader reader = new PropertyFeatureReader("test", file)) { SimpleFeatureType schema = reader.getFeatureType(); String tableName = schema.getName().getLocalPart().toUpperCase(); // drop table if exists buf.append("CALL DROP_TABLE_OR_VIEW('").append(tableName).append("')\n"); // create the table buf.append("CREATE TABLE ").append(tableName).append("("); // + pkey int size = schema.getAttributeCount() + 1; String[] fieldNames = new String[size]; List<String> createParams = new ArrayList<String>(); int j = 0; String type; String field; int spatialIndexCounter = 0; for (PropertyDescriptor desc : schema.getDescriptors()) { field = desc.getName().toString().toUpperCase(); fieldNames[j] = field; if (desc instanceof GeometryDescriptor) { type = "SDO_GEOMETRY"; // Update spatial index int srid = getSrid(((GeometryType) desc.getType())); spatialIndex .append("DELETE FROM user_sdo_geom_metadata WHERE table_name = '") .append(tableName) .append("'\n"); spatialIndex .append("Insert into user_sdo_geom_metadata ") .append("(TABLE_NAME,COLUMN_NAME,DIMINFO,SRID)") .append("values ('") .append(tableName) .append("','") .append(field) .append("',MDSYS.SDO_DIM_ARRAY(MDSYS.SDO_DIM_ELEMENT('X',140.962,144.909,0.00001),") .append("MDSYS.SDO_DIM_ELEMENT('Y',-38.858,-33.98,0.00001)") .append( // support 3d index ((GeometryDescriptor) desc).getCoordinateReferenceSystem() != null && ((GeometryDescriptor) desc) .getCoordinateReferenceSystem() .getCoordinateSystem() .getDimension() == 3 ? ", MDSYS.SDO_DIM_ELEMENT('Z',-100000, 100000, 1) )," : "),") .append(srid) .append(")\n"); // ensure it's <= 30 characters to avoid Oracle exception String indexName = (tableName.length() <= 26 ? tableName : tableName.substring(0, 26)) + "_IDX"; if (spatialIndexCounter > 0) { // to avoid duplicate index name when there are > 1 geometry in the same table indexName += spatialIndexCounter; } spatialIndex .append("CREATE INDEX \"") .append(indexName) .append("\" ON \"") .append(tableName) .append("\"(\"") .append(field) .append("\") ") .append("INDEXTYPE IS \"MDSYS\".\"SPATIAL_INDEX\"\n"); spatialIndexCounter++; } else { type = Classes.getShortName(desc.getType().getBinding()); if (type.equalsIgnoreCase("String")) { type = "NVARCHAR2(250)"; } else if (type.equalsIgnoreCase("Double")) { type = "NUMBER"; } // etc. assign as required } createParams.add(field + " " + type); j++; } // Add numeric PK for sorting fieldNames[j] = "PKEY"; createParams.add("PKEY VARCHAR2(30)"); buf.append(StringUtils.join(createParams.iterator(), ", ")); buf.append(")\n"); buf.append( "ALTER TABLE " + tableName + " ADD CONSTRAINT " + tableName + " PRIMARY KEY (PKEY)\n"); // then insert rows SimpleFeature feature; FeatureId id; while (reader.hasNext()) { buf.append("INSERT INTO ").append(tableName).append("("); feature = reader.next(); buf.append(StringUtils.join(fieldNames, ", ")); buf.append(") "); buf.append("VALUES ("); Collection<Property> properties = feature.getProperties(); String[] values = new String[size]; int valueIndex = 0; for (Property prop : properties) { Object value = prop.getValue(); if (value instanceof Geometry) { // use wkt writer to convert geometry to string, so third dimension can be supported // if present. Geometry geom = (Geometry) value; value = new WKTWriter(geom.getCoordinate().z == Double.NaN ? 2 : 3).write(geom); } if (value == null || value.toString().equalsIgnoreCase("null")) { values[valueIndex] = "null"; } else if (prop.getType() instanceof GeometryType) { int srid = getSrid(((GeometryType) prop.getType())); StringBuffer geomValue = new StringBuffer(parser + "('"); geomValue.append(value).append("'"); if (srid > -1) { // attach srid geomValue.append(", ").append(srid); } geomValue.append(")"); values[valueIndex] = geomValue.toString(); } else if (prop.getType().getBinding().getSimpleName().equalsIgnoreCase("DATE")) { values[valueIndex] = "TO_DATE('" + value + "', 'yyyy-MM-dd')"; } else { values[valueIndex] = "'" + value + "'"; } valueIndex++; } id = feature.getIdentifier(); // insert primary key values[valueIndex] = "'" + id.toString() + "'"; buf.append(StringUtils.join(values, ",")); buf.append(")\n"); } } buf.append(spatialIndex.toString()); spatialIndex.delete(0, spatialIndex.length()); if (buf.length() > 0) { this.sql = buf.toString(); } } }
@Override /** * @param inputData a HashMap of the input data: inputObservations: the observations * inputAuthoritativeData: the authoritative points inputDistance: the distance threshold * minNumber: the minimum number of named features to pass fieldName: the name of the field * within the observations to match * @result results a HashpMap of the results: result: the input data with the polygon attributes * attached, null values for no match qual_result: the matched input only data with polygon * attributes attached */ public Map<String, IData> run(Map<String, List<IData>> inputData) throws ExceptionReport { List obsList = inputData.get("inputObservations"); List authList = inputData.get("inputAuthoritativeData"); List distList = inputData.get("inputDistance"); List minList = inputData.get("minNumber"); List fieldList = inputData.get("fieldName"); FeatureCollection obsFc = ((GTVectorDataBinding) obsList.get(0)).getPayload(); FeatureCollection authFc = ((GTVectorDataBinding) authList.get(0)).getPayload(); double dist = ((LiteralDoubleBinding) distList.get(0)).getPayload(); int minNum = ((LiteralIntBinding) minList.get(0)).getPayload(); String fieldName = ((LiteralStringBinding) fieldList.get(0)).getPayload(); ArrayList<SimpleFeature> resultFeatures = new ArrayList<SimpleFeature>(); ArrayList<SimpleFeature> returnFeatures = new ArrayList<SimpleFeature>(); SimpleFeatureIterator obsIt = (SimpleFeatureIterator) obsFc.features(); SimpleFeatureIterator authIt = (SimpleFeatureIterator) authFc.features(); SimpleFeatureIterator sfi = (SimpleFeatureIterator) obsFc.features(); SimpleFeatureType fType = null; SimpleFeature tempPropFeature = sfi.next(); CoordinateReferenceSystem inputObsCrs = obsFc.getSchema().getCoordinateReferenceSystem(); Collection<Property> obsProp = tempPropFeature.getProperties(); SimpleFeatureTypeBuilder resultTypeBuilder = new SimpleFeatureTypeBuilder(); resultTypeBuilder.setName("typeBuilder"); resultTypeBuilder.setCRS(inputObsCrs); Iterator<Property> pItObs = obsProp.iterator(); sfi.close(); while (pItObs.hasNext() == true) { try { Property tempProp = pItObs.next(); PropertyType type = tempProp.getDescriptor().getType(); String name = type.getName().getLocalPart(); Class<String> valueClass = (Class<String>) tempProp.getType().getBinding(); resultTypeBuilder.add(name, valueClass); // LOG.warn ("Obs property " + name + " " + valueClass + " " +type.toString()); } catch (Exception e) { LOG.error("property error " + e); } } // add DQ_Field resultTypeBuilder.add("DQ_SA_SimilarF", Double.class); SimpleFeatureType typeF = resultTypeBuilder.buildFeatureType(); // LOG.warn("Get Spatial Accuracy Feature Type " + typeF.toString()); SimpleFeatureBuilder resultFeatureBuilder = new SimpleFeatureBuilder(typeF); obsIt.close(); SimpleFeatureIterator obsIt2 = (SimpleFeatureIterator) obsFc.features(); while (obsIt2.hasNext()) { SimpleFeature tempFeature = obsIt2.next(); fType = tempFeature.getType(); // LOG.warn("fieldName " + fieldName + " featureName " + featureN + " tempFeature Type " + // fType); // LOG.warn("TableFeatureName " + tempFeature.getProperty(fieldName).getValue()); String tempFeatureName = (String) tempFeature.getProperty(fieldName).getValue(); Geometry geom = (Geometry) tempFeature.getDefaultGeometry(); for (Property obsProperty : tempFeature.getProperties()) { String name = obsProperty.getName().toString(); Object value = obsProperty.getValue(); resultFeatureBuilder.set(name, value); } Geometry bufferGeom = geom.buffer(dist); SimpleFeatureIterator authIt2 = (SimpleFeatureIterator) authFc.features(); int count = 0; int within = 0; while (authIt2.hasNext() && count <= minNum) { SimpleFeature tempAuth = authIt2.next(); String featureN = (String) tempAuth.getProperty(fieldName).getValue(); Geometry tempGeom = (Geometry) tempAuth.getDefaultGeometry(); String authProperty = (String) tempAuth.getProperty(fieldName).getValue(); if (tempGeom.within(bufferGeom) && authProperty.equalsIgnoreCase(featureN)) { count++; if (count >= minNum) { within = 1; } } } LOG.warn("HERE " + within); resultFeatureBuilder.set("DQ_SA_SimilarF", within); SimpleFeature result = resultFeatureBuilder.buildFeature(tempFeature.getID()); result.setDefaultGeometry(geom); LOG.warn("HERE " + result); returnFeatures.add(result); if (within == 1) { resultFeatures.add(result); } authIt2.close(); } obsIt2.close(); ListFeatureCollection qualResult = new ListFeatureCollection(fType, resultFeatures); ListFeatureCollection returns = new ListFeatureCollection(fType, returnFeatures); LOG.warn("HERE 2 " + qualResult.size() + " " + returns.size()); Map<String, IData> results = new HashMap<String, IData>(); results.put("qual_result", new GTVectorDataBinding(qualResult)); results.put("result", new GTVectorDataBinding(returns)); return results; }
@Override /** * inputData a HashMap of the input data: * * @param inputObservations: the observations * @param inputAuthoritativeData: the polygons * @param bufferSize: the size of the buffer around the polygons results a HashpMap of the * results: * @result result: the input data with the polygon attributes attached, null values for no match * @result qual_result: the matched input only data with polygon attributes attached */ public Map<String, IData> run(Map<String, List<IData>> inputData) throws ExceptionReport { HashMap<String, Object> metadataMap = new HashMap<String, Object>(); ArrayList<SimpleFeature> list = new ArrayList<SimpleFeature>(); List<IData> inputObs = inputData.get("inputObservations"); List<IData> inputAuth = inputData.get("inputAuthoritativeData"); List<IData> inputLit = inputData.get("bufferSize"); IData observations = inputObs.get(0); IData authoritative = inputAuth.get(0); IData buffersize = inputLit.get(0); double doubleB = (Double) buffersize.getPayload(); FeatureCollection obsFC = ((GTVectorDataBinding) observations).getPayload(); FeatureCollection authFC = ((GTVectorDataBinding) authoritative).getPayload(); SimpleFeatureIterator obsIt = (SimpleFeatureIterator) obsFC.features(); SimpleFeatureIterator authIt = (SimpleFeatureIterator) authFC.features(); // setup result feature SimpleFeature obsItFeat = obsIt.next(); SimpleFeature obsItAuth = authIt.next(); Collection<Property> property = obsItFeat.getProperties(); Collection<Property> authProperty = obsItAuth.getProperties(); // setup result type builder SimpleFeatureTypeBuilder resultTypeBuilder = new SimpleFeatureTypeBuilder(); resultTypeBuilder.setName("typeBuilder"); Iterator<Property> pItObs = property.iterator(); Iterator<Property> pItAuth = authProperty.iterator(); metadataMap.put("element", "elementBufferedMetadata"); File metadataFile = createXMLMetadata(metadataMap); while (pItObs.hasNext() == true) { try { Property tempProp = pItObs.next(); PropertyType type = tempProp.getDescriptor().getType(); String name = type.getName().getLocalPart(); Class<String> valueClass = (Class<String>) tempProp.getType().getBinding(); resultTypeBuilder.add(name, valueClass); } catch (Exception e) { LOGGER.error("property error " + e); } } int i = 0; while (pItAuth.hasNext() == true) { try { Property tempProp = pItAuth.next(); PropertyType type = tempProp.getDescriptor().getType(); String name = type.getName().getLocalPart(); Class<String> valueClass = (Class<String>) tempProp.getType().getBinding(); if (i > 3) { resultTypeBuilder.add(name, valueClass); } i++; } catch (Exception e) { LOGGER.error("property error " + e); } } obsIt.close(); authIt.close(); resultTypeBuilder.add("withinBuffer", Integer.class); // set up result feature builder SimpleFeatureType type = resultTypeBuilder.buildFeatureType(); SimpleFeatureBuilder resultFeatureBuilder = new SimpleFeatureBuilder(type); // process data here: SimpleFeatureIterator obsIt2 = (SimpleFeatureIterator) obsFC.features(); int within = 0; FeatureCollection resultFeatureCollection = DefaultFeatureCollections.newCollection(); while (obsIt2.hasNext() == true) { within = 0; SimpleFeature tempObs = obsIt2.next(); Geometry obsGeom = (Geometry) tempObs.getDefaultGeometry(); for (Property obsProperty : tempObs.getProperties()) { String name = obsProperty.getName().getLocalPart(); Object value = obsProperty.getValue(); resultFeatureBuilder.set(name, value); // LOGGER.warn("obs Property set " + name); } double bufferSizeDouble = doubleB; Geometry bufferGeom = obsGeom.buffer(bufferSizeDouble); int j = 0; SimpleFeatureIterator authIt2 = (SimpleFeatureIterator) authFC.features(); while (authIt2.hasNext() == true) { SimpleFeature tempAuth = authIt2.next(); Geometry authGeom = (Geometry) tempAuth.getDefaultGeometry(); if (bufferGeom.intersects(authGeom) == true) { within = 1; j = 0; LOGGER.warn("Intersection = true"); for (Property authProperty1 : tempAuth.getProperties()) { String name = authProperty1.getName().getLocalPart(); Object value = authProperty1.getValue(); // Class valueClass = (Class<String>)authProperty1.getType().getBinding(); // LOGGER.warn("Auth property " + name); if (j > 3) { resultFeatureBuilder.set(name, value); // LOGGER.warn("Auth property set " + name); } j++; } } } resultFeatureBuilder.set("withinBuffer", within); SimpleFeature resultFeature = resultFeatureBuilder.buildFeature(tempObs.getName().toString()); Geometry geom = (Geometry) tempObs.getDefaultGeometry(); resultFeature.setDefaultGeometry(geom); list.add(resultFeature); // resultFeatureCollection.add(resultFeature); // LOGGER.warn("RESULT FEATURE " + resultFeatureCollection.getSchema().toString()); // resultFeatureCollection = obsFC; } ListFeatureCollection listFeatureCollection = new ListFeatureCollection(type, list); LOGGER.warn("Result Feature Size " + listFeatureCollection.size()); // sort HashMap GenericFileData gf = null; try { gf = new GenericFileData(metadataFile, "text/xml"); } catch (IOException e) { LOGGER.error("GenericFileData " + e); } HashMap<String, IData> results = new HashMap<String, IData>(); results.put("result", new GTVectorDataBinding((FeatureCollection) obsFC)); results.put("qual_result", new GTVectorDataBinding((FeatureCollection) listFeatureCollection)); results.put("metadata", new GenericFileDataBinding(gf)); return results; }
@SuppressWarnings({"unchecked"}) @Override public Map<String, IData> run(Map<String, List<IData>> inputData) { if (inputData == null || !inputData.containsKey(inputIdentifierFeatures) || !inputData.containsKey(inputIdentifierTargetReferenceSystem)) { LOGGER.error("Error while allocating input parameters"); throw new RuntimeException("Error while allocating input parameters"); } List<IData> dataList = inputData.get(inputIdentifierFeatures); if (dataList == null || dataList.size() != 1) { throw new RuntimeException("Error while allocating input parameters"); } IData firstInputData = dataList.get(0); FeatureCollection<?, ?> featureCollection = ((GTVectorDataBinding) firstInputData).getPayload(); FeatureIterator<?> featureIterator = featureCollection.features(); List<IData> secondDataList = inputData.get(inputIdentifierTargetReferenceSystem); if (secondDataList == null || secondDataList.size() != 1) { throw new RuntimeException("Error while allocating input parameters"); } IData secondInputData = secondDataList.get(0); // crs in epsg code String crs = ((LiteralStringBinding) secondInputData).getPayload(); CoordinateReferenceSystem toCRS = null; try { toCRS = CRS.decode(crs); } catch (Exception e) { throw new RuntimeException("Could not determine target CRS. Valid EPSG code needed.", e); } if (toCRS == null) { throw new RuntimeException("Could not determine target CRS. Valid EPSG code needed."); } List<IData> thirdDataList = inputData.get(inputIdentifierSourceReferenceSystem); if (thirdDataList == null || thirdDataList.size() != 1) { throw new RuntimeException("Error while allocating input parameters"); } IData thirdInputData = thirdDataList.get(0); // crs in epsg code String fromCRSString = ((LiteralStringBinding) thirdInputData).getPayload(); CoordinateReferenceSystem fromCRS = null; try { fromCRS = CRS.decode(fromCRSString); } catch (Exception e) { throw new RuntimeException("Could not determine target CRS. Valid EPSG code needed.", e); } if (fromCRS == null) { throw new RuntimeException("Could not determine target CRS. Valid EPSG code needed."); } FeatureCollection fOut = DefaultFeatureCollections.newCollection(); try { MathTransform tx = CRS.findMathTransform(fromCRS, toCRS, true); int coordinates = 0; while (featureIterator.hasNext()) { SimpleFeature feature = (SimpleFeature) featureIterator.next(); Geometry geometry = (Geometry) feature.getDefaultGeometry(); coordinates = coordinates + geometry.getCoordinates().length; Coordinate[] coords = geometry.getCoordinates(); for (Coordinate coordinate : coords) { Coordinate k = new Coordinate(); k = JTS.transform(coordinate, k, tx); // System.out.println(k); } Geometry newGeometry = JTS.transform(geometry, tx); Feature newFeature = createFeature(feature.getID(), newGeometry, toCRS, feature.getProperties()); fOut.add(newFeature); } } catch (Exception e) { throw new RuntimeException("Error while transforming", e); } HashMap<String, IData> result = new HashMap<String, IData>(); result.put(outputIdentifierResult, new GTVectorDataBinding(fOut)); return result; }
@Execute /** * inputData a HashMap of the input data: * * @param inputObservations: the observations * @param inputAuthoritativeData: the polygons * @param bufferSize: the size of the buffer in the same units as the input data (degrees for * lat/long) results a HashpMap of the results: * @result result: the input data with the polygon attributes attached, null values for no match * @result qual_result: the matched input only data with polygon attributes attached * @result metadata: an unused output that was supposed to return an XML document for GeoNetwork */ public void runBuffer() { Logger LOGGER = Logger.getLogger(BufferAuthoritativeDataComparison.class); SimpleFeatureIterator obsIt = (SimpleFeatureIterator) obsFC.features(); SimpleFeatureIterator authIt = (SimpleFeatureIterator) authFC.features(); // setup result feature SimpleFeature obsItFeat = obsIt.next(); SimpleFeature obsItAuth = authIt.next(); Collection<Property> property = obsItFeat.getProperties(); Collection<Property> authProperty = obsItAuth.getProperties(); // setup result type builder SimpleFeatureTypeBuilder resultTypeBuilder = new SimpleFeatureTypeBuilder(); resultTypeBuilder.setName("typeBuilder"); Iterator<Property> pItObs = property.iterator(); Iterator<Property> pItAuth = authProperty.iterator(); metadataMap.put("element", "elementBufferedMetadata"); metadataFile = createXMLMetadata(metadataMap); while (pItObs.hasNext() == true) { try { Property tempProp = pItObs.next(); PropertyType type = tempProp.getDescriptor().getType(); String name = type.getName().getLocalPart(); Class<String> valueClass = (Class<String>) tempProp.getType().getBinding(); resultTypeBuilder.add(name, valueClass); } catch (Exception e) { LOGGER.error("property error " + e); } } int i = 0; while (pItAuth.hasNext() == true) { try { Property tempProp = pItAuth.next(); PropertyType type = tempProp.getDescriptor().getType(); String name = type.getName().getLocalPart(); Class<String> valueClass = (Class<String>) tempProp.getType().getBinding(); if (i > 3) { resultTypeBuilder.add(name, valueClass); } i++; } catch (Exception e) { LOGGER.error("property error " + e); } } obsIt.close(); authIt.close(); resultTypeBuilder.add("withinBuffer", Integer.class); // set up result feature builder SimpleFeatureType type = resultTypeBuilder.buildFeatureType(); SimpleFeatureBuilder resultFeatureBuilder = new SimpleFeatureBuilder(type); // process data here: SimpleFeatureIterator obsIt2 = (SimpleFeatureIterator) obsFC.features(); int within = 0; resultFeatureCollection = DefaultFeatureCollections.newCollection(); while (obsIt2.hasNext() == true) { within = 0; SimpleFeature tempObs = obsIt2.next(); Geometry obsGeom = (Geometry) tempObs.getDefaultGeometry(); for (Property obsProperty : tempObs.getProperties()) { String name = obsProperty.getName().getLocalPart(); Object value = obsProperty.getValue(); resultFeatureBuilder.set(name, value); // LOGGER.warn("obs Property set " + name); } double bufferSizeDouble = Double.parseDouble(bufferSize); Geometry bufferGeom = obsGeom.buffer(bufferSizeDouble); int j = 0; SimpleFeatureIterator authIt2 = (SimpleFeatureIterator) authFC.features(); while (authIt2.hasNext() == true) { SimpleFeature tempAuth = authIt2.next(); Geometry authGeom = (Geometry) tempAuth.getDefaultGeometry(); if (bufferGeom.intersects(authGeom) == true) { within = 1; j = 0; LOGGER.warn("Intersection = true"); for (Property authProperty1 : tempAuth.getProperties()) { String name = authProperty1.getName().getLocalPart(); Object value = authProperty1.getValue(); // Class valueClass = (Class<String>)authProperty1.getType().getBinding(); // LOGGER.warn("Auth property " + name); if (j > 3) { resultFeatureBuilder.set(name, value); // LOGGER.warn("Auth property set " + name); } j++; } } } resultFeatureBuilder.set("withinBuffer", within); SimpleFeature resultFeature = resultFeatureBuilder.buildFeature(tempObs.getName().toString()); Geometry geom = (Geometry) tempObs.getDefaultGeometry(); resultFeature.setDefaultGeometry(geom); list.add(resultFeature); // resultFeatureCollection.add(resultFeature); // LOGGER.warn("RESULT FEATURE " + resultFeatureCollection.getSchema().toString()); // resultFeatureCollection = obsFC; } listFeatureCollection = new ListFeatureCollection(type, list); LOGGER.warn("Result Feature Size " + listFeatureCollection.size()); }