我怎么能加快绘图线在地图吗?

25日视图(30天)
Stefan
Stefan 2016年8月16日
评论道: 科林2023年3月20日
你好,
我希望加快策划过程在我的代码。下面我将描述它更好,但基本上我策划之间的界限点地图不断的从一个迭代移动到另一个迭代点。我已经发现了瓶颈但内部(包括轴分层),我不知道如何解决这个问题。此外,我列了一个清单,可能效率低下/改进我收集从其他问题,但我希望得到一些反馈之前改变代码结构(很庞大)。我考虑重写代码在Python或C,但我真的很喜欢在MATLAB工具箱的映射,所以我宁愿没有改变语言如果可能的话。
我的代码在做什么:
我有限的代码,但是这是功能的概述。数据从WMS服务器下载和分层。这是存储;它不会发生每次迭代可以是缓慢的。迭代开始时,地图绘制使用geoshow ()。点是绘制在地图上使用plotm (z1, lat1, lon1…)和连接linem (lat2, lat1 lon1, lon2, z1, z2)。这些点的移动,他们中的一些人不但是总是移动。图是由clf复位(复位)。生成的数据存储和图捕获后回放。重复。
多长时间的:
五个迭代需要将近一分钟(与分析器)和200次迭代可能需要40分钟左右。我需要画在200年和1500年之间一次迭代,改变一些值,重复。我相信这次可以大大减少,因为似乎只有一个瓶颈。
瓶颈:
显然,策划的瓶颈。当我运行“没有策划模式,”5中的代码迭代用不到5秒(有很多计算我上面没有提到)。运行时分析工具,我可以隔离的最大时间内消费这一过程:
具体地说,
内部的MATLAB函数代码
最慢的部分代码似乎MATLAB在哪里移动每个新层的顶部轴(突出显示红色,上图)。
改进我或者可以:
我知道很多方面的代码不是最优的。例如,我可以修改linem对象,而不是创建一个新的每次迭代使用设置()和地图和静止的点不需要重新绘制每个迭代。有些事情我试过了,除了小诸如限制设置为常量:
图(1);设置(大的,“CurrentFigure”1);
甘氨胆酸ax =;
斧子。SortMethod =“childorder”;
集(1,“CurrentAxes”ax)
集(1,渲染器的,opengl的)
我有办法解决分层问题除了实现上述改进(而不是策划修改行)?我不需要任何特定的行叠加顺序,尽可能在地图上面都是表面。如果我修改线对象使用设置()而不是重新划分,将堆叠的顺序每运行或只做一次它仍然会在每一个迭代中执行的吗?任何见解将不胜感激!
Stefan D。
2的评论
Stefan
Stefan 2016年8月29日
谢谢你的输入——你也许是对的。我的地图是尽可能小的侥幸,但仍足以慢一些,显然。任何建议如何加快速度,除了降低地图大小?

登录置评。

接受的答案

凯利卡尼
凯利卡尼 2016年8月29日
通过清除地图和改建,你迫使绘图功能重复的很多不必要的投影计算。此外,映射工具箱函数往往是有点臃肿的图形时的开销……他们似乎已经设计了小数据集和缓慢,交互式数据探索。
所以我认为你一定可以加快速度,策划一次然后改变X, Y, Z, CData现有对象的属性。这可能需要你做投影calc的自己,但是我发现通常比依靠内部plotm / linem whateverm预测。
如果你发布一些示例代码,也许我们可以给你一些更详细的建议。
2的评论
乍得格林
乍得格林 2016年8月31日
斯蒂芬,
如果你可以自己项目的坐标和使用 显示亮度图像 而不是 geoshow ,这可能会加快速度。很难提供具体的建议,因为我们不能看到你使用 geoshow 。这些功能之一是设计智能和自动决定如何绘制数据基于你给它什么,你可以给它一个很多不同的形式的数据。你喂什么信息 geoshow ,基础图的尺寸是什么?
如果底层的地图包含像素比你计划来生成最终的地图,您不妨调整。您可以调整地图,如果你给geoshow网格背阔肌和朗你也可以调整他们的图像处理工具箱函数 imresize 。如果你这样做:
map_r = imresize(图0.5);
lat_r = imresize (lat, 0.5);
lon_r = imresize(经度,0.5);
它会潜在的地图的尺寸切成两半,这意味着绘制像素的总数的1/4。并相应策划应该加快。

登录置评。

答案(1)

亨利员工
亨利员工 2020年11月11日
我有这同样的问题(我知道这是4年前),但我用fillm以类似的方式,完成了12个小时盐度的地图,所以我挖到MATLAB代码,发现放置的过程是将永远和它的唯一目的是“装饰的叠加顺序(除了框架,当时放在底部构造)”。这似乎unnecesarry以来我没有画任何东西在任何这些装饰品,甚至如果我是我可以移动到顶部,当我完成我的16183个重复。所以在matlab文件补丁。m位于/应用程序/ MATLAB_R2020b。应用/工具箱/地图/ mapdisp我注释掉了75行”map.graphics.internal.restackMapAxes (h0)”,以便它不操控轴每次我画一个像素,它花了我12个小时处理时间3分钟。我希望这可以帮助别人有同样的问题。
注意的是,你需要解锁matlab文件能够写,它给你提示覆盖在mac但电脑你需要手动去属性和写访问用户。一旦你打开文件并更改你需要运行在MATLAB代码一次这将给你一个错误说没有足够的理由,但这是这样编译你的改变,否则它将有相同的性能。
2的评论
科林
科林 2023年3月20日
我有同样的问题与geoshow (“DisplayType”、“点”)和解决应用于geovecshow它遵循上述建议。米(工具箱/地图/地图/私人)。对于其他DisplayTypes, geoshow包装器可以显示哪个函数(geovecshow、georastershow等)实际使用。我看见一个加速的大约20 x进行评论的放置,没有明显的损害情节本身。

登录置评。

类别

找到更多的在图形性能帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!

翻译的