Ejemplo n.º 1
0
  @Test
  public void NetCDFProjectedEnvelopeTest()
      throws NoSuchAuthorityCodeException, FactoryException, IOException, ParseException {
    File mosaic = new File(TestData.file(this, "."), "NetCDFProjection");
    if (mosaic.exists()) {
      FileUtils.deleteDirectory(mosaic);
    }
    assertTrue(mosaic.mkdirs());
    File file = TestData.file(this, "wind.nc");
    FileUtils.copyFileToDirectory(file, mosaic);
    file = new File(mosaic, "wind.nc");
    // Get format

    final NetCDFReader reader = new NetCDFReader(file, null);
    try {
      String[] names = reader.getGridCoverageNames();
      String coverageName = names[0];

      // subsetting the envelope
      final ParameterValue<GridGeometry2D> gg =
          AbstractGridFormat.READ_GRIDGEOMETRY2D.createValue();
      final GeneralEnvelope originalEnvelope = reader.getOriginalEnvelope(coverageName);
      final CoordinateReferenceSystem epsg3857 = CRS.decode("EPSG:3857", true);
      final GeneralEnvelope projectedEnvelope = CRS.transform(originalEnvelope, epsg3857);

      gg.setValue(
          new GridGeometry2D(new GridEnvelope2D(new Rectangle(0, 0, 30, 30)), projectedEnvelope));

      GeneralParameterValue[] values = new GeneralParameterValue[] {gg};
      GridCoverage2D coverage = reader.read(coverageName, values);

      // reader doesn't perform reprojection. It simply transforms reprojected envelope
      // to native envelope so BBOX and CRS should be wgs84
      CoordinateReferenceSystem coverageCRS = coverage.getCoordinateReferenceSystem();
      final int code = CRS.lookupEpsgCode(coverageCRS, false);
      assertEquals(4326, code);
      Extent extent = coverageCRS.getDomainOfValidity();
      Collection<? extends GeographicExtent> geoElements = extent.getGeographicElements();
      GeographicExtent geographicExtent = geoElements.iterator().next();
      GeographicBoundingBoxImpl impl = (GeographicBoundingBoxImpl) geographicExtent;

      // Getting the coverage Envelope for coordinates check
      Envelope coverageEnvelope = coverage.getEnvelope();
      assertTrue(impl.getEastBoundLongitude() >= coverageEnvelope.getMaximum(0));
      assertTrue(impl.getWestBoundLongitude() <= coverageEnvelope.getMinimum(0));
      assertTrue(impl.getNorthBoundLatitude() >= coverageEnvelope.getMaximum(1));
      assertTrue(impl.getSouthBoundLatitude() <= coverageEnvelope.getMinimum(1));

    } catch (Throwable t) {
      throw new RuntimeException(t);
    } finally {
      if (reader != null) {
        try {
          reader.dispose();
        } catch (Throwable t) {
          // Does nothing
        }
      }
    }
  }
