예제 #1
0
def test_providers():
    # NOTE: only tests they download, does not check pixel values
    w, s, e, n = (
        -106.6495132446289,
        25.845197677612305,
        -93.50721740722656,
        36.49387741088867,
    )
    for provider in [
        ctx.providers.OpenStreetMap.Mapnik,
        ctx.providers.Stamen.Toner,
        ctx.providers.NASAGIBS.ViirsEarthAtNight2012,
    ]:
        ctx.bounds2img(w, s, e, n, 4, source=provider, ll=True)
예제 #2
0
def test_url():
    # NOTE: only tests they download, does not check pixel values
    w, s, e, n = (
        -106.6495132446289,
        25.845197677612305,
        -93.50721740722656,
        36.49387741088867,
    )
    ctx.bounds2img(w,
                   s,
                   e,
                   n,
                   4,
                   url=ctx.providers.OpenStreetMap.Mapnik,
                   ll=True)
def add_basemap(ax, zoom, url='httpS://t1.data.amsterdam.nl/topo_wm_zw/tileZ/tileX/tileY.png',
               alpha=.5):
    xmin, xmax, ymin, ymax = ax.axis()
    basemap, extent = ctx.bounds2img(xmin, ymin, xmax, ymax, zoom=zoom, url=url)
    ax.imshow(basemap, extent=extent, interpolation='bilinear', alpha=alpha)
    # restore original x/y limits
    ax.axis((xmin, xmax, ymin, ymax))
예제 #4
0
파일: plot.py 프로젝트: friedrichknuth/bare
def add_ctx_basemap(ax,
                    zoom=15,
                    url='https://mt1.google.com/vt/lyrs=s&x={x}&y={y}&z={z}',
                    buffer=0):
    """
    OpenTopoMap       = 'https://tile.opentopomap.org/{Z}/{X}/{Y}.png'
    OpenStreetMap     = 'http://tile.openstreetmap.org/{Z}/{X}/{Y}.png'
    GoogleHybrid      = 'https://mt1.google.com/vt/lyrs=y&x={X}&y={Y}&z={Z}'
    GoogleSatellite   = 'https://mt1.google.com/vt/lyrs=s&x={X}&y={Y}&z={Z}'
    GoogleRoad        = 'https://mt1.google.com/vt/lyrs=m&x={X}&y={Y}&z={Z}'
    GoogleTerrain     = 'http://mt0.google.com/vt/lyrs=p&hl=en&x={X}&y={Y}&z={Z}'
    GoogleTerrainOnly = 'http://mt0.google.com/vt/lyrs=t&hl=en&x={X}&y={Y}&z={Z}'
    ESRIImagery       = 'https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{Z}/{Y}/{X}.jpg'
    Wikimedia         = 'https://maps.wikimedia.org/osm-intl/{Z}/{X}/{Y}@2x.png'
    """

    xmin, xmax, ymin, ymax = ax.axis()
    xmin = xmin - buffer
    xmax = xmax + buffer
    ymin = ymin - buffer
    ymax = ymax + buffer

    basemap, extent = ctx.bounds2img(xmin,
                                     ymin,
                                     xmax,
                                     ymax,
                                     zoom=zoom,
                                     url=url)
    ax.imshow(basemap, extent=extent, interpolation='bilinear')
    # restore original x/y limits
    ax.axis((xmin, xmax, ymin, ymax))
예제 #5
0
def add_basemap(ax,
                zoom,
                url='https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}.png',
                ll=False):
    """
    Adds basemap background to geometry. Make sure to convert geometry to epsg 3857 beforehand.

    :param ax: matplotlib axes
    :param zoom: int zoom level, usually between 5-19
    :param url: string Tile URL, with placeholders TileZ, tileX, tileY
    :param ll: bool: are coordinates assumed to be lon/lat as opposed to Spherical Mercator. Default False
    :return: None
    """
    xmin, xmax, ymin, ymax = ax.axis()
    basemap, extent = ctx.bounds2img(xmin,
                                     ymin,
                                     xmax,
                                     ymax,
                                     zoom=zoom,
                                     url=url,
                                     ll=ll)
    ax.imshow(basemap, extent=extent, interpolation='bilinear')
    # restore original x/y limits
    ax.axis((xmin, xmax, ymin, ymax))
    ax.set_axis_off()
