GIS算法基础(五)矢量数据向栅格数据的转换(点,线算法实现) | 您所在的位置:网站首页 › 边界代数算法例题 › GIS算法基础(五)矢量数据向栅格数据的转换(点,线算法实现) |
矢量结构数据与栅格结构数据的相互转换,是地理信息系统的基本功能之一,已发展形成了许多高效的转换算法。
源码已经放在github上了,需要朋友自取。 https://github.com/XiaoZhong233/GIS_ALG/blob/master/src/scau/gz/zhw/Raster.java 目录 一、矢量点的栅格化 二、矢量线的栅格化 ①八方向栅格化 算法思想: 算法实现: 测试: ②全路径栅格化 算法思想 算法实现: 测试结果: 一、矢量点的栅格化矢量点的栅格化: 实质是将点的坐标x、y换算为栅格行、列号。 注意:栅格的坐标原点是从左上角开始的,行数I向下递增,列数J向左递增 (X0,Y0)代表栅格的原点,dx,dy代表分别代表栅格的长和宽,也就是大小 实际代码中,这个x0,yo因为已知了栅格大小,所以可以求的出来。 在矢量数据向栅格数据转换的过程中,栅格数据可以用二维数组来表达。 /** * * @param point 带转化的矢量点 * @param xOffset 起始栅格点的x位移量 * @param yOffset 起始栅格点的y位移量 * @return 0-行 1-列 */ public int[] transformRasterPoint(Point point,double xOffset,double yOffset) { double x0=size+xOffset+this.xOffset;//栅格起始点坐标 double y0=ROW+yOffset+this.yOffset; int[] rowAndColumn = new int[2]; //像元大小默认为1 rowAndColumn[0] = (int) (1+ (Math.floor(Math.abs((y0-point.getY())/size)))); rowAndColumn[1] = (int)(1+(Math.floor(Math.abs((point.getX()-x0))/size))); return rowAndColumn; }测试结果: 输入: Raster raster = new Raster(30,30); //创建一个30x30的栅格 Point p = new Point(.5, .5); System.out.println(p); int[] a = raster.transformRasterPoint(p, 0, 0); System.out.println(String.format("I=%d,J=%d", a[0],a[1]));输出: (0.500000,0.500000) I=30,J=1 二、矢量线的栅格化 ①八方向栅格化八方向栅格法很容易理解,就是已知直线的倾角情况,在每行或每列只有一个像元被涂黑。 算法思想: 一条线段有两个端点:P1(x1,y1)、P2(x2,y2),先分别确定其行列号(I1,J1)及(I2,J2),然后求出这两个端点位置的行数差和列数差。 若行数差大于列数差,则逐行求出本行中心线与过这两个端点的直线的交点(X,Y),得到交点行、列号,将交点“涂黑”:Y=yi行中心线,X |
CopyRight 2018-2019 实验室设备网 版权所有 |