Ejemplo n.º 2
0
  /**
   * Test simple Record Marshalling.
   *
   * @throws java.lang.Exception
   */
  @Test
  public void inpsireExtensionUnmarshallingTest() throws Exception {

    String xml =
        "<wms:Capability xmlns:wms=\"http://www.opengis.net/wms\" xmlns:gml=\"http://www.opengis.net/gml/3.2\" xmlns:gmd=\"http://www.isotc211.org/2005/gmd\" xmlns:srv=\"http://www.isotc211.org/2005/srv\" xmlns:gco=\"http://www.isotc211.org/2005/gco\" xmlns:sld=\"http://www.opengis.net/sld\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:inspire_vs=\"http://inspira.europa.eu/networkservice/view/1.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">"
            + '\n'
            + "    <inspire_vs:ExtendedCapabilities>"
            + '\n'
            + "        <inspire_vs:Resourcelocator>"
            + '\n'
            + "            <gmd:linkage>"
            + '\n'
            + "                <gmd:URL>http://javacestpasdlamenthealeau.com</gmd:URL>"
            + '\n'
            + "            </gmd:linkage>"
            + '\n'
            + "        </inspire_vs:Resourcelocator>"
            + '\n'
            + "        <inspire_vs:MetadataUrl>"
            + '\n'
            + "            <gmd:linkage>"
            + '\n'
            + "                <gmd:URL>http://javacestdurocknroll.com</gmd:URL>"
            + '\n'
            + "            </gmd:linkage>"
            + '\n'
            + "        </inspire_vs:MetadataUrl>"
            + '\n'
            + "        <inspire_vs:ResourceType>"
            + '\n'
            + "            <gmd:MD_ScopeCode codeList=\"http://schemas.opengis.net/iso/19139/20070417/resources/Codelist/gmxCodelists.xml#MD_ScopeCode\" codeListValue=\"service\"/>"
            + '\n'
            + "        </inspire_vs:ResourceType>"
            + '\n'
            + "        <inspire_vs:TemporalRefererence>"
            + '\n'
            + "            <gmd:EX_Extent>"
            + '\n'
            + "                <gmd:temporalElement>"
            + '\n'
            + "                    <gmd:EX_TemporalExtent>"
            + '\n'
            + "                        <gmd:extent>"
            + '\n'
            + "                            <gml:TimePeriod>"
            + '\n'
            + "                                <gml:beginPosition>1970-01-02T10:20:00+01:00</gml:beginPosition>"
            + '\n'
            + "                                <gml:endPosition>1970-01-02T10:20:01.000+01:00</gml:endPosition>"
            + '\n'
            + "                            </gml:TimePeriod>"
            + '\n'
            + "                        </gmd:extent>"
            + '\n'
            + "                    </gmd:EX_TemporalExtent>"
            + '\n'
            + "                </gmd:temporalElement>"
            + '\n'
            + "            </gmd:EX_Extent>"
            + '\n'
            + "        </inspire_vs:TemporalRefererence>"
            + '\n'
            + "        <inspire_vs:Conformity>"
            + '\n'
            + "            <gmd:DQ_ConformanceResult>"
            + '\n'
            + "                <gmd:specification>"
            + '\n'
            + "                    <gmd:CI_Citation>"
            + '\n'
            + "                        <gmd:title>"
            + '\n'
            + "                            <gco:CharacterString>European Petroleum Survey Group</gco:CharacterString>"
            + '\n'
            + "                        </gmd:title>"
            + '\n'
            + "                        <gmd:alternateTitle>"
            + '\n'
            + "                            <gco:CharacterString>EPSG</gco:CharacterString>"
            + '\n'
            + "                        </gmd:alternateTitle>"
            + '\n'
            + "                        <gmd:identifier>"
            + '\n'
            + "                            <gmd:MD_Identifier>"
            + '\n'
            + "                                <gmd:code>"
            + '\n'
            + "                                    <gco:CharacterString>EPSG</gco:CharacterString>"
            + '\n'
            + "                                </gmd:code>"
            + '\n'
            + "                            </gmd:MD_Identifier>"
            + '\n'
            + "                        </gmd:identifier>"
            + '\n'
            + "                        <gmd:citedResponsibleParty>"
            + '\n'
            + "                            <gmd:CI_ResponsibleParty>"
            + '\n'
            + "                                <gmd:organisationName>"
            + '\n'
            + "                                    <gco:CharacterString>European Petroleum Survey Group</gco:CharacterString>"
            + '\n'
            + "                                </gmd:organisationName>"
            + '\n'
            + "                                <gmd:contactInfo>"
            + '\n'
            + "                                    <gmd:CI_Contact>"
            + '\n'
            + "                                        <gmd:onlineResource>"
            + '\n'
            + "                                            <gmd:CI_OnlineResource>"
            + '\n'
            + "                                                <gmd:linkage>"
            + '\n'
            + "                                                    <gmd:URL>http://www.epsg.org</gmd:URL>"
            + '\n'
            + "                                                </gmd:linkage>"
            + '\n'
            + "                                                <gmd:function>"
            + '\n'
            + "                                                    <gmd:CI_OnLineFunctionCode codeList=\"http://schemas.opengis.net/iso/19139/20070417/resources/Codelist/gmxCodelists.xml#CI_OnLineFunctionCode\" codeListValue=\"information\"/>"
            + '\n'
            + "                                                </gmd:function>"
            + '\n'
            + "                                            </gmd:CI_OnlineResource>"
            + '\n'
            + "                                        </gmd:onlineResource>"
            + '\n'
            + "                                    </gmd:CI_Contact>"
            + '\n'
            + "                                </gmd:contactInfo>"
            + '\n'
            + "                                <gmd:role>"
            + '\n'
            + "                                    <gmd:CI_RoleCode codeList=\"http://schemas.opengis.net/iso/19139/20070417/resources/Codelist/gmxCodelists.xml#CI_RoleCode\" codeListValue=\"principalInvestigator\"/>"
            + '\n'
            + "                                </gmd:role>"
            + '\n'
            + "                            </gmd:CI_ResponsibleParty>"
            + '\n'
            + "                        </gmd:citedResponsibleParty>"
            + '\n'
            + "                        <gmd:presentationForm>"
            + '\n'
            + "                            <gmd:CI_PresentationFormCode codeList=\"http://schemas.opengis.net/iso/19139/20070417/resources/Codelist/gmxCodelists.xml#CI_PresentationFormCode\" codeListValue=\"tableDigital\"/>"
            + '\n'
            + "                        </gmd:presentationForm>"
            + '\n'
            + "                    </gmd:CI_Citation>"
            + '\n'
            + "                </gmd:specification>"
            + '\n'
            + "                <gmd:explanation>"
            + '\n'
            + "                    <gco:CharacterString>see the referenced specification</gco:CharacterString>"
            + '\n'
            + "                </gmd:explanation>"
            + '\n'
            + "                <gmd:pass>"
            + '\n'
            + "                    <gco:Boolean>true</gco:Boolean>"
            + '\n'
            + "                </gmd:pass>"
            + '\n'
            + "            </gmd:DQ_ConformanceResult>"
            + '\n'
            + "        </inspire_vs:Conformity>"
            + '\n'
            + "        <inspire_vs:MetadataPointOfContact>"
            + '\n'
            + "            <gmd:CI_ResponsibleParty>"
            + '\n'
            + "                <gmd:organisationName>"
            + '\n'
            + "                    <gco:CharacterString>European Petroleum Survey Group</gco:CharacterString>"
            + '\n'
            + "                </gmd:organisationName>"
            + '\n'
            + "                <gmd:contactInfo>"
            + '\n'
            + "                    <gmd:CI_Contact>"
            + '\n'
            + "                        <gmd:onlineResource>"
            + '\n'
            + "                            <gmd:CI_OnlineResource>"
            + '\n'
            + "                                <gmd:linkage>"
            + '\n'
            + "                                    <gmd:URL>http://www.epsg.org</gmd:URL>"
            + '\n'
            + "                                </gmd:linkage>"
            + '\n'
            + "                                <gmd:function>"
            + '\n'
            + "                                    <gmd:CI_OnLineFunctionCode codeList=\"http://schemas.opengis.net/iso/19139/20070417/resources/Codelist/gmxCodelists.xml#CI_OnLineFunctionCode\" codeListValue=\"information\"/>"
            + '\n'
            + "                                </gmd:function>"
            + '\n'
            + "                            </gmd:CI_OnlineResource>"
            + '\n'
            + "                        </gmd:onlineResource>"
            + '\n'
            + "                    </gmd:CI_Contact>"
            + '\n'
            + "                </gmd:contactInfo>"
            + '\n'
            + "                <gmd:role>"
            + '\n'
            + "                    <gmd:CI_RoleCode codeList=\"http://schemas.opengis.net/iso/19139/20070417/resources/Codelist/gmxCodelists.xml#CI_RoleCode\" codeListValue=\"principalInvestigator\"/>"
            + '\n'
            + "                </gmd:role>"
            + '\n'
            + "            </gmd:CI_ResponsibleParty>"
            + '\n'
            + "        </inspire_vs:MetadataPointOfContact>"
            + '\n'
            + "        <inspire_vs:MetadataDate>"
            + '\n'
            + "            <gco:Date>1970-01-02</gco:Date>"
            + '\n'
            + "        </inspire_vs:MetadataDate>"
            + '\n'
            + "        <inspire_vs:SpatialDataService>"
            + '\n'
            + "            <srv:serviceType>"
            + '\n'
            + "                <gco:LocalName>view</gco:LocalName>"
            + '\n'
            + "            </srv:serviceType>"
            + '\n'
            + "        </inspire_vs:SpatialDataService>"
            + '\n'
            + "        <inspire_vs:InpireKeywords>"
            + '\n'
            + "            <gmd:keyword>"
            + '\n'
            + "                <gco:CharacterString>something</gco:CharacterString>"
            + '\n'
            + "            </gmd:keyword>"
            + '\n'
            + "        </inspire_vs:InpireKeywords>"
            + '\n'
            + "        <inspire_vs:Languages>"
            + '\n'
            + "            <inspire_vs:Language>FR</inspire_vs:Language>"
            + '\n'
            + "            <inspire_vs:Language default=\"true\">EN</inspire_vs:Language>"
            + '\n'
            + "        </inspire_vs:Languages>"
            + '\n'
            + "        <inspire_vs:currentLanguage>FR</inspire_vs:currentLanguage>"
            + '\n'
            + "    </inspire_vs:ExtendedCapabilities>"
            + '\n'
            + "</wms:Capability>"
            + '\n';

    ExtendedCapabilitiesType ext = new ExtendedCapabilitiesType();
    NameFactory nameFactory = new DefaultNameFactory();
    ObjectFactory factory = new ObjectFactory();

    ext.setResourceType(ScopeCode.SERVICE);

    ext.setSpatialDataService(new ServiceType(nameFactory.createLocalName(null, "view")));

    ext.setResourcelocator(
        new DefaultOnlineResource(URI.create("http://javacestpasdlamenthealeau.com")));

    ext.setMetadataUrl(new DefaultOnlineResource(URI.create("http://javacestdurocknroll.com")));

    DefaultExtent extent = new DefaultExtent();
    DefaultTemporalExtent tempExt = new DefaultTemporalExtent();

    NamedIdentifier periodName = new NamedIdentifier(Citations.CRS, "period");
    final Map<String, Object> periodProp = new HashMap<>();
    periodProp.put(IdentifiedObject.NAME_KEY, periodName);
    NamedIdentifier instantName = new NamedIdentifier(Citations.CRS, "period instant");
    final Map<String, Object> properties = new HashMap<>();
    properties.put(IdentifiedObject.NAME_KEY, instantName);

    DefaultPeriod period =
        new DefaultPeriod(
            periodProp,
            new DefaultInstant(properties, new Date(120000000)),
            new DefaultInstant(properties, new Date(120001000)));

    tempExt.setExtent(period);
    extent.setTemporalElements(Arrays.asList(tempExt));
    ext.setTemporalRefererence(extent);

    DefaultResponsibleParty rp = new DefaultResponsibleParty(Role.PRINCIPAL_INVESTIGATOR);
    rp.setOrganisationName(new SimpleInternationalString("European Petroleum Survey Group"));
    DefaultOnlineResource or = new DefaultOnlineResource(URI.create("http://www.epsg.org"));
    or.setFunction(OnLineFunction.INFORMATION);
    DefaultContact ct = new DefaultContact(or);
    rp.setContactInfo(ct);
    DefaultCitation citation = new DefaultCitation();
    citation.setCitedResponsibleParties(Arrays.asList(rp));
    citation.setTitle(rp.getOrganisationName());
    citation.setAlternateTitles(Arrays.asList(new SimpleInternationalString("EPSG")));
    citation.setIdentifiers(Arrays.asList(new DefaultIdentifier("EPSG")));
    citation.setPresentationForms(Arrays.asList(PresentationForm.TABLE_DIGITAL));
    DefaultConformanceResult cresult =
        new DefaultConformanceResult(
            citation, new DefaultInternationalString("see the referenced specification"), true);
    ext.setConformity(cresult);

    ResponsibleParty party =
        DefaultResponsibleParty.castOrCopy(
            Citations.EPSG.getCitedResponsibleParties().iterator().next());
    ext.setMetadataPointOfContact(party);

    ext.setMetadataDate(new Date(82800000));

    DefaultKeywords key = new DefaultKeywords(new SimpleInternationalString("something"));
    ext.setInpireKeywords(key);

    List<LanguageType> langs = new ArrayList<>();
    langs.add(new LanguageType("FR"));
    langs.add(new LanguageType("EN", true));
    LanguagesType languages = new LanguagesType(langs);
    ext.setLanguages(languages);

    ext.setCurrentLanguage("FR");

    JAXBElement<ExtendedCapabilitiesType> jbExtendedCap = factory.createExtendedCapabilities(ext);
    Capability expResult = new Capability(null, null, null, jbExtendedCap);

    final Object unmarshalled = unmarshaller.unmarshal(new StringReader(xml));

    assertNotNull(unmarshalled);

    assertTrue(unmarshalled instanceof Capability);

    Capability result = (Capability) unmarshalled;

    // The Unmarshaller replaced automatically the DefaultInternationalString by a
    // SimpleInternationalString because it detected that there is only one locale.
    // Perform the same change in our expected result in order to allow comparison.
    cresult.setExplanation(new SimpleInternationalString(cresult.getExplanation().toString()));

    final ExtendedCapabilitiesType expCapabilities = expResult.getInspireExtendedCapabilities();
    final ExtendedCapabilitiesType capabilities = result.getInspireExtendedCapabilities();
    final ConformanceResult expConformity = expCapabilities.getConformity();
    final ConformanceResult conformity = capabilities.getConformity();
    final Citation expSpecification = expConformity.getSpecification();
    final Citation specification = conformity.getSpecification();
    final Extent expTemporal = expCapabilities.getTemporalRefererence();
    final Extent temporal = capabilities.getTemporalRefererence();
    final TemporalExtent expTemporalExtent = getSingleton(expTemporal.getTemporalElements());
    final TemporalExtent temporalExtent = getSingleton(temporal.getTemporalElements());
    final Period expExtentPeriod = (Period) expTemporalExtent.getExtent();
    final Period extentPeriod = (Period) temporalExtent.getExtent();

    assertEquals(expConformity.getExplanation().toString(), conformity.getExplanation().toString());
    assertEquals(expSpecification.getCollectiveTitle(), specification.getCollectiveTitle());
    assertEquals(
        expSpecification.getCitedResponsibleParties(), specification.getCitedResponsibleParties());
    assertEquals(expSpecification.getAlternateTitles(), specification.getAlternateTitles());
    assertEquals(expSpecification, specification);
    assertEquals(expConformity, conformity);
    assertEquals(expCapabilities.getResourceType(), capabilities.getResourceType());
    assertEquals(expTemporal.getDescription(), temporal.getDescription());
    assertEquals(expExtentPeriod.getBeginning().getDate(), extentPeriod.getBeginning().getDate());
    assertEquals(expExtentPeriod.getEnding().getDate(), extentPeriod.getEnding().getDate());
    if (expExtentPeriod.getClass() == extentPeriod.getClass()) {
      /*
       * The time period created by this test case is an instance of org.geotoolkit.temporal.object.DefaultPeriod
       * while the unmarshalled period is an instance of org.geotoolkit.gml.xml.v311.TimePeriodType. This is okay
       * since DefaultPeriod does not have JAXB annotation. But it prevents us to compare the objects further.
       */
      assertEquals(expExtentPeriod, extentPeriod);
      assertEquals(expTemporalExtent, temporalExtent);
      assertEquals(expTemporal, temporal);
      assertEquals(expCapabilities, capabilities);
      assertEquals(expResult, result);
    }
  }