档案交换一周

我们最好的用户提交

GEOM 2D

肖恩本周的选择是GEOM2D经过大卫·莱格兰(David Legland)

在Mathworks工作,我每天都可以使用MATLAB,了解很多内容,然后尝试所有内容。但是,我忘记的一件事是,每天不使用它但偶尔需要它来进行特定任务的人的经历。因此,当我有机会解决这样的问题时,它使我想起了我的早期,并提醒我可以访问专业质量软件是多么特权。

昨天,我们的一位计划经理来到我的办公室,希望我为她为她的不同地区颜色编码为她创建一张美国地图。似乎很直接吧?这是我为她创建地图的步骤的故事。

我知道我的头顶USAMAP在里面映射工具箱是我构建地图所需的功能。所以我去了上面链接的文档页面:

DocUSAMAP

文档页面底部的第三个示例正是我要寻找的。我几乎总是从示例开始,因为它比添加更容易修改或删除。作为额外的奖励,它甚至已经排除了她在地图上不想要的阿拉斯加和夏威夷!

我复制了这个示例,然后运行它。我很快意识到我真正需要修改的线就是以下一条。它甚至有一个很好的评论,指出当前的随机性。

faceColors = makeymbolspec('polygon',... {'index',[1 numel(states)],'faceColor',... polcmap(numel(states))});%注意 - 颜色是随机的

我估计polcmap可能像其他任何Colormap功能一样工作,并采用独特的颜色数量。我的任务涉及六个区域,因此我需要六种颜色。

图polcmap6 = polcmap(6);Colormap(Polcmap6)配色杆

轻微胜利!

现在,我需要索引每个州的区域。我要求一个包含状态和地区指数的Excel表。

这可以轻松阅读可读取

tstateregions =可读取('stateregionslookup.xlsx');
警告:修改可变名称以使其成为有效的MATLAB标识符。

使用区域索引,我应该能够通过索引索引到colormap:

图ax = usamap('conus');状态= shaperead('usastatelo',,,,'usegeocoords', 真的,...“选择器”,,,,...{@(name)〜任何(strcmp)(name,{'阿拉斯加州',,,,'夏威夷'})),'姓名'});faceColors = makeymbolspec(“多边形”,,,,...{'指数',[1 numel(states)],“ faceColor”,,,,...polcmap6(tstateregions.gregion,:)});Geoshow(斧头,州,'显示类型',,,,“多边形”,,,,...'符号Spec',faceColors)弗拉姆离开gridm离开Mlabel离开PLABEL离开

但这看起来不正确!所以出了什么问题,我看了美国并比较了它们:

表({状态(:)。名称}。',tstateregions.state,'variablenames',{'matlab',,,,'excel'})
ans = MATLAB Excel ______________________ ________________________ 'Alabama' ''Alabama'' 'Arizona' ''Arizona'' 'Arkansas' ''Arkansas'' 'California' ''California'' 'Colorado' ''Colorado'' 'Connecticut' '“康涅狄格州”'''''''''''''''''''''''''''''''''georgia'''''''''''''''''爱达荷州''georgia'Georgia'''Illinois''''''''爱达荷州''Indiana''印第安纳州'''伊利诺伊州'''爱荷华州''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''“马萨诸塞州”“马里兰州”'Michigan''Massachusetts''Minnesota''Michigan''Michigan''Mississippi''Minnesota''Minnesota''Missipri''Mississippi''Mississippi''''''''''''''''''''''''''''''''''''''''“内布拉斯加州”''蒙大拿州''内华达州'“内布拉斯加州”“新罕布什尔州”“新罕布什尔州”“内华达”''新泽西州''新罕布什尔州''新罕布什尔州''新罕布什尔州'新墨西哥'新墨西哥州''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''俄克拉荷马'宾夕法尼亚州'''俄勒冈'''罗德岛'''宾夕法尼亚州''H Carolina'''Rhode Island''南达科他州''南卡罗来纳州''tennessee'''South Dakota'''Texas'''tennessee''''''''''''''''''''''''华盛顿''''''''''''''''''''Washington''Washington''Wisconsin''Wisconsin''West Virginia''Wyoming''Wyoming''Wisconsin''Wisconsin'''''''''''''''''''''''''“怀俄明州''

啊,哈!华盛顿特区附加到MATLAB的运输州边界文件的尽头,在Excel表中它的字母顺序为偏移。简单的手动修复:

tstateregions = [tstateRegions([[1:7 9:end],:);tstateregions(8,:)];
图ax = usamap('conus');faceColors = makeymbolspec(“多边形”,,,,...{'指数',[1 numel(states)],“ faceColor”,,,,...polcmap6(tstateregions.gregion,:)});Geoshow(斧头,州,'显示类型',,,,“多边形”,,,,...'符号Spec',faceColors)弗拉姆离开gridm离开Mlabel离开PLABEL离开

到现在为止,您可能想知道这与GEOM2D。好吧,我仍然不得不将两个字母代码放在每个状态上。为此,我需要一种方法来识别多边形的质心。我去了文件交换,搜索了“多边形质心”,果然GEOM2D完全有一个命名的函数!

为了ii = 1:numel(状态)latii =状态(ii).lat;%删除指示边界末端的NANlonii =状态(ii).lon;cent = polyencentroid(latii(〜isnan(latii)),lonii(〜isnan(lonii)));textm(Cent(1),Cent(2),tstateregions.x2letter(ii))结尾

那里有它。

The polygon centroid function is just one of dozens in this well documented and organized toolbox. There are tools for all sorts of math, aggregation and plotting of geometric primitives, e.g. polygons, lines, rays, and polynomial curves. Each group of functions has its owncontents.mfile so one can quickly see all of the functions and a quick description of what they do. The functions have a full help description, many with an example. There are also a bunch of example files that have been published so you can see the example without having to run it. Overall this is a great package to have around and now it can join its older brother,GEOM3D带有一周的横幅!

注释

您是否曾经获得随机的一次性任务或活动,可以在MATLAB中快速解决,这会让您感觉良好?

尝试一下,让我们知道您的想法这里或留下一个评论对于大卫。




与Matlab®R2015B一起出版

|
  • 打印
  • 发送电子邮件

注释

要发表评论,请单击这里登录您的数学帐户或创建一个新帐户。