How to add an image on top of geobasemap?

56 vues (au cours des 30 derniers jours)
Sim
Sim le 11 Déc 2025 à 14:35
Commenté : Sim il y a environ 5 heures
I tried to add an image on top of a geobasemap using
[imgData, ~, alphaData] = imread('Basketball.png');
lat_min = 40;
lat_max = 50;
lon_min = 0;
lon_max = 10;
figure;
ax = geoaxes;
geobasemap(ax, 'grayland');
geoshow(imgData, ...
'XData', [lon_min, lon_max], ... % Longitude bounds
'YData', [lat_min, lat_max], ... % Latitude bounds
'DisplayType', 'texturemap', ... % Display a raster image
'Parent', ax);
Error using designateAxesArgAsParentArg (line 66)
Plotting over a GeographicAxes using the geoshow function is not supported.

Error in geoshow (line 233)
varargin = designateAxesArgAsParentArg(mfilename, varargin{:});
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
but it didn’t work. How can I do this? I read the section "Create Common Plots over Basemap Images", but it doesn’t mention "geobasemap".

Réponses (1)

Umar
Umar le 12 Déc 2025 à 9:43
Modifié(e) : Umar le 12 Déc 2025 à 10:29

@Sim, I see what happened - in your case you do have the Mapping Toolbox (your geobasemap is working), but the original code syntax was incorrect. Let me give you both solutions.

Solution 1: WITH Mapping Toolbox (Your Case)

Based on the MathWorks documentation for geoshow, here's the correct syntax:

% Read the image
[imgData, ~, alphaData] = imread('/MATLAB Drive/IMG_6894.PNG'); 
%replace it with your directory path
% Define the geographic bounds
latlim = [40, 50];
lonlim = [0, 10];
% Create figure with geoaxes
figure;
gx = geoaxes;
geobasemap(gx, 'grayland');
hold on;
% Correct geoshow syntax for geographic axes
geoshow(imgData, spatialref, 'DisplayType', 'texturemap');
% OR the simpler form:
h = geoshow(latlim, lonlim, imgData);
% Apply transparency
if ~isempty(alphaData)
  set(h, 'AlphaData', alphaData);
end

Why the original failed: According to the documentation, when using geoshow with GeographicAxes (created by geobasemap), the 'Parent' parameter syntax shown in that forum post is not supported. The documentation states: " geoshow is not recommended when used with geographic axes (created by geoaxes or geobasemap). Use geolimits instead to set limits."

Solution 2: WITHOUT Mapping Toolbox (Fallback)

This is what I implemented - works with base MATLAB only:

close all;clear all;clc
% Read the image
[imgData, ~, alphaData] = imread('/MATLAB Drive/IMG_6894.PNG');
% Define the geographic bounds for the image
latlim = [40, 50];
lonlim = [0, 10];
% Create figure
figure('Color', 'w');
ax = axes;
% Display the image with geographic coordinates
imagesc(lonlim, latlim, imgData);
set(ax, 'YDir', 'normal');  % Correct the y-axis direction
axis equal tight;
% Set labels
xlabel('Longitude');
ylabel('Latitude');
title('Basketball Overlay');
% Apply transparency if alphaData exists
if ~isempty(alphaData)
  alpha(alphaData);
end
% Add gridlines for reference
grid on;

Output:

Since you have the Mapping Toolbox, use Solution 1 for the proper geobasemap overlay!

Let me know how it goes.

  11 commentaires
Dyuman Joshi
Dyuman Joshi il y a environ 5 heures
You can test it yourself as well - Just press the Green triangle in the Code Editor or F5 or Ctrl+Enter.
Unfortunately, I didn't have time to look into the issue yet, so I'll check it out now.
Sim
Sim il y a environ 5 heures
@Umar.. I tried, but I am not sure about the result...
[imgData, ~, alphaData] = imread('Basketball.png');
latlim = [40, 50];
lonlim = [0, 10];
% Create spatial reference for the image
R = georefcells(latlim, lonlim, size(imgData));
% Add image as a custom basemap
addCustomBasemap('basketball', imgData, R);
Warning: Basemap contains regional data with latitude limits in the range [40.0016, 50] and longitude limits in the range [0, 10.0195]. Global map displays might show missing tiles.
% Display using geobasemap
figure;
geobasemap('basketball');

Connectez-vous pour commenter.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by