Пример #1
0
 def test_vectors_aggregate_query_complex(self):
     wkt = 'POLYGON((-76.65 40.10, -76.65 40.14, -76.55 40.14, -76.55 40.10, -76.65 40.10))'
     child_agg = AggregationDef(agg_type='date_hist', value='M')
     aggs = AggregationDef(agg_type='geohash',
                           value='4',
                           children=child_agg)
     v = Vectors()
     query = 'item_type:tweet'
     start_date = 'now-6M'
     end_date = 'now'
     result = v.aggregate_query(wkt,
                                aggs,
                                index=None,
                                query=query,
                                start_date=start_date,
                                end_date=end_date)
     assert len(result) == 1
     assert 'name' in result[0]
     assert result[0]['name'] == 'geohash:4'
     assert 'terms' in result[0]
     terms = result[0]['terms']
     assert len(terms) == 1
     assert terms[0]['term'] == 'dr1s'
     assert len(terms[0]['aggregations']) == 1
     assert len(terms[0]['aggregations'][0]['terms']) == 4
Пример #2
0
    def __init__(self, **kwargs):
        interface = Auth(**kwargs)
        self.gbdx_connection = interface.gbdx_connection
        self.root_url = interface.root_url
        self.logger = interface.logger

        # create and store an instance of the GBDX s3 client
        self.s3 = S3()

        # create and store an instance of the GBDX Ordering Client
        self.ordering = Ordering()

        # create and store an instance of the GBDX Catalog Client
        self.catalog = Catalog()

        # create and store an instance of the GBDX Workflow Client
        self.workflow = Workflow()

        # create and store an instance of the Idaho Client
        self.idaho = Idaho()

        self.vectors = Vectors()

        self.catalog_image = CatalogImage
        self.idaho_image = IdahoImage

        self.task_registry = TaskRegistry()
Пример #3
0
    def __init__(self,
                 cat_id,
                 band_type="MS",
                 node="toa_reflectance",
                 **kwargs):
        self.interface = Auth()
        self.vectors = Vectors()
        self._gid = cat_id
        self._band_type = band_type
        self._pansharpen = kwargs.get('pansharpen', False)
        self._acomp = kwargs.get('acomp', False)
        if self._pansharpen:
            self._node_id = 'pansharpened'
        else:
            self._node_id = node
        self._level = kwargs.get('level', 0)
        if 'proj' in kwargs:
            self._proj = kwargs['proj']
        if '_ipe_graphs' in kwargs:
            self._ipe_graphs = kwargs['_ipe_graphs']
        else:
            self._ipe_graphs = self._init_graphs()

        super(CatalogImage, self).__init__(self._ipe_graphs,
                                           cat_id,
                                           node=self._node_id,
                                           **kwargs)
Пример #4
0
    def __init__(self, **kwargs):
        interface = Auth(**kwargs)
        self.gbdx_connection = interface.gbdx_connection
        self.root_url = interface.root_url
        self.logger = interface.logger

        # create and store an instance of the GBDX s3 client
        self.s3 = S3()

        # create and store an instance of the GBDX Ordering Client
        self.ordering = Ordering()

        # create and store an instance of the GBDX Catalog Client
        self.catalog = Catalog()

        # create and store an instance of the GBDX Workflow Client
        self.workflow = Workflow()

        # create and store an instance of the Idaho Client
        self.idaho = Idaho()

        self.vectors = Vectors()

        self.catalog_image = CatalogImage
        self.idaho_image = IdahoImage
        self.landsat_image = LandsatImage
        self.sentinel2 = Sentinel2
        self.tms_image = TmsImage
        self.dem_image = DemImage
        self.wv03_vnir = WV03_VNIR
        self.wv02 = WV02
        self.ge01 = GE01
        self.s3_image = S3Image

        self.task_registry = TaskRegistry()
