Сопоставьте предельные свойства

Во многих общих ситуациях предельные свойства карты, MapLatLimit и MapLonLimit, обеспечивают удобный способ задать ваш источник проекции карты или структурируют пределы. Обратите внимание на то, что эти свойства намеренно избыточны; можно всегда избегать их, если вы желаете и вместо этого используете Origin, FLatLimit и свойства FLonLimit настроить вашу карту. Когда они будут применимы, однако, вы, вероятно, найдете, что это легче и более интуитивно, чтобы установить MapLatLimit и MapLonLimit, особенно при создании новой карты оси с axesm.

Вы обычно используете свойства MapLatLimit и MapLonLimit настроить карту оси с ненаклонной, неазимутальной проекцией с ее источником на Экваторе. (Большинство проекций, включенных в Mapping Toolbox™, попадает в эту категорию; например, цилиндрический, псевдоцилиндрический, конический, или измененный азимутальный.), Кроме того, даже с ненулевой широтой источника (источник от Экватора), можно использовать свойства MapLatLimit и MapLonLimit с проекциями, которые реализованы непосредственно, а не через вращения сферы (например, tranmerc, utm, lambertstd, cassinistd, eqaconicstd, eqdconicstd и polyconicstd). Этот список включает проекции, используемые наиболее часто для крупномасштабных карт, таких как американская Геологическая служба топографические карты четырехугольника. Наконец, когда источник расположен в полюсе или на Экваторе, можно использовать предельные свойства карты с любой азимутальной проекцией (например, stereo, ortho, breusing, eqaazim, eqdazim, gnomonic или vperspec).

С другой стороны, необходимо избежать предельных свойств карты, работая вместо этого с Origin, FLatLimit и свойствами FLonLimit, когда:

  • Вы хотите, чтобы ваш кадр карты был расположен асимметрично относительно долготы источника.

  • Вы хотите использовать наклонный аспект (то есть, присвоить ненулевой угол поворота третьему элементу "вектора ориентации", предоставленного как значение свойства Origin).

  • Вы хотите изменить аспект своей проекции по умолчанию (нормальный по сравнению с поперечным).

  • Вы хотите использовать ненулевую широту источника, кроме одного из особых случаев, отмеченных выше.

  • Вы используете одну из следующих проекций:

    • globe — Никакая потребность в пределах карты; всегда покрывает целую планету

    • cassini — Всегда в поперечном аспекте

    • wetch — Всегда в поперечном аспекте

    • bries — Всегда в наклонном аспекте

Нет никакой потребности предоставить значение для свойства MapLatLimit, если вы уже предоставили один для свойств Origin и FLatLimit. На самом деле, если вы предоставите все три при вызове или axesm или setm, значение FLatLimit будет проигнорировано. Аналогично, если вы предоставите значения для Origin, FLonLimit и MapLonLimit, значение FLonLimit будет проигнорировано.

Если вы действительно предоставите значение или для MapLatLimit или для MapLonLimit в одной из упомянутых выше ситуаций, axesm или setm проигнорируют его и выдадут предупреждение. Например,

axesm('lambert','Origin',[40 0],'MapLatLimit',[20 70])

генерирует предупреждающее сообщение:

Ignoring value of MapLatLimit due to use of nonzero origin
 latitude with the lambert projection.

Важно понять, что MapLatLimit и MapLonLimit являются дополнительными, избыточными свойствами, которые связываются с Origin, FLatLimit и свойствами FLonLimit. С другой стороны, не слишком трудно знать, как обновить ваши оси карты, если вы имеете в виду следующее:

  • Свойство Origin более приоритетно. Это установлено (неявно, если не явным образом) каждый раз, когда вы вызываете axesm, и вы не можете изменить его только путем изменения пределов карты. (Обратите внимание на то, что при создании новой карты оси с нуля, пределы карты используются, чтобы помочь установить источник, если он явным образом не задан.)

  • MapLatLimit более приоритетен по сравнению с FLatLimit, если обоим предоставляют в том же вызове axesm или setm, но изменяющий один только любой влияние другой.

  • MapLonLimit и FLonLimit имеют подобное отношение.

Приоритет Origin означает, что, если вы хотите сбросить свои пределы карты с setm и иметь setm также, определяют новый источник, необходимо установить Origin на [] в том же вызове. Например,

setm(gca,'Origin',[],'MapLatLimit',newMapLatlim,...
   'MapLonLimit',newMapLonlim)

С другой стороны, вызов как это автоматически обновит значения FLatLimit и FLonLimit. Точно так же вызов как:

setm(gca,'FLatLimit',newFrameLatlim,'FLonLimit',newFrameLonlim)

обновит значения MapLatLimit и MapLonLimit.

Наконец, вы, вероятно, не хотите пробовать следующее:

setm(gca,'Origin',[],'FLonLimit',newFrameLonlim)

потому что значение FLonLimit (различающийся MapLonLimit) не будет влиять на Origin, который просто изменится на зависимое проекцией значение по умолчанию (обычно [0 0 0]).

