Search in sources :

Example 1 with Horizsys

use of gov.usgs.cida.coastalhazards.xml.model.Horizsys in project coastal-hazards by USGS-CIDA.

the class MetadataUtil method getCrsFromFgdcMetadata.

public static CoordinateReferenceSystem getCrsFromFgdcMetadata(String inMetadata) throws FactoryException, JAXBException, UnsupportedEncodingException {
    // create the WKT to instantiate a CRS object from org.geotools.referencing
    CRSParameters crsParms = new CRSParameters();
    Metadata metadata = null;
    try {
        JAXBContext jaxbContext = JAXBContext.newInstance(Metadata.class);
        Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
        metadata = (Metadata) jaxbUnmarshaller.unmarshal(new ByteArrayInputStream(inMetadata.getBytes("UTF-8")));
    } catch (JAXBException e) {
        // schema used https: www.fgdc.gov/schemas/metadata/fgdc-std-001-1998-sect01.xsd
        log.error("Unable to parse xml file. Has the schema changed? https:www.fgdc.gov/schemas/metadata/fgdc-std-001-1998-sect01.xsd :" + e.getMessage());
        throw e;
    }
    Horizsys horizsys = metadata.getSpref().getHorizsys();
    String ellips = horizsys.getGeodetic().getEllips();
    String horizdn = horizsys.getGeodetic().getHorizdn();
    double denflat = horizsys.getGeodetic().getDenflat();
    double semiaxis = horizsys.getGeodetic().getSemiaxis();
    String mapprojn = horizsys.getPlanar().getMapproj().getMapprojn();
    double feast = horizsys.getPlanar().getMapproj().getMapprojp().getFeast();
    double fnorth = horizsys.getPlanar().getMapproj().getMapprojp().getFnorth();
    double latprjo = horizsys.getPlanar().getMapproj().getMapprojp().getLatprjo();
    double longcm = horizsys.getPlanar().getMapproj().getMapprojp().getLongcm();
    double stdparll = horizsys.getPlanar().getMapproj().getMapprojp().getStdparll();
    // these defaults were derived from the first 3 raster files meta-data CR, AE, PAE
    // Hoping that these can be optional or located in future metadata in which case
    // an if check should be performed and the value replaced if it doesn't match the default
    String defaultGcs = "GCS_North_American_1983";
    String defaultPrimeM = "Greenwich\",0.0]";
    String defaultUnit = "Degree\",0.0174532925199433]]";
    String defaultProjection = "Albers";
    String defaultLengthUnit = "Meter";
    double defaultLengthValue = 1.0;
    crsParms.setEllips(ellips);
    crsParms.setHorizdn(horizdn);
    crsParms.setDenflat(denflat);
    crsParms.setSemiaxis(semiaxis);
    crsParms.setMapprojn(mapprojn);
    crsParms.setFeast(feast);
    crsParms.setFnorth(fnorth);
    crsParms.setLatprjo(latprjo);
    crsParms.setLongcm(longcm);
    crsParms.setStdparll(stdparll);
    crsParms.setGcs(defaultGcs);
    crsParms.setPrimeM(defaultPrimeM);
    crsParms.setUnit(defaultUnit);
    crsParms.setProjection(defaultProjection);
    crsParms.setLengthUnit(defaultLengthUnit);
    crsParms.setLengthValue(defaultLengthValue);
    // same as FactoryFinder.getCRSFactory(null).createFromWKT(wkt);
    return CRS.parseWKT(buildWkt(crsParms));
}
Also used : Horizsys(gov.usgs.cida.coastalhazards.xml.model.Horizsys) ByteArrayInputStream(java.io.ByteArrayInputStream) JAXBException(javax.xml.bind.JAXBException) Metadata(gov.usgs.cida.coastalhazards.xml.model.Metadata) JAXBContext(javax.xml.bind.JAXBContext) Unmarshaller(javax.xml.bind.Unmarshaller) CRSParameters(gov.usgs.cida.coastalhazards.metadata.CRSParameters)

Example 2 with Horizsys

use of gov.usgs.cida.coastalhazards.xml.model.Horizsys in project coastal-hazards by USGS-CIDA.

the class MetadataUtilTest method testGetCrsFromFgdcMetadata.

/**
 * Test of getCrsFromFgdcMetadata method, of class MetadataUtil.
 */
