How to overlay a vector annotation image on the top of a cartopy map?

Question:

How to overlay a vector annotation image on the top of a cartopy map?

import cartopy.io.img_tiles as cimgt
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER

class TDT(cmigt.GoogleWTS):
    def _image_url(self, tile):
        x, y, z = tile
        url = 'http://t1.tianditu.gov.cn/DataServer?T=vec_w&x=%s&y=%s&l=%s&tk=%s' % (x, y, z, mykey)
        return url
        
class TDT_1(cmigt.GoogleWTS):
    def _image_url(self, tile):
        x, y, z = tile
        url = 'http://t1.tianditu.gov.cn/DataServer?T=cva_w&x=%s&y=%s&l=%s&tk=%s' % (x, y, z, mykey)
        return url
        
def make_map(projection=ccrs.PlateCarree()):
    fig, ax = plt.subplots(figsize=(9, 13),subplot_kw=dict(projection=projection))
    gl = ax.gridlines(draw_labels=True)
    gl.xlabels_top = gl.ylabels_right = False
    gl.xformatter = LONGITUDE_FORMATTER
    gl.yformatter = LATITUDE_FORMATTER
    return fig, ax
    
extent = [105, 106, 35.5, 36.5]

request = TDT()
request_1=TDT_1()
fig, ax = make_map(projection=request.crs)
ax.set_extent(extent) 
ax.add_image(request, 10)
ax.add_image(request_1, 10)  #Can't to add another image,how to let it to display on the top of the map.
plt.show()  

I want to get the merged image with the Vector annotation, but I only see one of the image.
How do i do?

Asked By: user3373877

||

Answers:

When you plot two images on top of each other, the top image will hide the bottom completly unless you allow some transparency on the top image. In your case, you can set the second image with the following code:

ax.add_image(request_1, 10, alpha=0.6)

The value of alpha:

0 is 100% transparent
1 is 100% opaque

you need a good value between 0 and 1.

In some situation, zorder option may be needed.

ax.add_image(request, 10, zorder=10)
ax.add_image(request_1, 10, alpha=0.6, zorder=20)

Hope this helps.

Answered By: swatchai
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.