地图符号在地图中作用是不言而喻的,地图符号的开发也是GIS平台的重要一部分,也是比较难的。本文对写出了面状符号的图片填充和渐变色填充的实现方法。也许我的思路不是最好的。
熟悉ArcMap的都知道它有着丰富的地图符号库,其地图符号制作器采用目前最先进的符号制作与组合思想,功能很强大。许多GIS软件都以此为模板开发自己的符号库软件。当然我们也是,毕竟站在巨人肩膀上看得更远。
面状符号的图片填充就是利用预先制作好的图片,然后按照顺序排列填充shape,该方法具有逼真等特点,是一种很重要的渲染方式。在Java语言里有一个类TexturePaint,该类可以使用图片对shape进行渲染的。该类具体应用请参看JDK文档。在ArcMap里,可以整体调整图片的角度来适应不同的需要,如何处理多个图片的整体角度是一个比较难的问题。
开始,我采用对图形环境进行AffineTransform的适当变换,实现了整体图片的旋转,但是由于旋转前已经根据shape的外包矩形的大小生成了图片,经过旋转后的图片就有可能不能完全填充shape的可能,就会出现黑屏的现象。而且从理论上讲,该方法会很慢,该方法走不通。
接下来,我采用旋转图片的方法,这样的后果是shape里的各个图片都围绕自己的中心改变,就得不到整体旋转的效果,该方法也走不通。
最后我仔细分析ArcMap的绘制效果,在加上长时间的思考,最后想到了何不根据图片再生成一个图片,这个图片要能完全包含shape,这样就要得到shape的外包矩形,然后以该矩形的对角线为边长,这样新图片的大小就是 对角线x对角线 的一个正方形,只要把该正方形的中心移到shape的外包矩形的中心,这样不管图片怎样旋转,始终都会包含shape,所以达到了渲染的效果。
总之,该方法主要思想是利用图片生成一个完全包含shape的图片,然后旋转图片,这样就达到了ArcMap的渲染效果,虽然很简单的思想,但是我确想了两天,(也许我太笨);
对于渐进色的填充,基本思想和图片填充差不多,关键是用颜色(在ArcMap里是根据Inteval的多少,来对颜色段进行划分的)对这个足够大的矩形(也就是上面提到的正方形)进行填充,然后生成一个图片,接下来就和图片填充一样了。
|