主要内容

本页采用了机器翻译。点击此处可查看英文原文。

bufferm

经纬度多边形的缓冲区

语法

[latb,lonb] = bufferm(lat,lon,bufwidth)
[latb,lonb] = bufferm(lat,lon,bufwidth,direction)
[latb,lonb] = bufferm(lat,lon,bufwidth,direction,npts)

说明

[latb,lonb] = bufferm(lat,lon,bufwidth) 用于计算线或多边形周围的缓冲区。如果向量 latlon(单位为度)定义了一条直线,那么 latblonb 则定义了一个多边形,该多边形包含所有距离该直线不超过一定距离 (bufwidth) 的点。bufwidth 是沿该曲面给定的、以弧度为单位的标量。如果向量 latlon 定义了一个多边形,那么 latblonb 则定义了一个区域,该区域包含所有位于多边形外部且距离多边形 bufwidth 以内的点。

[latb,lonb] = bufferm(lat,lon,bufwidth,direction),其中 direction 指定缓冲区位于多边形内部 ('in') 还是外部 ('out')。第三种选项 'outPlusInterior' 返回外部缓冲区(其计算方式与使用 'out' 相同)与多边形内部区域的并集。如果您未提供 direction 值,bufferm 将默认使用 'out',并返回多边形外部的缓冲区。如果将 'in' 作为 direction 的值传入,bufferm 将返回多边形内部的一个缓冲区。如果您要查找某条线周围的缓冲区,'out' 是唯一有效的选项。

[latb,lonb] = bufferm(lat,lon,bufwidth,direction,npts) 控制用于围绕多边形顶点构造圆的点数。点数越多,生成的缓冲区越平滑,但所需时间也越长。如果省略 npts,则每个圆使用 13 个点。

示例

全部折叠

使用 bufferm 函数生成陆地区域多边形内部的缓冲区。

导入马达加斯加的多边形形状数据。

madagascar = shaperead('landareas.shp','UseGeoCoords',true, ...
    'Selector', {@(name)strcmpi(name,'Madagascar'),'Name'});

绘制一张显示马达加斯加的地图。

figure
worldmap('madagascar')
geoshow(madagascar)

Figure contains an axes object. The hidden axes object contains 13 objects of type patch, line, text.

使用 bufferm 创建一个缓冲区,该缓冲区从马达加斯加海岸向内陆延伸 0.75 度。

madlat = madagascar.Lat;
madlon = madagascar.Lon;
bufwidth = 0.75;
direction = 'in';
[latbuf,lonbuf] = bufferm(madlat,madlon,bufwidth,direction);

将缓冲区以绿色显示。

geoshow(latbuf,lonbuf,'DisplayType','polygon','FaceColor','green')

Figure contains an axes object. The hidden axes object contains 14 objects of type patch, line, text.

显示代表五大湖的五个多边形的简化版本。

load conus
tol = 0.05;
[latr, lonr] = reducem(gtlakelat, gtlakelon, tol);
figure('Color','w')
ax = usamap({'MN','NY'});
setm(ax,'MLabelLocation',5)
geoshow(latr, lonr, 'DisplayType', 'polygon', ...
   'FaceColor', 'blue')
title('Great Lakes')

Figure contains an axes object. The hidden axes object with title Great Lakes contains 15 objects of type patch, line, text.

设置缓冲带宽度,并在湖泊外部显示缓冲区。

figure;
bufwidth = 1;  
[latb, lonb] = bufferm(latr, lonr, bufwidth);
geoshow(latb, lonb, 'DisplayType', 'polygon', ...
   'FaceColor', 'yellow')
title('Exterior Buffer Zone')

Figure contains an axes object. The axes object with title Exterior Buffer Zone contains an object of type patch.

在多边形内部显示一个缓冲区。

figure;
[lati, loni] = bufferm(latr, lonr, 0.3*bufwidth, 'in');
geoshow(lati, loni, 'DisplayType', 'polygon', ...
   'FaceColor', 'magenta')
title('Interior Buffer Zone')

Figure contains an axes object. The axes object with title Interior Buffer Zone contains an object of type patch.

在邻近各州的背景图上,标出五大湖及其内陆和外围缓冲区。

figure('Color','w')
ax = usamap({'MN','NY'});
setm(ax,'MLabelLocation',5)
geoshow(latb, lonb, 'DisplayType', 'polygon', 'FaceColor', 'yellow')
geoshow(latr, lonr, 'DisplayType', 'polygon', 'FaceColor', 'blue')
geoshow(lati, loni, 'DisplayType', 'polygon', 'FaceColor', 'magenta')
geoshow(uslat, uslon)
geoshow(statelat, statelon)
title('Great Lakes and Buffer Zones with Neighboring States')

Figure contains an axes object. The hidden axes object with title Great Lakes and Buffer Zones with Neighboring States contains 19 objects of type patch, line, text.

请使用 'outPlusInterior' 选项。

bufWidth = 0.5; 
[latz, lonz] = bufferm(latr, lonr, bufWidth,'outPlusInterior'); 
figure 
geoshow(latz,lonz,'DisplayType','polygon','FaceColor','yellow') 
title('Exterior Buffer Zone including Polygon Interior');

Figure contains an axes object. The axes object with title Exterior Buffer Zone including Polygon Interior contains an object of type patch.

提示

在使用 bufferm 处理多边形之前,请先关闭所有多边形。如果一个多边形不是闭合的,bufferm 会将其视为一条直线。

版本历史记录

在 R2006a 之前推出

全部展开