ArcGIS 切图属性之DPI详解

在ArcGIS切图的属性设置中,有一个不起眼的属性我们一直没有怎么注意——DPI,关于DPI官方帮助文档历来都是一笔带过,一般就是说默认的96DPI足够了,不用调整,这个属性我们也是建议用户不调整的。那么这个属性到底有什么用呢?

在开始之前,我们先得了解什么是DPI (DPI的wikipedia定义)。首先我们需要明确的一点是:DPI是和打印相关的属性,离开了打印这个需求,DPI这个属性是没有存在的意义的。

关于DPI我们需要理解,它定义了在一英寸(2.54cm)的距离上,打印机所打印的点数,所以它是一个密度单位(类似于速度),DPI跟你打印多大的尺寸没有关系。

DPI说完了,我们再来看另外一个非常容易和DPI混淆的概念——显示器的像素(pixel)。显示器的像素是显示的最小显示单位,一个像素内只能显示一种颜色,在32位真色彩下这个颜色有 2的32次方种选择,所以我们在电脑屏幕上看到的画面还是非常丰富多彩的,参考下图以助于理解,10*10个pixel就能较完整的显示一个圆了。


我们常见的屏幕分辨率 1920*1080,1200*800、图像的大小256*256 等等等等,这些数字代表的都是pixel,pixel是电脑上显示的元单位。

好了,在开始我们的ArcGIS切片之前,先温习一下上面两个概念,然后心中默念100遍“DPI和 pixel木有关系,木有一毛钱关系”,然后开始我们的切片之旅吧!

理解一个属性最好的方法就是对比了,我们先来发个中国地图服务:


同一个地图文档,我们发布两个地图服务,一个叫china96(准备切96dpi的切片),一个叫china192(准备切192dpi的切片),切片的具体属性如下:


另外一个 96dpi的属性就不贴了,除了dpi,两者的其他切片属性都是一样的(4个级别 64,000,000 到8,000,000,切片格式jpg,质量75,离散型切片)

下面我们去缓存目录看看生成的缓存有什么不同:


先来看看切片的根目录,因为两者都是切了一模一样的scale,所以都是4级切片目录,木有错,然后我们再深入一点…进入L00级:


进去以后,我们发现192dpi的缓存数量比96dpi的要多很多(坑爹!)再进入下一级(row)


好吧,我们看到L00 比例尺下 ,96dpi的切片个数是 2*3=6个(大小都是256*256的切片…),192dpi的切片个数是 4*4=16个。是不是完全纠结了……比例尺一样的情况下,192的切片拼起来能比96的切片拼起来大这么多……

先放下纠结,回到之前默念100遍的东西上:图片大小(width, height, pixel) 和DPI 木有关系!也就是说图片在电脑上是什么样的,和它打印出来是什么样的是两码事。那么我们怎么能增大图片的DPI呢?

之前已经说过pixel是图片在电脑上显示的元单位,也是jpg、png等栅格类型的图像格式的元单位,它不能在被细分了,我们假设1个pixel对应着打印机的一个dot(好吧,这里确实是有那么点关系,实际情况可能不是1:1的对应关系,为了方便理解。)那么我们要增大DPI一倍,只能多画一倍的点,然后规定这张图片打印出来还是原来之前那么长(从这个逻辑来说图片的像素和DPI没有关系,DPI只是图片的一个附加属性,它定义了图片打印时应遵守的行为)。说道这里可能会有问题了,为啥192dpi的切片不是96dpi切片的4被呢,它们不应该是长宽都为1:2的关系吗?

我们先来看下面这张图片:


虽然这么看不是很准确,但是左边(96dpi)中国的部分,是不是相当于右边(192dpi)中国部分的二分之一?之所以造成96 vs 192 不是准确的4被关系,原因是左右两边的tiling schema(切图方案) 除了dpi,其他属性是完全一样的,即可以想象成切片的网格是不变的,你把中国地图放大一倍,中国这个要素(准确的说是中国这个要素的Extent)所覆盖的切片数就不一定是准确的4被关系了~~

为了进一步验证这个猜想,我们再来看96dpi的L01级切片和192dpiL00级切片的对比:



这两张图信息量有点大,我稍微解释一下,把96dpi的放大一倍,结果切片就跟192dpi上一级切片完全吻合了!可以看到里面图片的属性都是一模一样的,具体属性我就不截图的,他们图片的唯一区别就是,左边图片的dpi是 96,右边图片的dpi是192,这有更加验证了dpi只是图片的附加属性,完全不影响图像二进制栅格中所存储的值。

好,下面我们来干一个更加纠结的是,把这两个缓存都加入ArcMap中:


我们可以看到,肉眼来看,两个切片是完全一样的(无视96dpi的头顶部分,漏了一块切片。。。),那么ArcMap是怎么达到这个效果的呢,为了保证比例尺一定,即图片大小一致,那么ArcMap只能压缩192dpi的切片大小了(压小3/4)。压缩图片大小这个本事,Web API 可没有了,所以API 加载192dpi的缓存地图的话,会把比例尺放大一倍……

在来看看Rest API 的出图以加深理解:


我们限定了export map的出图大小400*400,然后一个出96dpi,一个出192dpi,可以看到限定了切片拼起来的总大小,限定了要显示的空间范围extent,那我这个 192dpi的大图怎么显示全图? 没有办法,只能缩小比例尺了(增大分母),为啥右图中的symbol,label会显得这么大呢? 因为我们知道 symbol,label是独立与比例尺的,我们把右图的比例尺缩小,要素可以缩小,但是动态标注的label,symbol大小是不会变的,故而会显得变大了。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值