Exemplo n.º 1
0
    def test_gbif_mapbox_comp(self, taxon_id, tile_ids):
        mpta = TileArray.from_dict({x: Tile(x) for x in tile_ids})
        gbta = TileArray.from_dict({x: Tile(x) for x in tile_ids})

        mapbox_tiles = self.mapbox.get_tiles(mpta)
        gbif_tiles = self.gbif.get_tiles(taxon_id, gbta)
        c_tiles = mapbox_tiles._composite_layer(gbif_tiles)
        c_tiles.name = "gbif+mapbox"
        final_image = c_tiles._composite_all()
        final_image.save(f"gbif+mapbox-{taxon_id}-final.png")
Exemplo n.º 2
0
class TestTile:
    @pytest.mark.parametrize(
        "tile_ids, images, names, tile_size",
        [
            (
                [TileID(0, 0, 0)],
                [create_blank_image(256, "RGB")],
                ["test_tile_creation"],
                256,
            ),
        ],
    )
    def test_creation(self, tile_ids, images, names, tile_size):
        for tid, img, name in zip(tile_ids, images, names):
            tile = Tile(tid=tid, img=img, name=name)
            assert tile.tid == tid
            assert tile.img == img
            assert tile.name == name
            assert tile.resolution == tile_size

    @pytest.mark.parametrize(
        "test_tile, m_tile",
        [
            (
                Tile(TileID(8, 4, 2), img=create_blank_image()),
                mercantile.Tile(z=8, x=4, y=2),
            ),
            (
                Tile(TileID(4, 10, 9), img=create_blank_image()),
                mercantile.Tile(z=4, x=10, y=9),
            ),
        ],
    )
    def test_to_mercantile(self, test_tile, m_tile):
        assert test_tile.asmercantile == m_tile

    @pytest.mark.parametrize(
        "tile, bounds",
        [
            (
                Tile(TileID(4, 10, 9), img=create_blank_image()),
                LatLonBBox(
                    left=45.0,
                    bottom=-40.97989806962013,
                    right=67.5,
                    top=-21.943045533438177,
                ),
            ),
        ],
    )
    def test_tile_bounds(self, tile, bounds):
        assert tile.bounds == bounds
Exemplo n.º 3
0
 def test_creation_constructor(self, tile_ids, images):
     tile_array = TileArray.from_dict(
         {TileID(k): Tile(TileID(k), v)
          for k, v in zip(tile_ids, images)})
     for tid in tile_ids:
         assert tid in tile_array
     pprint(tile_array)
Exemplo n.º 4
0
 def test_creation(self, tile_ids, images, names, tile_size):
     for tid, img, name in zip(tile_ids, images, names):
         tile = Tile(tid=tid, img=img, name=name)
         assert tile.tid == tid
         assert tile.img == img
         assert tile.name == name
         assert tile.resolution == tile_size
Exemplo n.º 5
0
    def _get_tile(self, tile_id: TileID = None, **params) -> Tile:
        """
        Gets a tile for a specific taxon_key.
        Parameters that can be used as per: https://github.com/gbif/pygbif/blob/master/pygbif/maps/map.py
        Raises:
            TypeError: TileID is a required parameter
        Returns:
            Tile: Tile with the downloaded tile image attached to it.
        """
        params["style"] = params.get("style", self.map_defaults["style"])
        params["srs"] = params.get("srs", self.srs)
        # params["format"] = params.get("format", "@1x.png")
        fmt = self.size_map(params.get("tile_size", self.map_defaults["size"]))
        tile_id = params.get("tile_id", tile_id)
        if tile_id is None:
            raise TypeError("tile_id required for map tile lookup.")

        taxon_key = params.get("taxonKey", "None")
        if params.get("tile_size", None):
            params.pop("tile_size")
        url = f"v2/map/occurrence/density/{tile_id.z}/{tile_id.x}/{tile_id.y}{fmt}"
        resp = requests.get(self.base_url + url, params=params)
        print("gurl:", resp.url)
        sc = resp.status_code
        if sc in (200, 304):
            img = imager.image_from_response(resp)
        # the gbif api seems to return this in both error conditions and when there legitimately isn't any data.
        elif sc == 204:
            img = imager.blank("RGBA",
                               (self._tile_size, self._tile_size)), True
        else:
            if self.noisy_http_errors:
                resp.raise_for_status()
            return None
        return Tile(tile_id, img=img, name=f"gbifmap_{taxon_key}")
Exemplo n.º 6
0
 def test_get_tilearray(self, taxon_id, tile_ids_expected_image, map_type):
     tile_ids = tile_ids_expected_image.keys()
     ta = TileArray.from_dict({x: Tile(x) for x in tile_ids})
     ta = self.gbif.get_tiles(taxon_id, ta, mode=map_type)
     print(ta)
     for k, t in ta.items():
         t.save()
         print("IE", k, tile_ids_expected_image[k])
         print("timg", t.img)
Exemplo n.º 7
0
 def download_tile_url(self,
                       tid: TileID,
                       tile_url: str,
                       params: Dict[str, str] = {}) -> Optional[Tile]:
     res = requests.get(self.base_url + tile_url, params=params)
     if res.status_code == 200:
         img = imager.image_from_response(res)
         tile = Tile(tid=tid, img=img, name=self.map_name)
         return tile
     else:
         print(res.status_code, res.url)
         return None
Exemplo n.º 8
0
 def download_tile(self, tile_id: TileID, rsid: str) -> Tile:
     params = {
         "layers": "EBIRD_GRIDS_WS2",
         "format": "image/png",
         "zoom": tile_id.zoom,
         "x": tile_id.x,
         "y": tile_id.y,
         "CQL_FILTER": f"result_set_id='{rsid}'",
     }
     url = self.map_tile_url
     print(f"ebird url: {url}")
     resp = self.rget(url, params=params)
     img = imager.image_from_response(resp)
     return Tile(tile_id, img=img, name=f"ebird-{rsid}")
Exemplo n.º 9
0
 def create_tilearray(self, tids, imgs):
     tile_array = TileArray()
     for tid, img in zip(tids, imgs):
         tile = Tile(tid=tid, img=img)
         tile_array[tid] = tile
     return tile_array