利用AE编写切图工具的一些探讨

文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/

1.前言

这周利用晚上在家时间研究了下如何使用AE来开发切图工具。最初的想法是直接调用GP服务,利用CreateMapServerCache 、ManageMapServerCacheTiles 和Geoprocessor 这样三个类来做。但是这个思路有个巨大的弊端就是必须先发布地图服务。于是接下来又马上转换思路,想能否通过瓦片选址算法以及AE的一些细粒度类来实现这个功能。在经过了三个晚上的算法编写和功能编写后,整个工具基本成型,其中包括了对算法的优化以及一些具体问题的解决。这里跟大家大致分享下。

2.切图的基本原理和实现

如果对瓦片和瓦片寻址的相关算法不熟悉的朋友,请参考我写的从底层探究WebGIS的原理系列:http://www.cnblogs.com/naaoveGIS/category/600559.html

这里我直接给出所涉及到的几个公式。

2.1Resolution转换公式

resolution=scale*inch2centimeter/dpi。其中scale是地图比例尺,inch2centimeter为英寸转厘米的参数,dpi为1英寸所包含的像素。

2.2行列号获取公式

假设,地图切图的原点是(originX,oringinY),地图的瓦片大小是tileSize,地图屏幕上1像素代表的实际距离是resolution。计算坐标点(x,y)所在的瓦片的行列号的公式是:

col  = floor((originX- x)/( tileSize*resolution))

row = floor((oringinY - y)/( tileSize*resolution))

2.3AGS瓦片的特点