Пример #5
0
 def _find_parts(cat_id, band_type):
     vectors = Vectors()
     aoi = wkt.dumps(box(-180, -90, 180, 90))
     query = "item_type:IDAHOImage AND attributes.catalogID:{} " \
             "AND attributes.colorInterpretation:{}".format(cat_id, band_types[band_type])
     return sorted(vectors.query(aoi, query=query),
                   key=lambda x: x['properties']['id'])
Пример #6
0
    def _build_standard_products(idaho_id,
                                 proj,
                                 bucket=None,
                                 gsd=None,
                                 acomp=False):
        if bucket is None:
            vectors = Vectors()
            aoi = wkt.dumps(box(-180, -90, 180, 90))
            query = "item_type:IDAHOImage AND id:{}".format(idaho_id)
            result = vectors.query(aoi, query=query)
            if len(result):
                bucket = result[0]["properties"]["attributes"][
                    "tileBucketName"]

        dn_op = ipe.IdahoRead(bucketName=bucket,
                              imageId=idaho_id,
                              objectStore="S3")
        params = ortho_params(proj, gsd=gsd)

        graph = {
            "1b":
            dn_op,
            "ortho":
            ipe.Orthorectify(dn_op, **params),
            "acomp":
            ipe.Format(ipe.Orthorectify(ipe.Acomp(dn_op), **params),
                       dataType="4"),
            "toa_reflectance":
            ipe.Format(ipe.Orthorectify(ipe.TOAReflectance(dn_op), **params),
                       dataType="4")
        }

        return graph
Пример #7
0
def vector_services_query(query, aoi=None, **kwargs):
    vectors = Vectors()
    if not aoi:
        aoi = wkt.dumps(box(-180, -90, 180, 90))
    _parts = sorted(vectors.query(aoi, query=query, **kwargs),
                    key=lambda x: x['properties']['id'])
    return _parts
Пример #8
0
    def test_vectors_search_index(self):
        v = Vectors()
        aoi = "POLYGON((17.75390625 25.418470119273117,24.08203125 25.418470119273117,24.08203125 19.409611549990895,17.75390625 19.409611549990895,17.75390625 25.418470119273117))"
        results = v.query(aoi,
                          query="item_type:WV03",
                          index="vector-dgcatalog-2016")

        assert len(results) == 140
Пример #9
0
 def test_vectors_aggregate_query_agg_def(self):
     wkt = 'POLYGON((-76.65 40.10, -76.65 40.14, -76.55 40.14, -76.55 40.10, -76.65 40.10))'
     aggs = AggregationDef(agg_type='terms', value='ingest_source')
     v = Vectors()
     result = v.aggregate_query(wkt, aggs, index=None)
     assert len(result) == 1
     assert 'name' in result[0]
     assert result[0]['name'] == 'terms:ingest_source'
     assert 'terms' in result[0]
     assert len(result[0]['terms']) == 6
Пример #10
0
 def test_vectors_aggregate_query_with_defined_index(self):
     wkt = 'POLYGON((-76.65 40.10, -76.65 40.14, -76.55 40.14, -76.55 40.10, -76.65 40.10))'
     aggs = 'terms:item_type'
     v = Vectors()
     result = v.aggregate_query(wkt, aggs, index='read-vector-osm-*')
     assert len(result) == 1
     assert 'name' in result[0]
     assert result[0]['name'] == 'terms:item_type'
     assert 'terms' in result[0]
     assert len(result[0]['terms']) == 10
Пример #11
0
 def _image_by_type(cls, cat_id, **kwargs):
     vectors = Vectors()
     aoi = wkt.dumps(box(-180, -90, 180, 90))
     query = "item_type:GBDXCatalogRecord AND attributes.catalogID:{}".format(cat_id)
     query += " AND NOT item_type:IDAHOImage AND NOT item_type:DigitalGlobeAcquisition"
     result = vectors.query(aoi, query=query, count=1)
     if len(result) == 0:
         raise Exception('Could not find a catalog entry for the given id: {}'.format(cat_id))
     else:
         return cls._image_class(cat_id, result[0], **kwargs)
