Во многих распространенных ситуациях карта ограничивает свойства, 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
значение свойства).
Вы хотите изменить аспект проекции по умолчанию (normal vs. Surverse).
Вы хотите использовать ненулевой источник широту, кроме одного из особых случаев, отмеченных выше.
Вы используете одну из следующих проекций:
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
свойства. С другой стороны, не слишком сложно узнать, как обновить оси карты, если иметь в виду следующее:
The 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 и 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
Создайте проекцию Mercator, охватывающую всюсь область значений допустимых широт с долготами, охватывающими все 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
Этот пример показывает, как создать карту стандартной версии проекции Lambert Conformal Conic, охватывающей широты от 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')
В этом примере показано, как создать карту стандартной версии проекции Lambert Conformal Conic в Южное полушарие. Пример переопределяет стандартные параллели по умолчанию и устанавливает 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-')