利用AE制作切图工具的一些探讨

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.注意

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

6.效果图

以下是效果图:

7.不足

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

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

时间: 2024-12-25 05:49:17

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

瓦片切图工具gdal2tiles.py改写为纯c++版本

gdal2tiles.py是GDAL库中用于生成TMS瓦片的python代码,支持谷歌墨卡托EPSG:3857与经纬度EPSG:4326两种瓦片,输出png格式图像. gdal2tiles.py More info at: http://wiki.osgeo.org/wiki/Tile_Map_Service_Specificationhttp://wiki.osgeo.org/wiki/WMS_Tiling_Client_Recommendationhttp://msdn.microsoft.

前段切图工具---Mark Man

前段切图工具---Mark Man Mark Man是一款非常不错的切图工具,当我们拿到设计图时,可以将图片拖进Mark Man中,然后我们就可以利用Mark Man来量取尺寸(注意:不论你放大还是缩小图片,量出来的尺寸都是不会改变的). 获取颜色值.备注等等.总之,这款软件值得拥有. 安装步骤如下: 第一步:进入官网下载. 第二步:由于我们得到的是air类型的文件,所以必须下载Adobe Air Runtime. 第三步:安装Adobe Air Runtime, 此时就能正常打开Mark Ma

切图工具上线了

百度地图离线开发,用在内网于局域网项目开发上,完全脱离互联网访问,可支持完整的全国瓦片图下载,使用目前最新的V2.0百度API,BS架构,CS架构,支持热力,聚合,海量标注,根据范围米数来圈范围,画图工具等完全支持.http://api.jjszd.com:8081/apituiguang/gisysw.html 切图工具上线了,用于大图切成百度瓦片,无缝对接,无偏移,所见即所得的效果,图片直接地图上拖动,点击切图,显示在哪就切在哪.免费下载地址: http://www.jjszd.com/Ma

fabric.js的简单上手及基于fabric.js的canvas切图工具:1、基本使用及配置

参考链接 Fabric.js 简单介绍和使用 简介 Fabric.js是一个可以简化canvas程序编写的库. Fabric.js为canvas提供所缺少的对象模型, svg parser, 交互和一整套其他不可或缺的工具.基于MIT协议开源,在github上有许多人贡献代码. 为什么选择fabric.js 手上的项目必须使用canvas 原生的canvas API不够友好 用fabric.js实现切图用户体验更好 为项目以后的迭代留下扩展的余地 简单上手 请参考文章开头的参考链接 这里主要介绍

利用PS自动切图、支持svg且支持icoMoon——再也不用四处去转格式了

今天想导出svg格式的图片支持webFont,结果AI打不开了,文件好像损坏了,于是就想办法在PS里面导出. 网上搜索到一篇文章,腾讯的 http://isux.tencent.com/ps-photoshop-cc-fd.html, 同时还会引用到一个三方脚本  http://hackingui.com/design/export-photoshop-layer-to-svg/ , 三方脚本的一篇文章 http://www.ui.cn/detail/53284.html. 最终找到了解决办法,

PS切图工具

# Cutterman 3.2安装指南 当前版本: 3.2 适用于MAC/WIN 下的PS CC/CC2014/CC2015版本,注意不支持CS6 !!! 注意 !!! 更新cutterman的同学,请阅读##卸载安装##的步骤!!!注意结束 !!! ## 这里有安装的视频教程,请查看http://www.cutterman.cn/v2/installation ## 第一次安装(之前没安装过Cutterman)1. 打开PS2. 菜单栏 文件->脚本->浏览,选择当前目录下的“第一次安装.j

利用cocosStudio制作合图(plist与png)

页面制作部分之PS切图

页面制作部分之PS切图 <--本标签下,通过页面制作.页面架构.javascript程序设计.DOM编程艺术.产品前端架构五部分来分享总结笔记,总结笔记会陆续分享--> 网页设计在技术层面上,第一步是美工做出网页效果图,第二步就是网页前端进行网页切图.网页切图工具常用的有fireworks.PS,这里使用PS进行网页切图. 我们通过设计稿,得到我们想要的产出物(如.png,.jpg文件),给网页提供图片素材(HTML:img,CSS:background). 一.使用PS工具 1.1 PS首选

【切图】切图小知识

最近在学习前端,所以萌生了对切图的学习,接下来分享下我的学习历程吧~ 1.切图其实并不是直译的就是将图片切开那么简单,那么切图到底是什么意思呢? 切图概念:切图是指将设计稿切成便于制作成页面的图片,并完成html+css布局的静态页面,有利于交互,形成良好的视觉感.通俗来讲,把一张设计图利用到切片工具 把自己所需的切成一张张小图,然后用DIV+CSS完成静态页面书写,完成CSS布局. 2.切图工具:主流是dreamweaver.photoshop软件,还有sketch.firework等,低端Q