예제 #6
0
def add_basemap(ax, zoom, url='http://tile.stamen.com/terrain/tileZ/tileX/tileY.png'):
    #xmin, xmax, ymin, ymax = ax.axis()
    xmin, xmax, ymin, ymax = -7925000, -7895000, 5195000, 5220000
    basemap, extent = ctx.bounds2img(xmin, ymin, xmax, ymax, zoom=zoom, url=url)
    ax.imshow(basemap, extent=extent, interpolation='bilinear')
    # restore original x/y limits
    ax.axis((xmin, xmax, ymin, ymax))
예제 #7
0
def test_sources():
    # NOTE: only tests they download, does not check pixel values
    w, s, e, n = (-106.6495132446289, 25.845197677612305, 
            -93.50721740722656, 36.49387741088867)
    sources = [i for i in dir(tilers) if i[0] != '_']
    for src in sources:
        img, ext = ctx.bounds2img(w, s, e, n, 4, ll=True)
예제 #8
0
def test_deprecated_url_format():
    old_url = "http://a.tile.openstreetmap.org/tileZ/tileX/tileY.png"
    new_url = "http://a.tile.openstreetmap.org/{z}/{x}/{y}.png"

    w, s, e, n = (
        -106.6495132446289,
        25.845197677612305,
        -93.50721740722656,
        36.49387741088867,
    )

    with pytest.warns(FutureWarning, match="The url format using 'tileX'"):
        img1, ext1 = ctx.bounds2img(w, s, e, n, 4, source=old_url, ll=True)

    img2, ext2 = ctx.bounds2img(w, s, e, n, 4, source=new_url, ll=True)
    assert_allclose(img1, img2)
    assert_allclose(ext1, ext2)
예제 #9
0
def get_basemap(ax, zoom, url='http://tile.stamen.com/terrain/tileZ/tileX/tileY.png'):

   """Helper function to add a basemap for the plot"""

   xmin, xmax, ymin, ymax = ax.axis()

   basemap, extent = ctx.bounds2img(xmin, ymin, xmax, ymax, zoom=zoom, url=url)

   return basemap, extent
예제 #10
0
파일: test.py 프로젝트: dingwu55/gisLearn
def add_basemap(ax, zoom, url):
    xmin, xmax, ymin, ymax = ax.axis()
    basemap, extent = ctx.bounds2img(xmin,
                                     ymin,
                                     xmax,
                                     ymax,
                                     zoom=zoom,
                                     url=url)
    ax.imshow(basemap, extent=extent, interpolation='bilinear')
    ax.axis((xmin, xmax, ymin, ymax))
예제 #11
0
def add_basemap(ax, zoom, url='http://tile.stamen.com/terrain/tileZ/tileX/tileY.png'):
    """
    Function to add an underlay basemap to geopandas plot. 

    Necessary if version of contextily does not contain function.
    """
    xmin, xmax, ymin, ymax = ax.axis()
    basemap, extent = ctx.bounds2img(xmin, ymin, xmax, ymax, zoom=zoom, url=url)
    ax.imshow(basemap, extent=extent, interpolation='bilinear')
    # restore original x/y limits
    ax.axis((xmin, xmax, ymin, ymax))
예제 #12
0
파일: plots.py 프로젝트: mhdella/ding0
 def plot_background_map(ax):
     url = ctx.sources.ST_TONER_LITE
     xmin, xmax, ymin, ymax = ax.axis()
     basemap, extent = ctx.bounds2img(xmin,
                                      ymin,
                                      xmax,
                                      ymax,
                                      zoom=12,
                                      url=url)
     ax.imshow(basemap, extent=extent, interpolation='bilinear', zorder=0)
     ax.axis((xmin, xmax, ymin, ymax))
예제 #13
0
def test_bounds2img():
    w, s, e, n = (-106.6495132446289, 25.845197677612305, -93.50721740722656,
                  36.49387741088867)
    img, ext = ctx.bounds2img(w, s, e, n, zoom=4, ll=True)
    solu = (-12523442.714243276, -10018754.171394622, 2504688.5428486555,
            5009377.085697309)
    for i, j in zip(ext, solu):
        assert round(i - j, TOL) == 0
    assert img[100, 100, :].tolist() == [230, 229, 188]
    assert img[100, 200, :].tolist() == [156, 180, 131]
    assert img[200, 100, :].tolist() == [230, 225, 189]