@Test
public void testGetCrsFromFgdcMetadata() throws IOException {
    System.out.println("getCrsFromFgdcMetadata");
    // spref is used to determine hte SRS
    System.out.println("testGetBoundingBoxFromFgdcMetadataAE");
    // get the metadata from the test file as a string using this package to locate it ...
    String packageName = this.getClass().getCanonicalName();
    // PackageName: gov.usgs.cida.coastalhazards.rest.data.util.MetadataUtilTest
    System.out.println("PackageName: " + packageName);
    // this is where the test resource is located - gov.usgs.cida.coastalhazards.rest.data + /ne_AEmeta.xml
    String replaced = packageName.replaceAll("[.]", "/");
    String[] names = replaced.split("/util/MetadataUtilTest");
    String packageNameShort = names[0];
    String testFileFullName = packageNameShort + "/" + CRxml;
    String metadataXml = loadResourceAsString(testFileFullName);
    InputStream in = new ByteArrayInputStream(metadataXml.getBytes("UTF-8"));
    Metadata metadata = null;
    // JAXB will require jaxb-api.jar and jaxb-impl.jar part of java 1.6. Much safer way to interrogate xml and maintain than regex
    try {
        // File file = new File(xmlFile);  // FYI: can also be done via file rather than inputStream
        JAXBContext jaxbContext = JAXBContext.newInstance(Metadata.class);
        Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
        metadata = (Metadata) jaxbUnmarshaller.unmarshal(in);
    } catch (JAXBException e) {
        e.printStackTrace();
    }
    assertNotNull(metadata);
    // Spref spref = metadata.getSpref();
    Horizsys horizsys = metadata.getSpref().getHorizsys();
    assertNotNull(horizsys);
    String expEllips = "GRS 1980";
    String expHorizdn = "North American Datum 1983";
    double expDenflat = 298.257222101;
    double expSemiaxis = 6378137.0;
    // part I
    String ellips = horizsys.getGeodetic().getEllips();
    String horizdn = horizsys.getGeodetic().getHorizdn();
    double denflat = horizsys.getGeodetic().getDenflat();
    double semiaxis = horizsys.getGeodetic().getSemiaxis();
    assertTrue(expEllips.equalsIgnoreCase(ellips));
    assertTrue(expHorizdn.equalsIgnoreCase(horizdn));
    assertEquals(expDenflat, denflat, expDenflat - denflat);
    assertEquals(expSemiaxis, semiaxis, expSemiaxis - semiaxis);
    // part II
    String mapprojn = horizsys.getPlanar().getMapproj().getMapprojn();
    double feast = horizsys.getPlanar().getMapproj().getMapprojp().getFeast();
    double fnorth = horizsys.getPlanar().getMapproj().getMapprojp().getFnorth();
    double latprjo = horizsys.getPlanar().getMapproj().getMapprojp().getLatprjo();
    double longcm = horizsys.getPlanar().getMapproj().getMapprojp().getLongcm();
    double stdparll = horizsys.getPlanar().getMapproj().getMapprojp().getStdparll();
    String expMapprojn = "Albers Conical Equal Area";
    double expFeast = 0.0;
    double expFnorth = 0.0;
    double expLatprjo = 23.0;
    double expLongcm = -96.0;
    // the second of the two children
    double expStdparll = 45.5;
    assertTrue(expMapprojn.equalsIgnoreCase(mapprojn));
    assertEquals(expFeast, feast, expFeast - feast);
    assertEquals(expFnorth, fnorth, expFnorth - fnorth);
    assertEquals(expLatprjo, latprjo, expLatprjo - latprjo);
    assertEquals(expLongcm, longcm, expLongcm - longcm);
    assertEquals(expStdparll, stdparll, expStdparll - stdparll);
// CoordinateReferenceSystem expResult = null;
// CoordinateReferenceSystem result = MetadataUtil.getCrsFromFgdcMetadata(metadata);
// assertEquals(expResult, result);
}
Also used : Horizsys(gov.usgs.cida.coastalhazards.xml.model.Horizsys) ByteArrayInputStream(java.io.ByteArrayInputStream) ByteArrayInputStream(java.io.ByteArrayInputStream) InputStream(java.io.InputStream) JAXBException(javax.xml.bind.JAXBException) Metadata(gov.usgs.cida.coastalhazards.xml.model.Metadata) JAXBContext(javax.xml.bind.JAXBContext) Unmarshaller(javax.xml.bind.Unmarshaller) Test(org.junit.Test)

Aggregations

Horizsys (gov.usgs.cida.coastalhazards.xml.model.Horizsys)2 Metadata (gov.usgs.cida.coastalhazards.xml.model.Metadata)2 ByteArrayInputStream (java.io.ByteArrayInputStream)2 JAXBContext (javax.xml.bind.JAXBContext)2 JAXBException (javax.xml.bind.JAXBException)2 Unmarshaller (javax.xml.bind.Unmarshaller)2 CRSParameters (gov.usgs.cida.coastalhazards.metadata.CRSParameters)1 InputStream (java.io.InputStream)1 Test (org.junit.Test)1