2013-10-09 8 views
4

Je veux tracer des emplacements différents sur une carte de l'état de NY. Mon code actuel trace l'ensemble de l'Amérique du Nord parce que je ne pouvais pas trouver comment tracer un seul état. J'essaye de fixer les limites de latitude et de longitude à l'état de NY, mais cela me donne toujours le pays entier.Points de tracé sur une carte dans MATLAB

En outre, quand je fais hold all (ou hold on) et essaye de tracer les points, j'obtiens une autre figure qui apparaît avec le titre que j'ai spécifié, mais juste un blanc, carré blanc.

Une autre question connexe est qu'une fois que j'ai obtenu les points tracés, je dois savoir quels points ils sont. Si j'ai les noms dans un tableau de cellules séparé, comment puis-je avoir MATLAB étiqueter les points en fonction des coordonnées (qui sont stockées dans une colonne séparée) correspondent avec quel nom (si les noms sont stockés dans une autre colonne)?

%% Plot map 
latlim = [39 47]; 
lonlim = [-81 -70]; 

ax = worldmap('USA'); 
load coast 
geoshow(ax, lat, long,... 
'DisplayType', 'polygon', 'FaceColor', [.45 .60 .30]) 
states = shaperead('usastatelo', 'UseGeoCoords', true, 'BoundingBox', [lonlim' latlim']); 
axesm('lambert', 'MapLatLimit', latlim, 'MapLonLimit', lonlim); 
faceColors = makesymbolspec('Polygon',... 
    {'INDEX', [1 numel(states)], 'FaceColor', ... 
    polcmap(numel(states))}); % NOTE - colors are random 
geoshow(ax, states, 'DisplayType', 'polygon', ... 
    'SymbolSpec', faceColors); 
figure('Color', 'white') 

title('PM2.5 Site in New York State in 2012'); 

hold all 

% Plot points 
axesm('lambert', 'MapLatLimit', latlim', 'MapLonLimit', lonlim'); 
datalat = str2double(datalat); 
datalon = str2double(datalon); 
scatterm(datalat, datalon) 

Répondre

3

Vous pouvez obtenir une carte d'état Etats-Unis avec usamap('New York') et tracer un texte de superposition avec textm. Ici, 25 points aléatoires et leur étiquette sont tracés sur la figure.

L'intrigue suivante

enter image description here

est produit par

latlim = [39 47]; 
lonlim = [-81 -70]; 

figure('Color','w'); 
usamap('New York') 
shi = shaperead('usastatehi', 'UseGeoCoords', true,... 
      'Selector',{@(name) strcmpi(name,'New York'), 'Name'}); 
geoshow(shi, 'FaceColor', [0.3 1.0, 0.675]) 
textm(shi.LabelLat, shi.LabelLon, shi.Name, 'HorizontalAlignment', 'center') 

nb_point = 25; 
LAT = latlim(1) + (latlim(2)-latlim(1)).*rand(nb_point,1); 
LON = lonlim(1) + (lonlim(2)-lonlim(1)).*rand(nb_point,1); 
h = geoshow(LAT, LON, 'DisplayType', 'Point', 'Marker', '+', 'Color', 'red'); 
textm(LAT, LON+0.3, num2str((1:nb_point)'), 'FontSize',14) 
+0

Pouvez-vous expliquer la partie dans laquelle vous étiquetez les points? J'ai les noms dans un tableau de cellules. – shizishan

+0

Comme le dit le document: _string peut être un tableau de chaînes de caractères ayant le même nombre d'éléments que lat et lon. (Pour la rétrocompatibilité, la chaîne peut aussi être un tableau de caractères à deux dimensions tel que size (string, 1) correspond à numel (lat)) _. Si vous exécutez 'num2str ((1: nb_point) '' dans la fenêtre de commande, vous verrez la structure du texte, aussi simple que cela! – marsei