Пример #12
0
    def test_vectors_search_iteratively(self):
        v = Vectors()
        aoi = "POLYGON((17.75390625 25.418470119273117,24.08203125 25.418470119273117,24.08203125 19.409611549990895,17.75390625 19.409611549990895,17.75390625 25.418470119273117))"
        g = v.query_iteratively(aoi, query="item_type:WV03", index=None, count=1000)

        count = 0
        for vector in g:
          count += 1

        assert isinstance(g, types.GeneratorType)
        assert count == 310
Пример #13
0
    def test_vectors_create_from_wkt(self):
        v = Vectors(self.gbdx)

        aoi = "POLYGON((0 3,3 3,3 0,0 0,0 3))"
        result = v.create_from_wkt(aoi,
                                   item_type='test_type_123',
                                   ingest_source='api',
                                   attribute1='nothing',
                                   attribute2='something',
                                   number=6,
                                   date='2015-06-06')
        assert result == '/insight-vector/api/vector/vector-web-s/b1af66c3-2e41-4696-9924-6ab264336692'
Пример #14
0
    def _find_parts(cat_id, band_type):
        def vendor_id(rec):
          _id = rec['properties']['attributes']['vendorDatasetIdentifier']
          return _id.split(':')[1].split('_')[0]

        vectors = Vectors()
        aoi = wkt.dumps(box(-180, -90, 180, 90))
        query = "item_type:IDAHOImage AND attributes.catalogID:{} " \
                "AND attributes.colorInterpretation:{}".format(cat_id, band_types[band_type])
        _parts = sorted(vectors.query(aoi, query=query), key=lambda x: x['properties']['id'])
        if not len(_parts):
            raise MissingIdahoImages('Unable to find IDAHO imagery in the catalog: {}'.format(query))
        _id = vendor_id(_parts[0])
        return [p for p in _parts if vendor_id(p) == _id]
Пример #15
0
 def _image_by_type(cls, cat_id, **kwargs):
     if cat_id is None:
         try:
             return IpeImage(GraphMeta(**kwargs))
         except KeyError:
             raise ValueError("Catalog Images must be initiated by a Catalog Id or an RDA Graph Id")
     vectors = Vectors()
     aoi = wkt.dumps(box(-180, -90, 180, 90))
     query = "item_type:GBDXCatalogRecord AND attributes.catalogID:{}".format(cat_id)
     query += " AND NOT item_type:IDAHOImage AND NOT item_type:DigitalGlobeAcquisition"
     result = vectors.query(aoi, query=query, count=1)
     if len(result) == 0:
         raise Exception('Could not find a catalog entry for the given id: {}'.format(cat_id))
     else:
         return cls._image_class(cat_id, result[0], **kwargs)
Пример #16
0
    def __init__(self, **kwargs):
        host = kwargs.get('host') if kwargs.get('host') else 'geobigdata.io'
        self.root_url = 'https://%s' % host

        if (kwargs.get('username') and kwargs.get('password')
                and kwargs.get('client_id') and kwargs.get('client_secret')):
            self.gbdx_connection = gbdx_auth.session_from_kwargs(**kwargs)
        elif kwargs.get('gbdx_connection'):
            # Pass in a custom gbdx connection object, for testing purposes
            self.gbdx_connection = kwargs.get('gbdx_connection')
        else:
            # This will throw an exception if your .ini file is not set properly
            self.gbdx_connection = gbdx_auth.get_session(
                kwargs.get('config_file'))

        # create a logger
        # for now, just log to the console. We'll replace all the 'print' statements
        # with at least logger.info or logger.debug statements
        # later, we can log to a service, file, or some other aggregator
        self.logger = logging.getLogger('gbdxtools')
        self.logger.setLevel(logging.ERROR)
        console_handler = logging.StreamHandler()
        console_handler.setLevel(logging.ERROR)
        formatter = logging.Formatter(
            '%(asctime)s - %(name)s - %(levelname)s - %(message)s')
        console_handler.setFormatter(formatter)
        self.logger.addHandler(console_handler)
        self.logger.info('Logger initialized')

        # create and store an instance of the GBDX s3 client
        self.s3 = S3(self)

        # create and store an instance of the GBDX Ordering Client
        self.ordering = Ordering(self)

        # create and store an instance of the GBDX Catalog Client
        self.catalog = Catalog(self)

        # create and store an instance of the GBDX Workflow Client
        self.workflow = Workflow(self)

        # create and store an instance of the Idaho Client
        self.idaho = Idaho(self)

        self.vectors = Vectors(self)

        self.task_registry = TaskRegistry(self)
