exponenta event banner

Свойства ограничения карты

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

Как правило, используется MapLatLimit и MapLonLimit свойства для настройки осей карты с ненаклонной, неазимутальной проекцией с началом координат на экваторе. (Большинство прогнозов, включенных в 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 W. Поскольку карта охватывает 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 Запада.

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')

Предыдущий вызов axesm эквивалентно:

axesm('mercator','Origin',[0 120 0],'FlatLimit',[-90 90],'FLonLimit',[-180 180]);

Это можно проверить, проверив свойства.

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')

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

В этом примере показано, как построить северно-полярную проекционную карту равной площади Azimuthal, простирающуюся от экватора до полюса и центрированную по умолчанию на долготе 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-')

Связанные темы