Задайте источник проекции карты и структурируйте пределы автоматически

Этот пример показывает, как задать источник проекции карты и пределы кадра с помощью двух предельных свойств карты: MapLatLimit и MapLonLimit. В то время как оси карты поддерживают свойства установить эти значения непосредственно, Origin, FLatLimit и FLonLimit, это легче и более интуитивно, чтобы использовать предельные свойства карты, особенно при создании новой карты оси с axesm. Этот пример подсвечивает взаимозависимость пределов осей карты и предельных свойств карты.

Создайте карту с помощью цилиндрической проекции или псевдоцилиндрической проекции, показывающей все или большую часть Земли с Экватором, запускающимся как прямая горизонтальная строка через центр карты. Карта ограничена географическим четырехугольником, и источник проекции расположен на Экваторе, сосредоточенном между пределами долготы, вы задаете использование пределов проекции карты.

latlim = [-80 80];
lonlim = [100 -120];
figure
axesm('robinson','MapLatLimit',latlim,'MapLonLimit',lonlim,...
    'Frame','on','Grid','on','MeridianLabel','on','ParallelLabel','on')
axis off
setm(gca,'MLabelLocation',60)
load coastlines
plotm(coastlat,coastlon)

Проверяйте, что функция axesm установила источник и структурирует пределы на основе значений, вы задали использование свойств MapLatLim и MapLonLim. Долгота источника должна быть расположена на полпути между пределами долготы 100 E и 120 Вт. Поскольку карта охватывает 140 градусов, добавляя половину из 140 к западному пределу, долгота источника должна быть 170 градусами. Кадр сосредоточен на этой долготе с полушириной 70 градусов, и широта источника находится на Экваторе.

origin = getm(gca,'Origin')
origin = 1×3

     0   170     0

flatlim = getm(gca,'FLatLimit')
flatlim = 1×2

   -80    80

flonlim = getm(gca,'FLonLimit')
flonlim = 1×2

   -70    70

Переключите западную долготу до 40 градусов E (а не 100 градусов), чтобы включать немного больше Азии. Используйте функцию setm, чтобы присвоить новое значение свойству MapLonLimit. Отметьте асимметричный внешний вид карты.

setm(gca,'MapLonLimit',[40 -120])

Чтобы исправить асимметрию, переключите западную долготу снова, на этот раз задав источник. В то время как свойства MapLatLimit и MapLonLimit удобны, значения Origin, FLatLimit, и свойства FLonLimit более приоритетны. Необходимо задать значение источника, чтобы достигнуть карты, которую вы предназначили. Лучший способ сделать это должно задать пустое значение для свойства Origin и позволить команде setm вычислить значение.

setm(gca,'MapLonLimit',[40 -120],'Origin',[])

Создайте цилиндрическую проекцию Используя предельные свойства карты

Этот пример показывает, как создать цилиндрическую проекцию с помощью предельных свойств карты.

Загрузите данные о береговой линии.

load coastlines

Создайте Меркаторскую проекцию, покрывающую полный спектр допустимых широт с долготами, покрывающими полные 360 степени, запускающиеся на 60 Западе. Вызов axesm выше эквивалентен: axesm('mercator','Origin',[0 120 0],'FlatLimit',[-90 90],... 'FLonLimit',[-180 180]).

figure('Color','w')
axesm('mercator','MapLatLimit',[-90 90],'MapLonLimit',[-60 300])
axis off; 
framem on; 
gridm on; 
mlabel on; 
plabel on;
setm(gca,'MLabelLocation',60)
geoshow(coastlat,coastlon,'DisplayType','polygon')

Проверьте это путем проверки этих свойств.

getm(gca,'Origin')
ans = 1×3

     0   120     0

getm(gca,'FLatLimit')
ans = 1×2

   -86    86

getm(gca,'FLonLimit')
ans = 1×2

  -180   180

Обратите внимание на то, что карта и пределы кадра фиксируются к области значений [-86 86], наложенного свойством TrimLat только для чтения.

getm(gca,'MapLatLimit')
ans = 1×2

   -86    86

getm(gca,'FLatLimit')
ans = 1×2

   -86    86

getm(gca,'TrimLat')
ans = 1×2

   -86    86

Создайте коническую проекцию Используя предельные свойства карты

Этот пример показывает, как создать карту стандартной версии Ламберта Конформная Коническая проекция, покрывающая широты 20 Севера на 75 Севера и долготы, покрывающие 90 градусов, запускающихся в 30 градусах на запад.