Пример #17
0
    def test_vectors_create_multiple(self):
        v = Vectors(self.gbdx)
        results = v.create([{
            "type": "Feature",
                "geometry": {
                    "type": "Point",
                    "coordinates": [1.0,1.0]
                },
                "properties": {
                    "text" : "item text",
                    "name" : "item name",
                    "item_type" : "type",
                    "ingest_source" : "source",
                    "attributes" : {
                       "latitude" : 1,
                       "institute_founded" : "2015-07-17",
                       "mascot" : "moth"
                    }
                }
          },
          {
            "type": "Feature",
                "geometry": {
                    "type": "Point",
                    "coordinates": [1.0,1.0]
                },
                "properties": {
                    "text" : "item text",
                    "name" : "item name",
                    "item_type" : "type",
                    "ingest_source" : "source",
                    "attributes" : {
                       "latitude" : 1,
                       "institute_founded" : "2015-07-17",
                       "mascot" : "asdfadsfadf"
                    }
                }
          }])

        assert len(results) == 2
Пример #18
0
    def test_vectors_create_single(self):
        v = Vectors(self.gbdx)
        results = v.create({
            "type": "Feature",
                "geometry": {
                    "type": "Point",
                    "coordinates": [1.0,1.0]
                },
                "properties": {
                    "text" : "item text",
                    "name" : "item name",
                    "item_type" : "type",
                    "ingest_source" : "source",
                    "attributes" : {
                       "latitude" : 1,
                       "institute_founded" : "2015-07-17",
                       "mascot" : "moth"
                    }
                }
          })

        for result in results:
            assert result == '/insight-vector/api/vector/vector-web-s/ce0699f3-bef8-402f-a18e-d149dc2f5f90'
Пример #19
0
    def test_vectors_search_paging(self):
        v = Vectors()
        aoi = "POLYGON ((180 -90, 180 90, -180 90, -180 -90, 180 -90))"
        results = v.query(aoi, query="item_type:WV03_VNIR", index=None, count=1010)

        assert len(results) == 1010
Пример #20
0
    def test_vectors_search_count_equal_to_num_records(self):
        v = Vectors()
        aoi = "POLYGON((17.75390625 25.418470119273117,24.08203125 25.418470119273117,24.08203125 19.409611549990895,17.75390625 19.409611549990895,17.75390625 25.418470119273117))"
        results = v.query(aoi, query="item_type:WV03", index=None, count=310)

        assert len(results) == 310
Пример #21
0
 def test_init(self):
     c = Vectors()
     self.assertIsInstance(c, Vectors)
Пример #22
0
    def test_vectors_search(self):
        v = Vectors(self.gbdx)
        aoi = "POLYGON((17.75390625 25.418470119273117,24.08203125 25.418470119273117,24.08203125 19.409611549990895,17.75390625 19.409611549990895,17.75390625 25.418470119273117))"
        results = v.query(aoi, query="item_type:WV03")

        assert len(results) == 100
Пример #23
0
 def test_init(self):
     c = Vectors(self.gbdx)
     self.assertTrue(isinstance(c, Vectors))