예제 #14
0
def add_basemap(ax,
                zoom,
                url='http://tile.stamen.com/terrain/tileZ/tileX/tileY.png'):
    xmin, xmax, ymin, ymax = ax.axis()
    basemap, extent = ctx.bounds2img(xmin,
                                     ymin,
                                     xmax,
                                     ymax,
                                     zoom=zoom,
                                     url=url)
    ax.imshow(basemap, extent=extent, interpolation='bilinear')
    ax.axis((xmin, xmax, ymin, ymax))
예제 #15
0
def add_basemap(ax,
                zoom=15,
                url='http://tile.stamen.com/toner/tileZ/tileX/tileY.png'):
    xmin, xmax, ymin, ymax = ax.axis()
    basemap, extent = ctx.bounds2img(xmin,
                                     ymin,
                                     xmax,
                                     ymax,
                                     zoom=zoom,
                                     url=url)
    ax.imshow(basemap, extent=extent, interpolation='bilinear')
    # restore original x/y limits
    ax.axis((xmin, xmax, ymin, ymax))
예제 #16
0
def add_ctx_basemap(ax,
                    zoom=15,
                    url='https://mt1.google.com/vt/lyrs=s&x={x}&y={y}&z={z}'):
    xmin, xmax, ymin, ymax = ax.axis()
    basemap, extent = ctx.bounds2img(xmin,
                                     ymin,
                                     xmax,
                                     ymax,
                                     zoom=zoom,
                                     url=url)
    ax.imshow(basemap, extent=extent, interpolation='bilinear')
    # restore original x/y limits
    ax.axis((xmin, xmax, ymin, ymax))
예제 #17
0
파일: utils.py 프로젝트: deeplook/notebooks
def add_basemap(ax, zoom, url='http://tile.stamen.com/terrain/tileZ/tileX/tileY.png'):
    # Special thanks to Prof. Martin Christen at FHNW.ch in Basel for
    # his GIS-Hack to make the output scales show proper lat/lon values!
    xmin, xmax, ymin, ymax = ax.axis()
    basemap, extent = ctx.bounds2img(xmin, ymin, xmax, ymax, zoom=zoom, ll=True, url=url)
    
    # calculate extent from WebMercator to WGS84
    xmin84, ymin84 = Mercator2WGS84(extent[0], extent[2])
    xmax84, ymax84 = Mercator2WGS84(extent[1], extent[3])
    extentwgs84 = (xmin84, xmax84, ymin84, ymax84)
    
    ax.imshow(basemap, extent=extentwgs84, interpolation='bilinear')
    # restore original x/y limits
    ax.axis((xmin, xmax, ymin, ymax))
예제 #18
0
def add_basemap(
        ax,
        zoom,
        url='http://tiles.kartat.kapsi.fi/taustakartta/tileZ/tileX/tileY.png'):
    xmin, xmax, ymin, ymax = ax.axis()
    basemap, extent = ctx.bounds2img(xmin,
                                     ymin,
                                     xmax,
                                     ymax,
                                     zoom=zoom,
                                     url=url)
    ax.imshow(basemap, extent=extent, interpolation='bilinear')
    # restore original x/y limits
    ax.axis((xmin, xmax, ymin, ymax))
예제 #19
0
def test_plot_map():
    # Place as a search
    loc = ctx.Place(SEARCH, zoom_adjust=ADJUST)
    w, e, s, n = loc.bbox_map
    ax = ctx.plot_map(loc)

    assert ax.get_title() == loc.place
    ax = ctx.plot_map(loc.im, loc.bbox)
    assert_array_almost_equal(loc.bbox, ax.images[0].get_extent())

    # Place as an image
    img, ext = ctx.bounds2img(w, s, e, n, zoom=10)
    ax = ctx.plot_map(img, ext)
    assert_array_almost_equal(ext, ax.images[0].get_extent())
예제 #20
0
def add_basemap(ax,
                zoom,
                url='http://tile.stamen.com/terrain/tileZ/tileX/tileY.png'):
    xmin, xmax, ymin, ymax = ax.axis()
    basemap, extent = ctx.bounds2img(xmin,
                                     ymin,
                                     xmax,
                                     ymax,
                                     zoom=zoom,
                                     url=url)
    ax.imshow(basemap, extent=extent, interpolation='bilinear')
    # restore original x/y limits
    ax.axis((xmin, xmax, ymin, ymax))
    ax = df.plot(figsize=(10, 10), alpha=0.5, edgecolor='k')