本工具的目标是切出与AGS瓦片相同格式的瓦片。AGS的瓦片具有以下特点(在http://www.cnblogs.com/naaoveGIS/p/3903270.html我做了详细的讲解):

(a).L开头的代表了Level,R开头的代表了row,C开头的代表了Col。

(b). L后的数字是两位字符串,R后的是八位字符串,C后的也是八位字符串。

(c).英文后的数字均是16进制数,然后不足位数的用0补充。

2.3基于以上公式流程

   我们首先获得用户输入的切图级别数组levelScaleArr,瓦片大小(imgWidth,imgHeight),切图原点(originX,originY)还有像素值DPI。同时我们还要通过接口获得此时地图的范围(dXMin,dYMin,dXMax,dYMax)。

   流程的盒模型如下所示:

                   

  

2.4实现

实现上,主要使用了AE做了这样几个功能:

(a).使用IMapControl类获得mxd的四角坐标。

(b).使用IActiveView、ExportPNGClass和EnvelopeClass实现将地图局部导出功能。

其他均按照上述流程图实现。

3.功能优化

3.1导出图片种类的优化

在AE中可以导出多种格式的图片。利用ExportJPEGClass(),ExportBMPClass(),ExportEMFClass(),ExportGIFClass()等即可实现。

3.2图片透明的优化

通过上面的类直接导出的图片其背景色默认为了白色。而AGS切图中,背景色是透明的,所以这里还要做一个图片透明度优化过程。C#中转成Bitmap后,利用该类自带的MakeTransparent即可实现。

4.算法的优化

4.1 缩小切图范围

在流程中,我们默认的切图是从切图原点开始的,这样会切成很多很多的无用图。我们可以直接从离地图DXmin和DYmax最近处开始切图即可。

startXByLevel = (int)Math.Abs((Math.Floor((DXmin-originX) / dImageWidth)));

startYByLevel = (int)Math.Abs((Math.Floor((originY-DYMax) / dImageHeight)));

startXByLevel和startYByLevel即为X轴和Y轴的切图初始点。

4.2不切无效图

我们经常会切出整张图都是透明的空白图。但是在AGS的切图中,是看不到这样的无效图的。我们可以在切图时先判断此范围内是否有要素存在,有的话就切,没有的话,continue掉。这样也可以减少切图的数目。

5.算法的进一步优化——支持经纬度地图切图

目前上面的所有过程,均只对做了投影转换的mxd有效,但是如果我们的mxd中的坐标系无投影转换只有一个地理坐标系呢,也就是当地图为经纬度坐标时,此时该如何实现切图?

其实思路也很简单,如果我们真正理解以上resolution的所代表实际意义,那么解决这个问题的思路就应该有了。

当地图为经纬度时,我们切图的比例尺设置应该改为切图的分辨率设置。这样我们就直接得到了每个级别的resolution,然后用resolution来切图即可。不用再做以上的将比例尺转换为resolution的步骤。

6.注意

在levelScaleArr中,里面的比例尺数字是随着index增加而增加的,但是比例尺数字越大,其对应的Level是越小的。所以我们在遍历Level层时,应该是一个递减的遍历,这样生成的L文件夹的编号才是正确的。

7.效果图

以下是效果图:

 

8.不足

(a).目前无法切出紧凑型(Compact)瓦片。解决思路,用上面的方法导出图后,需要把图变成二进制然后按照bundle的格式重新生成,并且还要生成索引文件bundleX。

(b).所用的AE毕竟是封装的很好的组件库了。用GDAL的话,由于封装层次低一些,效率应该会更好一些。

 

                                                                 -----欢迎转载,但保留版权,请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/

                                                                           如果您觉得本文确实帮助了您,可以微信扫一扫,进行小额的打赏和鼓励,谢谢 ^_^

                                    

时间: 2024-07-30 16:57:04

利用AE编写切图工具的一些探讨的相关文章

分享mapinfo tab GST格式 2011版数据 并提供mapinfo 切图工具 Arcgis shp地图QQ:1020592012

问题描述 分享mapinfotabGST格式2011版数据并提供mapinfo切图工具Arcgisshpmxd地图QQ:1020592012交流各种mapinfo和arcgis应用问题大家支持啊mapinfo切图工具可以分割任意区域的电子地图 解决方案 解决方案二:看看这个http://www.cnblogs.com/gisoracle/archive/2011/07/08/2100877.html解决方案三:看看学学毕恭毕敬解决方案四:我都有2012年的了呀.QQ交流:1175441108

HTML5自助切图

享受生活,热爱重构,大家好,我是Json. 在现在这个到处是HTML5话题的时代,好像不懂点HTML5都有点落伍.那我也跟上潮流一把吧,今天给大家分享的是基于HTML5的自助切图. 在组里经常会被某设计师叫切板仔,确实重构很大一部分工作都花在切图上,而如何提高切图效率或者让切图自助化也是我们重构师的追求.基于这个前提我自己抱着研究的心态,使用HTML5大致实现了一下.一开始觉得HTML5是个很神秘很高深的东西,其实当你去了解他,你会发现他是很空虚,且很容易上-----.手的. 这里使用到的HTM

聊聊原生APP切图那些事儿

  如何切图? 了解iphone界面的尺寸 最小的分辨率是320×480,我们把这个尺寸定为基准界面尺寸(baseline),基准尺寸所用的图标定为1倍图(1x). 在实际设计过程中,为了降低设计成本,一般拿设备最高的分辨率作为设计稿的原始尺寸,拿iphone来说就是iphone5或5s的640×1136啦,当然也可以用iphone4或4s的640×960,因为宽度都是640px,他们切图的标准是一样的.显然,以1倍图的基准尺寸(宽320px)为相对的参考依据,宽640px的设计稿,以原始尺寸切

CSS+div网页制作PS切图攻略

认识Photoshop(PS)CSS切图必用工具 Adobe PHOTOSHOP平时我们又被称为PS.   div CSS必备切图工具PS截图 多数人对于PHOTOSHOP的了解仅限于"一个很好的图像编辑软件",并不知道它的诸多应用方面,实际上,PHOTOSHOP的应用领域很广泛的,在图像.图形.文字.视频.出版各方面都有涉及. 请看下面介绍: 平面设计 平面设计是PHOTOSHOP应用最为广泛的领域,无论是我们正在阅读的图书封面,还是大街上看到的招帖.海报,这些具有丰富图像的平面印刷

页面制作部分之PS切图

原文: http://www.cnblogs.com/jingwhale/p/4396235.html      网页设计在技术层面上,第一步是美工做出网页效果图,第二步就是网页前端进行网页切图.网页切图工具常用的有fireworks.PS,这里使用PS进行网页切图.       我们通过设计稿,得到我们想要的产出物(如.png,.jpg文件),给网页提供图片素材(HTML:img,CSS:background). 一.使用PS工具 1.1 PS首选项设置 编辑->首选项->单位与标尺,选改为

WebGIS中矢量切图的初步研究

文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 在GIS领域,金字塔技术一直是一个基础性技术,WMTS规范专门制定了针对切片请求的格式.利用这种技术,前端可以快速展示出指定级别的地图或影像. 但是,由于切图本身是一张图片,图片上看似是兴趣点的要素根本无法进行前端交互.于是,针对兴趣点等矢量数据的展示,基本原理都是先获取到矢量的地理信息(比如GeoJson),在前端绘制(内核为一个element),于是该e

网站制作的切图技巧

一般的网站制作步骤大体上为:设计效果图–>切图+制作静态html模板–>嵌套至CMS,其中,切图虽然是很简单的一个步骤,但其中也有很多技巧,以下是我个人总结出来的几点. 总体上,把握一个原则,能用css写的,坚决不要用图片.经验告诉我们,首页图片很多的网站打开会很慢,一是因为图片多,需要下载的文件体积就增大,二是每一个图片下载都会对服务器有一个请求,增大了浏览器与服务端的交互次数,如果能把纯色的部分用css来写,而不因为省事直接切图,就会极大提高网站的运行效率,我最早开始学习制作网站时,就想当

自动切图神器Layer Cake:设计师们必备利器

文章描述:设计师的切图神器SLICY(LAYER CAKE)!. 自动切图工具「Slicy」Mac OS版(Layer Cake),真正解放设计师的神器!为切图黯然销魂的设计师们必备利器!推荐人:abo 阿里巴巴UI设计师 @zhuhuizero:这个软件我用了快半年了,之前叫LayerCake,半年更新了3次修复了一些bug,真的相当好用.让切图变的极为轻松,并且强迫你做好清晰合理的图层命名,帮你养成良好的工作习惯,官方有试用版,推荐设计师都用用这个. @aboXabo:链接提供的Slicy(

一款APP从设计稿到切图过程全方位揭秘

  我本身是一名GUI设计师,所以我只站在GUI设计师的角度去把APP从项目启动到切片输出的过程写一写,相当于工作流程的介绍吧.公司不同,流程不尽相同,但是终究还是能有些帮助. 依旧声明:这里写的不是一种规范,只是一种工作方法,大家在具体工作中,一定要灵活运用.另外,技术的更新是非常快的,我写的这些可能某些东西已经和你们的工程师搭档所用的方法不一样了,所以,还是要灵活运用~ 这里我们只说IOS系统下的设计,至于Android,因为尺寸太多,涉及的东西比较乱,我整理好以后再说吧. 页面篇幅比较长,