GIS算法基础(五)矢量数据向栅格数据的转换(点,线算法实现)

本文介绍了GIS中矢量数据向栅格数据转换的基础算法,包括点的栅格化和线的栅格化。重点讨论了八方向栅格化和全路径栅格化算法的思想及实现,提供了测试案例,并给出了算法在不同场景下的应用特点。
摘要由CSDN通过智能技术生成

矢量结构数据与栅格结构数据的相互转换,是地理信息系统的基本功能之一,已发展形成了许多高效的转换算法。

 

源码已经放在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

二、矢量线的栅格化

①八方向栅格化

八方向栅格法很容易理解,就是已知直线的倾角情况,在每行或每列只有一个像元被涂黑。

算法思想:

  1. 一条线段有两个端点:P1(x1,y1)、P2(x2,y2),先分别确定其行列号(I1,J1)及(I2,J2),然后求出这两个端点位置的行数差和列数差。
  2. 若行数差大于列数差,则逐行求出本行中心线与过这两个端点的直线的交点(X,Y),得到交点行、列号,将交点“涂黑”:Y=yi行中心线,X=(yi-y1)k+x1&#x
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值