Загрузите данные о береговой линии и отобразите их. Вызов axesm выше эквивалентен: axesm('lambertstd','Origin', [0 15 0], 'FLatLimit',[20 75],FLonLimit',[-45 45])

load coastlines
figure('Color','w')
axesm('lambertstd','MapLatLimit',[20 75],'MapLonLimit',[-30 60])
axis off; 
framem on; 
gridm on; 
mlabel on; 
plabel on;
geoshow(coastlat, coastlon, 'DisplayType', 'polygon')

Создайте коническую проекцию южного полушария

Этот пример показывает, как создать карту стандартной версии Ламберта Конформная Коническая проекция в южное полушарие. Пример заменяет стандартные параллели по умолчанию и устанавливает свойства MapLatLimit и MapLonLimit.

Загрузите файл MAT данных о береговой линии, coastlines.mat.

load coastlines

Отобразите карту, установив свойства MapLatLimit и MapLonLimit.

figure('Color','w')
axesm('lambertstd','MapParallels',[-75 -15], ...
		'MapLatLimit',[-75 -20],'MapLonLimit',[-30 60])
axis off
framem on
gridm on
mlabel on
plabel on
geoshow(coastlat,coastlon,'DisplayType','polygon')

Создайте полярную азимутальную проекцию

Этот пример показывает, как создать Полярную Равную область Азимутальное расширение карты проекции от Экватора до полюса и сосредоточенный по умолчанию на долготе 0.

Загрузите файл MAT набора данных береговой линии, coastlines.mat.

load coastlines

Создайте карту. Вызов axesm эквивалентен: axesm('eqaazim','MLabelParallel',0,'Origin',[90 0 0],'FLatLimit',[-Inf 90]);

figure('Color','w')
axesm('eqaazim','MapLatLimit',[0 90])
axis off
framem on
gridm on
mlabel on
plabel on;
setm(gca,'MLabelParallel',0)

Постройте береговые линии.

geoshow(coastlat,coastlon,'DisplayType','polygon')

Создайте антарктическую азимутальную проекцию

Этот пример показывает, как создать Антарктическое Стереографическое Азимутальное расширение карты проекции от Южного полюса до 20 градусов S, сосредоточенный на долготе 150 градусов на запад. Включайте значение для свойства Origin в порядке управлять центральным меридианом.

Загрузите данные о береговой линии и карту отображения.

load coastlines
figure('Color','w')
axesm('stereo','Origin',[-90 -150],'MapLatLimit',[-90 -20])
axis off; 
framem on; 
gridm on; 
mlabel on; 
plabel on;
setm(gca,'MLabelParallel',-20)
geoshow(coastlat,coastlon,'DisplayType','polygon')

Вызов axesm выше эквивалентен:

axesm('stereo','Origin',[-90 -150 0],'FLatLimit',[-Inf 70])

Создайте экваториальную азимутальную проекцию

Этот пример показывает, как создать карту Равноотстоящей Азимутальной проекции с источником на Экваторе, покрывающем от 10 ° E к 170 ° E. Падения долготы источника в центре этой области значений (90 E), и карта достигают севера и юга к в 10 ° каждого полюса.

Считайте данные о побережье и отображение. Вызов axesm эквивалентен axesm('eqaazim','Origin',[0 90 0],'FLatLimit',[-Inf 80]).

load coastlines
figure('Color','w')
axesm('eqdazim','FLatLimit',[],'MapLonLimit',[10 170])
axis off; 
framem on; 
gridm on; 
mlabel on; 
plabel on;
setm(gca,'MLabelParallel',0,'PLabelMeridian',60)
geoshow(coastlat,coastlon,'DisplayType','polygon')

Создайте общую азимутальную проекцию

Этот пример показывает, как создать карту Ортогональной проекции с источником, сосредоточенным под Парижем, Франция. Вы не можете использовать MapLatLimit или MapLonLimit здесь.

Читайте в данных о побережье и отображении.

load coastlines
originLat = dm2degrees([48 48]);
originLon = dm2degrees([ 2 20]);

figure('Color','w')
axesm('ortho','Origin',[originLat originLon])
axis off; framem on; gridm on; mlabel on; plabel on;
setm(gca,'MLabelParallel',30,'PLabelMeridian',-30)
geoshow(coastlat,coastlon,'DisplayType','polygon')

Создайте долгую узкую наклонную меркаторскую проекцию

Этот пример показывает, как создать карту с долгой, узкой, наклонной Меркаторской проекцией. Пример показывает области 10 градусов любой стороне большого кругового курса полета от Токио до Нью-Йорка. Вы не можете использовать MapLatLimit или MapLonLimit.

load coastlines
latTokyo = dm2degrees([ 35 40]);
lonTokyo = dm2degrees([139 45]);

latNewYork = dm2degrees([ 40 47]);
lonNewYork = dm2degrees([-73 58]);

[dist,az] = distance(latTokyo,lonTokyo,latNewYork,lonNewYork);
[midLat,midLon] = reckon(latTokyo,lonTokyo,dist/2,az);
midAz = azimuth(midLat,midLon,latNewYork,lonNewYork);

buf = [-10 10];

figure('Color','w')
axesm('mercator','Origin',[midLat midLon 90-midAz], ...
    'FLatLimit',buf,'FLonLimit',[-dist/2 dist/2] + buf)
axis off; framem on; gridm on; tightmap
geoshow(coastlat,coastlon,'DisplayType','polygon')
plotm([latTokyo latNewYork],[lonTokyo lonNewYork],'r-')

Похожие темы