的天梭
而且mdistort
函数提供了不同形式的地图投影误差的概览。但是,有时需要对特定位置的误差进行数值估计,以便量化或校正地图失真。这是很有用的,例如,如果您在地图上对环境数据进行统一采样,并希望精确地知道与每个采样点相关的面积有多大,这是一个随位置而变化的统计数据,并且依赖于投影。一旦有了这些信息,就可以根据地图投影引起的区域变化调整环境密度和其他统计数据。
映射工具箱™函数从当前投影或mstruct返回特定于位置的映射错误统计信息。的distortcalc
函数计算相同的失真统计信息mdistort
,但用于作为参数提供的指定位置。每次提供一个纬度-经度位置或以向量形式提供。一般形式是
[areascale,angdef,maxscale,minscale,merscale,parscale] =…distortcalc (lat, mstruct长)
但是,如果您正在计算当前映射图,则省略mstruct。您不需要在您感兴趣的最后一个值后面指定任何返回值。
distortcalc
确定地图投影几何畸变下面的练习使用distortcalc
从陆地面积数据集中计算阿根廷地图的最大面积失真。
阅读北美和南美多边形:
Americas = shaperead('landareas','UseGeoCoords',true,…'Selector', {@(name)…strcmpi(name,{'北美和南美'}),' name '});
设置空间范围(地图限制),以包含南美洲的南部,也包括一个更接近南极的区域:
Mlatlim = [-72.0 -20.0];Mlonlim = [-75.0 -50.0];[alat, alon] = maptriml([美洲。Lat),…(美洲。Lon], mlatlim, mlonlim);
使用这些极限创建一个墨卡托圆柱保形投影,指定一个五度光栅,然后绘制轮廓以供参考:
图;axesm(“MapProjection”、“墨卡托”、“网格”,“上”,…mlatlim‘MapLatLimit’,‘MapLonLimit’,mlonlim,……'MLineLocation',5, 'PLineLocation',5) plotm(alat,alon,'b')
地图是这样的:
每抽取十分之一的补丁轮廓进行分析:
Alats = alat(1:10:数字(alat));Alons = alon(1:10:numel(alat));
计算样本点的面积失真(由扭曲calc返回的第一个值):
Adistort =扭曲calc(alats, alons);
求整个阿根廷的面积失真范围(在本例中,赤道上单位面积的百分比):
Adistortmm = [min(adistort) max(adistort)] Adistortmm = 1.1790 2.7716
由于阿根廷地处中南部纬度地区,在墨卡托地图上,阿根廷的面积被夸大了,从北到南的误差明显不同。
删除任何南
S从坐标数组和图符号表示的相对扭曲为比例圆,使用scatterm
:
nanIndex = isnan(adistort);alats(nanIndex) = [];alons(nanIndex) = [];adistort(nanIndex) = [];scatterm (alats,阿龙,20 * adistort,“红色”,“填满”)
生成的地图如下所示:
如果它向极地延伸得更远,面积夸大的程度就会大得多。要知道有多大,得到50°S, 60°S和70°S的面积失真:
A =扭曲calc(-50,-60) A = 2.4203 A =扭曲calc(-60,-60) A = 4 >> A =扭曲calc(-70,-60) A = 8.5485
你只能使用distortcalc
查询当前映射帧或mstruct范围内的位置。外分产量南
结果。
使用这种技术,您可以编写一个简单的脚本,让您重复查询地图,以确定任何所需位置的失真。您可以使用图形光标选择位置inputm
.例如,
[plat plon] = inputm(1) plat = -62.225 plon = -72.301 >> a=扭曲calc(plat,plon) a= 4.6048
当然,你得到的答案会根据你选择的点而有所不同。使用这种技术,您可以编写一个简单的脚本,让您可以重复查询地图,以确定任何所需位置的任何失真统计数据。
尝试改变地图投影或方向矢量,看看投影的选择如何影响地图失真。有关更多信息,请参阅的参考页distortcalc
.