def add_basemap(
    ax,
    zoom,
    url='http://mt0.google.com/vt/lyrs=s&hl=en&x={x}&y={y}&z={z}'
):  #url='http://tile.stamen.com/terrain/{z}/{x}/{y}.png'):#url='http://tile.stamen.com/terrain/tileZ/tileX/tileY.png'):
    xmin, xmax, ymin, ymax = ax.axis()
    basemap, extent = ctx.bounds2img(xmin,
                                     ymin,
                                     xmax,
                                     ymax,
                                     zoom=zoom,
                                     source=url)
    ax.imshow(basemap, extent=extent, interpolation='bilinear')
    # restore original x/y limits
    ax.axis((xmin, xmax, ymin, ymax))
예제 #22
0
def add_basemap(ax, zoom=12):
    """
    Adds map to a plot.

    """
    url = ctx.sources.ST_TONER_LITE
    xmin, xmax, ymin, ymax = ax.axis()
    basemap, extent = ctx.bounds2img(xmin,
                                     ymin,
                                     xmax,
                                     ymax,
                                     zoom=zoom,
                                     url=url)
    ax.imshow(basemap, extent=extent, interpolation='bilinear')
    # restore original x/y limits
    ax.axis((xmin, xmax, ymin, ymax))
예제 #23
0
def add_basemap(ax,
                crs,
                url='http://a.tile.stamen.com/terrain/tileZ/tileX/tileY.png'):
    xmin, xmax, ymin, ymax = ax.axis()
    bb = geopandas.GeoSeries([Point(xmin, ymin), Point(xmax, ymax)])
    bb.crs = crs
    bb = bb.to_crs(epsg=4326)
    zoom = ctx.calculate_zoom(bb[0].x, bb[0].y, bb[1].x, bb[1].y)
    basemap, extent = ctx.bounds2img(xmin,
                                     ymin,
                                     xmax,
                                     ymax,
                                     zoom=zoom,
                                     url=url)
    ax.imshow(basemap, extent=extent, interpolation='bilinear')
    # restore original x/y limits
    ax.axis((xmin, xmax, ymin, ymax))
예제 #24
0
def test_sources():
    # NOTE: only tests they download, does not check pixel values
    w, s, e, n = (
        -106.6495132446289,
        25.845197677612305,
        -93.50721740722656,
        36.49387741088867,
    )
    sources = tilers.deprecated_sources
    for src in sources:
        img, ext = ctx.bounds2img(w,
                                  s,
                                  e,
                                  n,
                                  4,
                                  source=getattr(tilers, src),
                                  ll=True)
예제 #25
0
def add_basemap(axi, zoom, url="http://tile.stamen.com/terrain/tileZ/tileX/tileY.png"):
    """Added a basemap to a subplot

    :param obj axi: subplot axes
    :param int zoom: the number of zoom to use
    :param str url: the url
    """
    import contextily as ctx

    try:
        xmin, xmax, ymin, ymax = axi.axis()
        basemap, extent = ctx.bounds2img(xmin, ymin, xmax, ymax, zoom=zoom, url=url)
        axi.imshow(basemap, extent=extent, interpolation="bilinear")
        # restore original x/y limits
        axi.axis((xmin, xmax, ymin, ymax))
        return True
    except Exception:
        return False
예제 #26
0
def test_warp_tiles():
    w, s, e, n = (
        -106.6495132446289,
        25.845197677612305,
        -93.50721740722656,
        36.49387741088867,
    )
    img, ext = ctx.bounds2img(w, s, e, n, zoom=4, ll=True)
    wimg, wext = ctx.warp_tiles(img, ext)
    assert wext == (
        -112.54394531249996,
        -90.07903186397023,
        21.966726124122374,
        41.013065787006276,
    )
    assert wimg[100, 100, :].tolist() == [228, 221, 184]
    assert wimg[100, 200, :].tolist() == [213, 219, 177]
    assert wimg[200, 100, :].tolist() == [133, 130, 109]
예제 #27
0
def test_validate_zoom():
    # tiny extent to trigger large calculated zoom
    w, s, e, n = (0, 0, 0.001, 0.001)

    # automatically inferred -> set to known max but warn
    with pytest.warns(UserWarning, match="inferred zoom level"):
        ctx.bounds2img(w, s, e, n)

    # specify manually -> raise an error
    with pytest.raises(ValueError):
        ctx.bounds2img(w, s, e, n, zoom=23)

    # with specific string url (not dict) -> error when specified
    url = "https://a.tile.openstreetmap.org/{z}/{x}/{y}.png"
    with pytest.raises(ValueError):
        ctx.bounds2img(w, s, e, n, zoom=33, source=url)

    # but also when inferred (no max zoom know to set to)
    with pytest.raises(ValueError):
        ctx.bounds2img(w, s, e, n, source=url)
