GIS算法基础(五)矢量数据向栅格数据的转换(点,线算法实现) 您所在的位置:网站首页 边界代数算法例题 GIS算法基础(五)矢量数据向栅格数据的转换(点,线算法实现)

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

2024-07-04 04:01| 来源: 网络整理| 查看: 265

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

 

源码已经放在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 实验室设备网 版权所有