예제 #28
0
def add_basemap(ax,
                zoom,
                url='http://tile.stamen.com/terrain/tileZ/tileX/tileY.png'):
    # Special thanks to Prof. Martin Christen at FHNW.ch in Basel for
    # his GIS-Hack to make the output scales show proper lat/lon values!
    xmin, xmax, ymin, ymax = ax.axis()
    basemap, extent = ctx.bounds2img(xmin,
                                     ymin,
                                     xmax,
                                     ymax,
                                     zoom=zoom,
                                     ll=True,
                                     url=url)

    # calculate extent from WebMercator to WGS84
    xmin84, ymin84 = Mercator2WGS84(extent[0], extent[2])
    xmax84, ymax84 = Mercator2WGS84(extent[1], extent[3])
    extentwgs84 = (xmin84, xmax84, ymin84, ymax84)

    ax.imshow(basemap, extent=extentwgs84, interpolation='bilinear')
    # restore original x/y limits
    ax.axis((xmin, xmax, ymin, ymax))
예제 #29
0
def add_basemap(axis,
                zoom,
                url='http://tile.stamen.com/terrain/tileZ/tileX/tileY.png',
                flip=False):
    """ Add image to given axis. Coordinates need to be in epsg=3857.

    Parameters:
        (cartopy.mpl.geoaxes.GeoAxesSubplot): plot axis
        zoom (int, optional): zoom coefficient used in the satellite image
        url (str, optional): image source, e.g. ctx.sources.OSM_C
    """
    xmin, xmax, ymin, ymax = axis.axis()
    basemap, extent = ctx.bounds2img(xmin,
                                     ymin,
                                     xmax,
                                     ymax,
                                     zoom=zoom,
                                     url=url)
    if flip:
        basemap = np.flip(basemap, 0)
    axis.imshow(basemap, extent=extent, interpolation='bilinear')
    axis.axis((xmin, xmax, ymin, ymax))
예제 #30
0
def add_basemap(
    ax,
    zoom,
    url='http://tile.stamen.com/terrain-background/tileZ/tileX/tileY.png',
    errors='ignore',
):
    #TODO : move to another file
    try:
        import contextily as ctx
        xmin, xmax, ymin, ymax = ax.axis()
        basemap, extent = ctx.bounds2img(xmin,
                                         ymin,
                                         xmax,
                                         ymax,
                                         zoom=zoom,
                                         url=url)
        ax.imshow(basemap, extent=extent, interpolation='bilinear')
        # restore original x/y limits
        ax.axis((xmin, xmax, ymin, ymax))
    except Exception as e:
        print('could not add basemap:', e)
        if errors != 'ignore':
            assert False
def add_basemap(ax, zoom, url='http://tile.stamen.com/terrain/tileZ/tileX/tileY.png'):
    xmin, xmax, ymin, ymax = ax.axis()
    basemap, extent = ctx.bounds2img(xmin, ymin, xmax, ymax, zoom=zoom, url=url)
    ax.imshow(basemap, extent=extent, interpolation='bilinear')
    # restore original x/y limits
    ax.axis((xmin, xmax, ymin, ymax))
예제 #32
0
# Print some metadata
for attr in ["w", "s", "e", "n", "place", "zoom", "n_tiles"]:
    print("{}: {}".format(attr, getattr(loc, attr)))

# Show the map
im1 = loc.im

fig, axs = plt.subplots(1, 3, figsize=(15, 5))
ctx.plot_map(loc, ax=axs[0])

###############################################################################
# The zoom level will be chosen for you by default, though you can specify
# this manually as well:

loc2 = ctx.Place("boulder", zoom=11)
ctx.plot_map(loc2, ax=axs[1])

###############################################################################
# Downloading tiles from bounds
# =============================
#
# You can also grab tile information directly from a bounding box + zoom level.
# This is demoed below:

zoom = ctx.calculate_zoom(loc.w, loc.s, loc.e, loc.n)
im2, bbox = ctx.bounds2img(loc.w, loc.s, loc.e, loc.n, zoom=zoom, ll=True)
ctx.plot_map(im2, bbox, ax=axs[2], title="Boulder, CO")

plt.show()