GIS中的计算几何
gis面要素面积计算
gis面要素面积计算
在GIS中,要素面积的计算通常涉及以下步骤:
1. 数据准备:首先需要准备包含要素几何数据的矢量数据集,例如点、线、面等。
2. 投影转换:如果数据集的坐标系统不是投影坐标系统,需要进行投影转换,以确保面积计算的准确性。
3. 要素化:如果数据集是线或面数据,需要将其转换为要素(即面要素),通常使用多边形填充等方法进行要素化。
4. 面积计算:对于要素,可以使用面积计算函数或工具进行面积计算。
常见的面积计算方法包括:
- 平面面积计算:对于投影坐标系,可以使用平面几何方法,如根据顶点坐标计算三角形的面积等。
- 大地面积计算:对于地理坐标系,需要考虑大地曲率的影响,可以使用球面三角形法或椭球面面积计算公式等。
需要注意的是,面积计算结果可能受到多种因素的影响,包括输入数据的精度、数据投影转换的准确性等。
因此,在进行面积计算前,应仔细检查和验证数据,并根据需要进行必要的数据处理和质量控制。
GIS中的计算几何
GIS中的计算几何GIS是一个图形系统,必然会涉及到几何学上理论应用,比如,图形的可视化,空间拓扑分析,GIS图形编辑等都需要借助几何。
向量几何是用代数的方法来研究几何问题,首先,请大家翻一翻高等数学里有关向量的章节,熟悉一下几个重要的概念:向量、向量的模、向量的坐标表示、向量的加减运算、向量的点积、向量的叉积...下面我们将用这些基本概念来解答GIS中一些几何问题。
一,点和线的关系。
点是否在线段上,这样的判断在图形编辑,拓扑判断(比如,GPS跟踪判断是否跑在线上)需要用到这样的判断。
通常的想法是:先求线段的直线方程,再判断点是否符合这条直线方程,如果符合,还要判断点是否在线段所在的矩形区域(MBR)内,以排除延长线上的可能性,如果不符合,则点不在线段上。
这种思路是可行的,但效率不高,涉及到建立方程,解方程。
借助向量的叉积(也叫向量的向量积,结果还是向量,有方向的)可以很容易的判断。
设向量a=(Xa,Ya,Za) b=(Xb,Yb,Zb) 向量叉积a X b如下:二维向量叉积的模|a X b|=|a|*|b|*sinα=|Xa*Yb-Ya*Xb| (α是向量a,b之间的夹角),向量叉积模的几何意义是以向量a,b为邻边的平行四边形的面积。
可以推测:如果两向量共线,向量叉积模(所代表的平行四边形的面积为零) 则|a X b|=|a|*|b|*sinα=|Xa*Yb-Ya*Xb|=0,否则不共线,叉积的模为非零,根据这样条件可以很轻松的判断点和线的关系,避免了建立方程和解方程的麻烦。
向量叉积的模|AB X AC|=0即可判断C点在AB所确定的直线上,再结合C点是否在AB所在的MBR范围内,就可以最终确定C是否在AB线段上。
关于点和线段的其他关系,都可以通过叉积的求得,比如判断点在线的哪一侧,右手法则,可以通过 a X b=(Xa*Yb-Ya*Xb)*k中的(Xa*Yb-Ya*Xb)正负来判断。
留给大家思考,很简单的,呵呵…二,线和线的关系判断两条线段是否相交,在很多拓扑判断和图形编辑(比如,线的打断来构建拓扑,编辑线对象,叠置分析,面与面关系的判断等) 中都需要用到线线相交的判断,如果两条线段相交,一条线段的两端点必然位于另一条线段的两侧(不考虑退化情况,也就是一条线段的端点在另一条线段上,这个很容易判断)两向量的叉积a X b= (Xa*Yb-Ya*Xb)*k ,分别判断AB X AC的方向与AB X AD的方向是否异号,再判断CD X CA 的方向与CD X CB的方向是否异号即可判断两线段是否相交。
GIS算法基础——计算点到直线、射线、线段的距离
点到线距离的计算1、作业说明1.1 任务点到线距离的计算(包括直线、射线、线段)1.2 要求人机交互,鼠标屏幕取点进行计算,输出计算结果2、程序说明2.1 大体上分三步进行:2.1.1 首先进行画线操作:鼠标在屏幕上取两点(鼠标左键两点)1、画线段直接利用DrawLine函数,将在屏幕上获取的两点坐标传递给函数的参数即可。
2、画直线由于直线是无限的,所以此时要借助于屏幕上所取两点的直线方程,通过求出与所在容器边缘的交点,结合具体情况,将求出的交点的坐标传递给DrawLine函数的参数,即可画出当前范围内的直线形状。
3、画射线画射线与画直线的思路大致相同,不过需判断射线的方向,此处借助所取的第二个点和第一个点的位置关系判断方向,最后再将所取的第一个点和求得的射线方向与容器边缘的交点坐标传递给DrawLine函数的参数即可。
2.1.2 开始绘制第三个点(鼠标右键取该点)借助于DrawEllipse函数(详情参见代码部分)2.1.3 线和点绘制完成后,开始进行距离的计算1、点到直线的距离:可直接利用点到线之间的距离公式2、点到线段的距离:由于点在线段上的投影可能不在线段上,故还需要求出点到线段两端点坐标的距离,再将最小值作为结果输出3、点到射线的距离:同理,若点的投影不在射线上,则其最小距离为点到射线起始端点的距离2.2 窗体界面介绍首先是ComeBox,对其添加三项:计算点到线段的距离、计算点到直线的距离、计算点到射线的距离在PictureBox里进行点和线的绘制,在TextBox里显示点到线的距离值3、源代码using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;namespace me{public partial class Form1 : Form{public Form1(){InitializeComponent();}//首先定义两个变量:屏幕上所取的两个点private Point m_ptStart; private Point m_ptEnd;//定义两个集合:myplist存放用于画线的两个点,pt存放第三个点List<Point> myplist = new List<Point>();List<Point> pt = new List<Point>();//result用来存放点到线的距离值double result;//自定义方法:两点之间的距离double ptdis(Point p0, Point p1){return System.Math.Sqrt((p1.X - p0.X) * (p1.X - p0.X) + (p1.Y - p0.Y) * (p1.Y - p0.Y));}//自定义最大最小值函数double max(double x, double y){return x > y ? x : y;}double min(double x, double y){return x > y ? y : x;}//自定义方法:点和线之间的距离double pldis(Point p0, Point p1, Point p2){double result;double A = p2.Y - p1.Y;double B = p1.X - p2.X;double C = p2.X * p1.Y - p1.X * p2.Y;result = System.Math.Abs(A * p0.X + B * p0.Y + C) /System.Math.Sqrt(A * A + B * B);return result;}//自定义方法:获取点在线上的投影Point GetProjectPt(Point p0, Point p1, Point p2){Point ProjectPt=new Point();if (p2.X == p1.X){ProjectPt.X = p1.X;ProjectPt.Y = p0.Y;}else{double k = (p2.Y - p1.Y) / (p2.X - p1.X);ProjectPt.X = (int)((k * p1.X + p0.X / k + p0.Y - p1.Y)/(k+1/k));ProjectPt.Y = (int)(-1 / k * (ProjectPt.X - p0.X) + p0.Y);}return ProjectPt;}/*当comboBox1里面的项改变时,清除之前的所有数据比如计算点到直线的距离时,清除点到线段的距离*/private void comboBox1_SelectedIndexChanged(object sender, EventArgs e){myplist.Clear();textBox1.Text = "";Graphics g = pictureBox1.CreateGraphics();g.Clear(Color.White);}// 对pictureBox1的MouseDown事件进行编辑,当鼠标按下时,会产生哪些操作private void pictureBox1_MouseDown(object sender, MouseEventArgs e){Pen blue = new Pen(Color.Blue, 3);Graphics g = pictureBox1.CreateGraphics();//当按下鼠标左键时,在屏幕上取两点画线if (e.Button == MouseButtons.Left){Point p = new Point(e.X, e.Y);myplist.Add(p);}//当按下鼠标右键时,在屏幕上取第三个点if (e.Button == MouseButtons.Right){Point p = new Point(e.X, e.Y);pt.Clear();//改变所取的第三个点时,清除上一次的数据(距离)和图形(点)g.Clear(Color.White);pt.Add(p);//此处将第三个点画成椭圆形式g.DrawEllipse(blue, pt[0].X, pt[0].Y, 1, 1);//在取点的同时,进行点到线距离的计算,并将结果值显示在textBox1上Point p3 = new Point();p3 = GetProjectPt(pt[0], m_ptStart,m_ptEnd);//获取点在线上的投影点//分情况讨论if(comboBox1.Text=="计算点到线段的距离"){if (p3.X >max(m_ptStart.X,m_ptEnd.X ) || p3.X < min( m_ptStart.Y,m_ptEnd.Y)){//点在线段上的投影不在线段上double dis1 = ptdis(pt[0], m_ptStart);double dis2 =ptdis(pt[0], m_ptEnd);result = min(dis1, dis2);}elseresult = pldis(pt[0], m_ptStart, m_ptEnd);}if(comboBox1.Text=="计算点到射线的距离"){if (p3.X < myplist[0].X) //点在射线上的投影不在射线上result = ptdis(pt[0], m_ptStart);elseresult = pldis(pt[0], m_ptStart, m_ptEnd);}if (comboBox1.Text == "计算点到直线的距离")result = pldis(pt[0], m_ptStart, m_ptEnd);textBox1.Text = result.ToString(); //将结果显示在textBox1上}//开始画线if (myplist.Count > 1){//A、B、C分别是直线一般方程中的三和参数,即A*x+B*y+C=0double A = myplist[1].Y - myplist[0].Y;double B = myplist[0].X - myplist[1].X;double C = myplist[1].X * myplist[0].Y - myplist[0].X * myplist[1].Y; //通过switch语句,输入comboBox1的文本内容,判断将要进行哪一种操作switch (comboBox1.Text){case"计算点到线段的距离":{ //起点和终点即为屏幕上所取的两个点m_ptStart = myplist[0];m_ptEnd = myplist[1];break;}case"计算点到直线的距离"://画直线时,需要将起始点和pictureBox1容器边缘交点联系起来{ //起点坐标m_ptStart.Y = 0;m_ptStart.X = (int)(-C / A);//终点坐标m_ptEnd.Y = pictureBox1.Height;m_ptEnd.X = (int)(-(C + B * m_ptEnd.Y) / A);break;}case"计算点到射线的距离"://画射线时同样要考虑到线与pictureBox容器边缘的交点,比较困难的是判断射线方向(借助于所取两点的位置关系){Point p0 = new Point();Point p1 = new Point();//起点坐标if (myplist[1].Y == myplist[0].Y){p0.Y = myplist[0].Y; p0.X = 0;p1.Y = myplist[0].Y; p1.X = pictureBox1.Width;}else{p0.Y = 0;p0.X = (int)(-C / A);//终点坐标p1.Y = pictureBox1.Height;p1.X = (int)(-(C + B * p1.Y) / A);}//结合所取两点的位置关系确定最终传递给DrawLine的是哪两点if (myplist[1].Y >= myplist[0].Y){m_ptEnd.X = p1.X;m_ptEnd.Y = p1.Y;}else{m_ptEnd.X = p0.X;m_ptEnd.Y = p0.Y;}m_ptStart = myplist[0];break;}}g.DrawLine(blue, m_ptStart, m_ptEnd);//画线}}}}4、结果展示实现功能:首先在下拉列表中选择将要计算点到哪种线的距离,选择好后,鼠标左键取两点自动画线,之后鼠标右键取点,在取点的同时,会自动显示距离值,并且在选取下一个点时,上一组的数据自动清除4.1 计算点到线段的距离4.2 计算点到直线的距离:4.3 计算点到射线的距离。
GIS算法的计算几何基础
GIS算法的计算几何基础矢量的概念:如果一条线段的端点是有次序之分的,我们把这种线段成为有向线段(directed segment)。
如果有向线段p1p2的起点p1在坐标原点,我们可以把它称为矢量(vector)p2。
矢量加减法:设二维矢量P = ( x1, y1 ),Q = ( x2 , y2 ),则矢量加法定义为: P + Q = ( x1 + x2 , y1 + y2 ),矢量减法定义为: P - Q = ( x1 - x2 , y1 - y2 )。
显然有性质 P + Q = Q + P,P - Q = - ( Q - P )。
矢量叉积:计算矢量叉积是与直线和线段相关算法的核心部分。
设矢量P = ( x1, y1 ),Q = ( x2, y2 ),则矢量叉积定义为由(0,0)、p1、p2和p1+p2所组成的平行四边形的带符号的面积,即:P × Q = x1*y2 - x2*y1,其结果是一个标量。
显然有性质P × Q = - ( Q × P ) 和P × ( - Q ) = - ( P × Q )。
两点的加减法就是矢量相加减,而点的乘法则看作矢量叉积。
叉积的一个非常重要性质是可以通过它的符号判断两矢量相互之间的顺逆时针关系:若P × Q > 0 , 则P在Q的顺时针方向。
若P × Q < 0 , 则P在Q的逆时针方向。
若P × Q = 0 , 则P与Q共线,但可能同向也可能反向。
折线段的拐向判断:折线段的拐向判断方法可以直接由矢量叉积的性质推出。
对于有公共端点的线段p0p1和p1p2,通过计算(p2 - p0) × (p1 - p0)的符号便可以确定折线段的拐向:若(p2 - p0) × (p1 - p0) > 0,则p0p1在p1点拐向右侧后得到p1p2。
若(p2 - p0) × (p1 - p0) < 0,则p0p1在p1点拐向左侧后得到p1p2。
ArcGIS计算面积或者长度
ArcGIS计算面积或者长度
ArcGIS计算面积或者长度
用一副遥感影像作为底图配准后进行矢量化,想要求出上面每个图斑面积的大小
方法1:
首先应该把地理坐标(经纬度)转换为投影坐标。
然后打开多边形的attribute table, 里面有一个功能叫calculate geometry 方法2:
打开要计算的shape文件的属性表,添加一个叫area的字段,然后选择area这个字段,右击,calculate,打开对话框后,点advanced的复选框,把下面的代码拷入就可以了.
Dim dblArea as double
Dim pArea as IArea
Set pArea = [shape]
dblArea = pArea.area
方法3:
如果shape文件有真实的坐标,把shape转化为geodatabase中的feature class,面积字段就直接出来了。
方法4:
TOOLBOX下的空间分析里IDENTIFY
需要说明的是:面积单位根据你当前数据的地理坐标单位,如果是米,则是平方米,如果是公里,则是平方公里.可以转换为平方公里,公顷,亩等.但如果是经纬度,则仅仅是经纬度作为平面单位的几何值.。
GIS算法的计算几何基础2
都要好写且不易出错。
24
弧长法
将坐标原点平移到被测点P,这个新坐标系将平面划分 为4个象限,对每个多边形顶点P ,只考虑其所在的象 限,然后按邻接顺序访问多边形的各个顶点P[i],分析 P[i]和P[i+1],有下列三种情况: (1)P[i+1]在P[i]的下一象限。此时弧长和加π/2; (2)P[i+1]在P[i]的上一象限。此时弧长和减π/2; (3)P[i+1]在P[i]的相对象限。 首先计算f=y[i+1]*x-x[i+1]*y(叉积), 若f=0,则点在多边形上; 若f<0,弧长和减π; 若f>0,弧长和加π。 最后对算出的代数和和上述的情况一样判断即可。
1 1 wn d 2 2
(u)du
0
16
1
5.2 转角法
若曲线C是由顶点V0,V1,…,Vn=V0构成的多边形,那么积分可 以简化为计算带符号的角度的总和。这些角PVi与PVi+1的夹 角。因此,如果i=angle(PVi,PVi+1),则
1 wn 2 1 i 2 i 0
《GIS算法基础》第二章
GIS算法的计算几何基础(2)
1
1 判断矩形是否包含点 2 判断线段、折线、多边形是否在矩形中
本 讲 内 容
3 判断矩形是否在矩形中
4 判断圆是否在矩形中
5 判断点是否在多边形内 6 判断线段是否在多边形内 7 判断折线是否在多边形内 8 判断多边形是否在多边形内 9 判断矩形是否在多边形内 10 判断圆是否在断点是否在多边形内
两种方法比较:
上图中,重叠区域的点被环绕两次,证明点在多边形内 部两次,但射线法测试的结果为点在多边形外。环绕法 的结果更加合理。
arcgis 几何计算 详解
arcgis 几何计算详解摘要:1.ArcGIS 几何计算概述2.常用的几何计算工具3.几何计算的具体操作步骤4.几何计算的应用实例5.总结正文:一、ArcGIS 几何计算概述ArcGIS 是一款功能强大的地理信息系统软件,它集成了地理数据处理、管理、分析和可视化等功能。
在众多功能中,几何计算是其中的一项重要功能。
几何计算可以帮助用户对地理空间数据进行各种复杂的数学运算,从而满足空间数据分析和应用的需求。
二、常用的几何计算工具ArcGIS 中提供了丰富的几何计算工具,主要包括以下几类:1.简单几何计算:包括点、线、面等基本要素的创建、删除和修改等操作。
2.几何变换:包括平移、旋转、缩放等几何变换操作。
3.几何关系:包括空间关系的查询和计算,如相交、相离、包含等。
4.几何测量:包括面积、长度、角度等几何量的计算。
5.几何模拟:包括随机点、随机线、随机面等随机几何体的生成。
三、几何计算的具体操作步骤以计算两个多边形区域的交集为例,具体操作步骤如下:1.打开ArcGIS 软件,加载需要进行几何计算的地图数据。
2.在“地理处理工具”或“模型构建器”中,找到“几何计算”工具集。
3.选择“几何计算”工具集,找到“区域相交”工具,点击并将鼠标移至需要相交的两个多边形区域上,鼠标变为一个小方框,点击并拖动鼠标框选择两个多边形区域。
4.点击“确定”,完成相交操作。
结果将显示在图层中。
四、几何计算的应用实例1.城市规划:通过几何计算,可以分析不同区域的空间关系,为城市规划提供参考。
2.土地利用:通过几何计算,可以计算不同地类的面积,为土地利用提供数据支持。
3.自然资源管理:通过几何计算,可以分析自然资源的空间分布规律,为自然资源管理提供依据。
4.环境评估:通过几何计算,可以分析污染物的空间扩散规律,为环境评估提供数据支持。
五、总结ArcGIS 几何计算功能为用户提供了丰富的空间数据处理手段,可以帮助用户对地理空间数据进行各种复杂的数学运算。
GIS算法的计算几何基础3解析课件
▪ 如果距A点最近,则D点的位置为:
xD =xA + (xA — xB) • d/L yD 第三步:连接D点与点A、B中距P点的最近点即为所求延
长线。
思考:算法是否完善?
20
12.三点画圆
通过已知三点a、b、c画圆
算法的关键是求取圆心和圆半径。
▪ 第一步:求取圆心P。设三点为a、b、c,则令:
选择已有线段AB,以已有线段 为极轴,输入角度a和长度d求 点P坐标。
▪ 第一步:计算有向线段AB的长度L
▪ 第二步:根据有向线段AB坐标计算
dx = xB — XA ,dy = yB — yA
▪ 第三步:以A点义为基点旋转有向线段AB,则
dx dx cos a dy sin a dy dx sin a dy cos a
▪ 第三步:按照如下公式求取E、F点:
错误!!!xE =xA + dx, yE = yA + dy xF = xA + dx,yF = yA + dy
思考正确的算法?
▪ 第四步:连接E、F点,则线段EF为所
求平行线。
18
10.过点作平行线
伪代码?
选择一条已有线段AB,选择点P,选一点C, 以C点为端点作平行于线段AB的平行线CD, 线段CD的长度与线段AB相等。
xp xA L(xB xA) H ( yB yA)
▪ 式中
yp yA L( yB yA) H (xB xA)
L
1 S AB
Sb2
S
2 AB
Sa2
2S
2 AB
H
h S AB
Sb2
S
2 AB
L2
G
g S AB
gis常用公式
gis常用公式GIS(地理信息系统)是一种用于获取、存储、分析和展示地理数据的技术。
它通过整合地理空间数据和属性数据,提供了一种全面、直观的方式来理解地理现象和问题。
在GIS中,有许多常用的公式和技巧,下面将介绍几个常见的GIS公式。
1. 距离计算公式在GIS中,我们经常需要计算两个位置之间的距离。
这可以通过计算两点之间的欧几里得距离来实现。
假设有两个点A和B,它们的坐标分别为(x1,y1)和(x2,y2)。
那么这两个点之间的距离d可以用以下公式计算:d = ((x2-x1)^2 + (y2-y1)^2)^(1/2)2. 面积计算公式在GIS中,我们经常需要计算多边形的面积。
这可以通过计算多边形的边界和顶点坐标来实现。
假设有一个多边形,它的边界由一系列点的坐标组成。
那么这个多边形的面积A可以用以下公式计算:A = (1/2) * |(x1*y2 + x2*y3 + ... + xn*y1) - (y1*x2 + y2*x3 + ... + yn*x1)|3. 插值公式在GIS中,插值是一种用于推测未知区域值的方法。
常用的插值方法之一是反距离加权插值法(IDW)。
假设有一组已知点的值和坐标,我们想要推断其他位置的值。
那么某一位置的值可以通过以下公式计算:V = (w1*v1 + w2*v2 + ... + wn*vn) / (w1 + w2 + ... + wn)其中,vi表示已知点i的值,wi表示位置与已知点i之间的距离的倒数。
4. 空间缓冲区公式在GIS中,空间缓冲区是一种用于分析和展示与某个位置或要素相邻的区域的方法。
假设有一个点或线或面,我们想要找到与它相邻的区域。
那么可以通过以下公式来计算缓冲区的边界:B = P + r其中,B表示缓冲区的边界,P表示点或线或面的边界,r表示缓冲区的半径或宽度。
以上是几个常用的GIS公式,它们在地理信息系统中起着重要的作用。
通过运用这些公式,我们可以更好地理解和分析地理现象,并为地理决策提供支持。
GIS算法的计算几何基础
GIS算法的计算几何基础GIS(地理信息系统)中的算法主要应用于计算几何基础。
计算几何是数学的分支,研究由数学对象(如点、线、多边形等)组成的空间结构和它们之间的相互关系。
在GIS中,计算几何的目标是研究和解决地理空间数据的几何问题,例如地图投影、数据集成、空间分析等。
1.点线面的表示与计算在GIS中,地理实体通常用点、线、面的集合表示。
计算几何算法中,点线面的表示与计算是基础操作。
点的坐标通常用笛卡尔坐标系表示,计算中常涉及到点之间的距离、方位角等。
线段可以用两个端点表示,计算中常涉及到线段之间的相交、距离等。
面由闭合的多边形表示,计算中常涉及到面之间的包含关系、交集等。
2.地图投影地图投影是将地球表面上的经纬度坐标(球面坐标)映射到平面坐标系统上的过程。
在GIS中,地图投影的目标是保持地理对象的相对形状、方位和距离关系。
常见的地图投影算法包括:等角圆柱投影、等距圆锥投影、墨卡托投影等。
这些算法涉及到大量的地球几何学和空间计算,以及数学中的变换和变形理论。
3.空间索引空间索引是用于加速地理空间数据查询的技术。
在GIS中,空间索引的目标是通过将地理空间数据分组和排序,推断地理特征对象之间的关系。
常见的空间索引算法包括:R树、四叉树、格网索引等。
这些算法利用空间分区和思维策略,在空间数据集查询中实现高效的和过滤。
4.空间缓冲区空间缓冲区是定义在地理空间对象周围的区域。
在GIS中,空间缓冲区的目标是通过定义对象的半径或厚度,生成包围对象的区域。
常见的空间缓冲区算法包括:欧几里得缓冲区、高级缓冲区等。
这些算法通常利用计算几何学中的距离计算、区域计算和曲线生成等技术。
5.空间分析空间分析是对地理空间数据进行操作和运算的过程。
在GIS中,空间分析的目标是通过计算和模拟地理特征对象之间的空间关系,揭示地理现象的模式和规律。
常见的空间分析算法包括:最近邻查询、空间插值、地图代数等。
这些算法涉及到距离计算、交叉分析、拓扑关系等计算几何基础。
gis面要素面积计算
gis面要素面积计算摘要:1.引言2.GIS 面要素的定义与分类3.面积计算方法3.1 几何图形面积计算3.2 复合图形面积计算3.3 栅格数据面积计算4.应用实例5.总结正文:一、引言地理信息系统(GIS)是一种用于捕捉、存储、分析和管理地理空间数据的技术。
在GIS 中,面要素是指具有确定边界的地理实体,如行政区划、土地利用、地形等。
计算GIS 面要素的面积是GIS 数据处理和分析中常见的任务,其结果可用于土地资源管理、城市规划等领域。
本文将对GIS 面要素面积计算的方法进行介绍。
二、GIS 面要素的定义与分类GIS 面要素是GIS 空间数据中的一种基本类型,指具有明确边界和特定属性的地理实体。
根据其属性和来源,GIS 面要素可分为矢量面要素和栅格面要素。
矢量面要素是由点、线等基本地理要素构成的,如行政区划、路网等;栅格面要素则是由像素构成的,如遥感图像、数字地形模型等。
三、面积计算方法1.几何图形面积计算对于矢量面要素,可采用以下方法计算其面积:(1)简单多边形:利用公式计算多边形面积。
(2)复杂多边形:将多边形分解为简单多边形,分别计算面积后求和。
(3)环形:计算内部多边形的面积,用外接矩形面积减去内部多边形面积得到环形面积。
2.复合图形面积计算复合图形是由多个简单或多边形组成的,计算其面积时,可先分别计算各子图形的面积,然后根据子图形的连接关系进行合并。
3.栅格数据面积计算对于栅格面要素,可采用以下方法计算其面积:(1)逐像元计算:遍历每个像素,计算与某一特定区域相邻的像素个数,从而得到该区域面积。
(2)网格化:将栅格数据转换为矢量数据,然后采用矢量面要素的面积计算方法进行计算。
四、应用实例GIS 面要素面积计算在土地资源管理、城市规划等领域具有广泛应用。
例如,在土地利用规划中,可通过计算各类土地利用类型的面积,分析土地资源的利用状况和变化趋势;在城市规划中,可通过计算建设用地、绿地、道路等面要素的面积,为城市基础设施建设和用地布局提供依据。
arcgis模几何计算的分类
arcgis模几何计算的分类ArcGIS是一种强大的地理信息系统软件,它提供了许多功能来处理和分析地理数据。
其中之一是执行各种几何计算的能力。
ArcGIS 中的几何计算可以帮助用户执行各种地理数据操作,例如计算线段的长度、多边形的面积、点之间的距离等。
根据计算的目的和应用领域的不同,ArcGIS中的几何计算可以分为几个主要分类。
1. 基本几何计算:基本几何计算是最常见和基础的几何计算方法。
它包括计算线段的长度、角度和方向,计算多边形的面积和周长等。
这些计算是地理数据处理和分析的基础,可以帮助用户更好地理解和解释地理对象的特征。
2. 空间关系计算:空间关系计算是在地理对象之间确定它们之间的相对位置和联系的过程。
ArcGIS提供了一系列的空间关系计算工具,例如判断两个几何对象是否相交、是否包含、是否接触等。
这些计算可以帮助用户更好地理解地理对象之间的关系,从而支持空间分析和规划决策。
3. 缓冲区计算:缓冲区计算是指在给定的几何对象周围创建一个固定距离的区域。
ArcGIS可以通过输入一个几何对象和一个缓冲距离来生成一个缓冲区。
这对于分析邻近地理对象、确定特定区域范围以及规划空间布局都非常有用。
4. 邻近计算:邻近计算是指确定给定几何对象周围其他几何对象的过程。
ArcGIS提供了一些邻近计算工具,例如查找最近的几何对象、查找特定距离范围内的几何对象等。
这对于分析地理对象之间的空间关系以及确定最佳位置和路线非常有用。
5. 网络分析:网络分析是指在网络结构上进行路径查找、最短路径计算和网络优化等操作。
ArcGIS具有强大的网络分析功能,可以帮助用户解决交通流量优化、路径规划和设施位置选择等问题。
这些是ArcGIS中几何计算的一些主要分类。
根据用户的需求和具体应用情况,可以选择合适的几何计算方法来处理和分析地理数据。
GIS算法基础
5 判断两线段是否相交 (3-1)
我们分两步确定两条线段是否相交:
(1)快速排斥试验 设以线段 P1P2 为对角线的矩形为R, 设以线段 Q1Q2 为对角线 的矩形为T,如果R和T不相交,显然两线段不会相交。 (2)跨立试验 ! 如果两线段相交,则两线段必然相互跨立对方。若P1P2跨立 Q1Q2 ,则矢量(P1 - Q1)和(P2 - Q1)位于矢量(Q2 - Q1)的两侧,即 (P1-Q1)×(Q2-Q1)*(P2-Q1)×(Q2-Q1)<0。上式可改写成 (P1-Q1)×(Q2-Q1)*(Q2-Q1)×(P2-Q1)>0。1Biblioteka 判断线段是否在多边形内(5-3)
证明如下: 命题1: 如果线段和多边形的两相邻交点P1 ,P2的中点P’也在多边 形内,则P1, P2之间的所有点都在多边形内。 证明: 假设P1,P2之间含有不在多边形内的点,不妨设该点为Q, 在P1, P’之间,因为多边形是闭合曲线,所以其内外部之间有 界,而P1属于多边行内部,Q属于多边性外部,P’属于多边性内 部,P1-Q-P’完全连续,所以P1Q和QP’一定跨越多边形的边界, 因此在P1,P'之间至少还有两个该线段和多边形的交点,这和P1P2 是相邻两交点矛盾,故命题成立。证毕。
第二章 GIS算法的几何基础
13 14 15 16 17 18 19 20 21 22 判断折线是否在多边形内 判断多边形是否在多边形内 判断矩形是否在多边形内 判断圆是否在多边形内 判断点是否在圆内 判断线段、折线、矩形、多边形是否在圆内 判断圆是否在圆内 计算两条共线的线段的交点 计算线段或直线与线段的交点 求线段或直线与圆的交点
GIS算法的几何基础
1 维数扩展的9交集模型 2 矢量的概念 3 折线段的拐向判断 4 判断点是否在线段上 5 判断两线段是否相交 6 判断线段和直线是否相交 7 判断矩形是否包含点 8 判断线段、折线、多边形是否在矩形中 9 判断矩形是否在矩形中 10 判断圆是否在矩形中 11 判断点是否在多边形内 12 判断线段是否在多边形内
arcgis中calculate geometry计算夹角
arcgis中calculate geometry计算夹角在 ArcGIS 中,要计算两条线的夹角,可以将这两条线简化为三个点,即点1、点2和点3。
以点2为起始点,分别构建两条`ILine`,计算这两条`ILine`的角度,最后计算两条`ILine`的夹角。
以下是具体步骤:1. 构建第一条`ILine`:`pLine21`,计算角度`angle1`。
```javaESRI.ArcGIS.Geometry.ILine pLine21 = new ESRI.ArcGIS.Geometry.LineClass();pLine21.PutCoords(pPoint2.Shape as ESRI.ArcGIS.Geometry.IPoint, pPoint1.Shape as ESRI.ArcGIS.Geometry.IPoint);double angle1 = (pLine21.Angle *180 / Math.PI);if (Math.Abs(angle1) >90) angle1 =180 - Math.Abs(angle1);else angle1 = Math.Abs(angle1);```2. 构建第二条`ILine`:`pLine23`,计算角度`angle2`。
```javaESRI.ArcGIS.Geometry.ILine pLine23 = new ESRI.ArcGIS.Geometry.LineClass();pLine23.PutCoords(pPoint2.Shape as ESRI.ArcGIS.Geometry.IPoint, pPoint3.Shape as ESRI.ArcGIS.Geometry.IPoint);double angle2 = (pLine23.Angle *180 / Math.PI);if (Math.Abs(angle2) >90) angle2 =180 - Math.Abs(angle2);else angle2 = Math.Abs(angle2);```3. 计算两条`ILine`的夹角`angle`。
ArcGIS教程:分区几何统计
ArcGIS教程:分区几何统计一、分区结合统计摘要为数据集中的各个区域计算指定的几何测量值(面积、周长、厚度或者椭圆的特征值)。
插图用法∙区域定义为输入中具有相同值的所有区。
各区无需相连。
栅格和要素数据集都可用于区域输入。
∙在指定输入区域数据时,默认区域字段将为第一个可用的有效字段。
如果无其他有效字段存在,则 ObjectID 字段(如OID 或 FID)将为默认字段。
∙如果为区域字段选择保留字段(例如,OBECTID、FID 或 OID),则这可能导致结果中存在一些不明确现象。
结果包括特定输出格式类型以及指定区域字段所必需的特定保留字段名称。
如果对于特定输出格式,指定字段具有与保留字段相同的名称,则在输出中以结果中所有字段名均唯一的方式更改区域字段的名称。
∙各几何类型的输出栅格的数据类型将为浮点型。
∙如果某个特定区域仅由一个像元组成,或者该区域为单个像元方块,那么会将椭圆(在此情况下为圆)的方向设置为 90度。
语法ZonalGeometry (in_zone_data, zone_field, {geometry_type}, {cell_size})返回值代码实例ZonalGeometry 示例 1(Python 窗口)本示例为输入面要素定义的各个区域确定面积。
import arcpyfrom arcpy import envfrom arcpy.sa import *env.workspace = "C:/sapyexamples/data"outZonalGeometry = ZonalGeometry("zones.shp", "Classes", "AREA", 0.2) outZonalGeometry.save("C:/sapyexamples/output/zonegeomout3")ZonalGeometry 示例 2(独立脚本)本示例为输入面要素定义的各个区域确定面积。
GIS算法的计算几何基础1
1.2 模型介绍
❖ 如果计算两个闭合的正多边形的交集内部并确定交集的维数, 就没有必要分别用几个几何体表示两个多边形内部。
❖ 每一单元交集的维数都严格受到两个几何形体类型的限制。 ➢ 线面关系中,内部——内部单元的维数只能是{-1,1}; ➢ 面面关系中,内部——内部单元的维数为{-1,2},这些情况
1 0 1
1
1
1
1 0 1
1 0 1
1
1
1
1 1 1
1 1 1
1
0
1
1 0 1
1 1 1
1
0
1
1 1 1
1 1 1
1
1
1
1 0 1
10
LR72 LR73 LR74 LR75 LR76
❖拓扑关系描述——线/线拓扑关系(Egenhofer, 1991)
0 0 1
0
0
1
1 1 1
则交点位置可通过如下条件判断: ➢ r>1,则P位于有向线段AB的延长线上; ➢ r<0,则P位于有向线段BA的延长线上; ➢ s>1,则P位于有向线段CD的延长线上; ➢ s<0,则P位于有向线段DC的延长线上;
33
6 矩形是否包含点
❖ 只要判断点的横坐标与纵坐标是否夹在矩形的左右 边和上下边之间。
40
10.1 射线法
❖ 一个简单的射线法是选择一条水平的、向点P的右侧延伸的、 平行于X轴的射线。
❖ 为了计算总的交点的数目,算法简单的遍历多边形的所有边, 测试是否穿越边,穿越时增加交点的数目。
❖ 穿越测试必须处理好一些特殊的情形。完全规则如下: (1)方向向上的边包括其开始点,不包括其终止点; (2)方向向下的边不包括其开始点,包括其终止点; (3)水平边不参加穿越测试; (4)射线和多边形的边的交点必须严格在点P的右边。
geoserver几何运算
geoserver几何运算在地理信息系统(GIS)领域,几何运算是一项重要的技术,用于处理空间数据的位置、形状和关系。
GeoServer是一个开源的GIS服务器,它允许用户在Web上发布、查看和编辑地理空间数据。
在GeoServer中,几何运算功能被广泛应用,用于分析和处理不同地理要素之间的空间关系。
几何运算包括一系列算法和技术,用于计算和处理地理要素的几何属性。
常见的几何运算操作包括相交(intersection)、包含(containment)、相离(disjoint)、缓冲区(buffer)等。
GeoServer提供了丰富的几何运算功能,并通过网络服务的形式提供给用户。
在GeoServer中进行几何运算可通过使用其内置的WPS(Web Processing Service)扩展来实现。
WPS是一种用于执行地理处理操作的标准化协议,它允许用户通过网络将算法应用于地理空间数据。
GeoServer通过实现WPS标准,使得用户能够利用几何运算功能进行地理处理。
使用GeoServer进行几何运算非常简单。
首先,用户需要将待处理的地理要素上传到GeoServer中。
然后,通过WPS接口调用相应的几何运算函数,传入所需的参数。
GeoServer会自动执行几何运算,并返回处理结果。
用户可以选择将结果以地图、图表等形式展示,或者将结果导出为其他格式供进一步分析使用。
几何运算在GIS中有着广泛的应用。
例如,在城市规划中,可以利用几何运算计算建筑物之间的距离,以评估建筑物的布局效果;在环境研究中,可以通过几何运算分析陆地覆盖和水域的交集,用于保护水资源等。
GeoServer提供了强大的几何运算功能,帮助用户快速、高效地进行空间数据分析和处理。
总结一下,Geoserver是一个功能强大的开源GIS服务器,提供丰富的几何运算功能。
通过利用其内置的WPS扩展,用户可以方便地进行各种几何运算操作。
无论是在城市规划、环境研究还是其他领域,几何运算在GIS中都扮演着重要角色。
计算几何算法在GIS图形分析中的应用
计算几何算法在GIS图形分析中的应用
孙立新;任美睿
【期刊名称】《测绘工程》
【年(卷),期】1997(006)004
【摘要】图形空间分析是地理信息系统的重要功能之一。
根据地理信息系统应用领域的不同。
所需的图形空间分析功能也不尽相同,但是,各种图形空间分析功能所涉及到的基本图形关系的判断确基本相同。
文中介绍并改进了一些计算几何方法在GIS常用图形分析中的应用。
目的在于抛砖引玉,让更多的人开展这方面的研究。
【总页数】6页(P30-35)
【作者】孙立新;任美睿
【作者单位】哈尔滨工程高等专科学校;哈尔滨工程高等专科学校
【正文语种】中文
【中图分类】P9
【相关文献】
1.基于ARCGIS技术在工程水文分析计算中的应用——以克孜河卡拉贝利水库水文分析计算为例 [J], 玛尔达尼·米吉提;肖俊;郑忠
2.计算机图形分析法在财务管理中的应用 [J], 尹虹
3.微课在\"计算几何算法与实现\"课程教学中的应用 [J], 康凤娥;孔令德
4.Excel和ArcGIS栅格计算器在地灾风险评价中的应用——以加权信息量模型方
法为例 [J], 王建雷
5.电场数值计算在分析 GIS 中金属颗粒影响中的应用 [J], 邱德红;李正瀛
因版权原因,仅展示原文概要,查看原文内容请购买。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
GIS中的计算几何
GIS是一个图形系统,必然会涉及到几何学上理论应用,比如,图形的可视化,空间拓扑分析,GIS图形编辑等都需要借助几何。
向量几何是用代数的方法来研究几何问题,首先,请大家翻一翻高等数学里有关向量的章节,熟悉一下几个重要的概念:向量、向量的模、向量的坐标表示、向量的加减运算、向量的点积、向量的叉积...下面我们将用这些基本概念来解答GIS中一些几何问题。
一,点和线的关系。
点是否在线段上,这样的判断在图形编辑,拓扑判断(比如,GPS跟踪判
断是否跑在线上)需要用到这样的判断。
通常的想法是:先求线段的直线
方程,再判断点是否符合这条直线方程,如果符合,还要判断点是否在
线段所在的矩形区域(MBR)内,以排除延长线上的可能性,如果不符合,
则点不在线段上。
这种思路是可行的,但效率不高,涉及到建立方程,
解方程。
借助向量的叉积(也叫向量的向量积,结果还是向量,有方向
的)可以很容易的判断。
设向量a=(Xa,Ya,Za) b=(Xb,Yb,Zb) 向量叉积
a X b如下:
二维向量叉积的模|a X b|=|a|*|b|*sinα=|Xa*Yb-Ya*Xb| (α是向量a,b之间的夹角),向量叉积模的几何意义是以向量a,b为邻边的平行四边
形的面积。
可以推测:如果两向量共线,向量叉积模(所代表的平行四边
形的面积为零) 则|a X b|=|a|*|b|*sinα=|Xa*Yb-Ya*Xb|=0,否则不共线,叉
积的模为非零,根据这样条件可以很轻松的判断点和线的关系,避免了
建立方程和解方程的麻烦。
向量叉积的模|AB X AC|=0即可判断C点在AB所确定的直线上,再结合
C点是否在AB所在的MBR范围内,就可以最终确定C是否在AB线段
上。
关于点和线段的其他关系,都可以通过叉积的求得,比如判断点在
线的哪一侧,右手法则,可以通过 a X b=(Xa*Yb-Ya*Xb)*k中的
(Xa*Yb-Ya*Xb)正负来判断。
留给大家思考,很简单的,呵呵…
二,线和线的关系
判断两条线段是否相交,在很多拓扑判断和图形编辑(比如,线的打断来
构建拓扑,编辑线对象,叠置分析,面与面关系的判断等) 中都需要用到
线线相交的判断,如果两条线段相交,一条线段的两端点必然位于另一
条线段的两侧(不考虑退化情况,也就是一条线段的端点在另一条线段
上,这个很容易判断)
两向量的叉积a X b= (Xa*Yb-Ya*Xb)*k ,分别判断AB X AC的方向与
AB X AD的方向是否异号,再判断CD X CA 的方向与CD X CB的方向
是否异号即可判断两线段是否相交。
退化情况,一条线的端点在另一条线上,则AB X AC、 AB X AD 、CD
X CA、CD X CB 是否存在有一个为零的,存在则表明肯定有一条线的端
点在另一个线上或者共用一个端点。
详细区分留给大家思考。
呵呵…
利用向量的方向还可以判断线段的转向,这个在道路导航中有所应用
三,点和面的关系
在各种拓扑判断中(比如,面对象的选取,包含关系的判断等)有时
需要判断一个点是否位于某个面内,经典的方法就是“垂线法”,在直
角坐标系中,从这个点向X轴作射线,判断射线与多边形的交点个数
(不考虑退化情况,退化情况下,判断点或者射线与多边形端点或者
边的关系),如果为奇数,则点在面内,为偶数,则点在面外。
四,线和面的关系
线面关系的判断相对比较复杂,线在面内,线和面相交,相离,相接等关
系。
线段在面内,第一个必要条件是,线段的两个端点都要在内。
但由于
多边形可能为凹,所以这不能成为判断的充分条件,于是有第二个必要条
件线段与多边形的边,没有内部交点。
线段和多边形交于线段的两端点并不会影响线段是否在多边形内;但是如
果多边形的某个顶点和线段相交,还必须判断两相邻交点之间的线段是否
包含于多边形内部,如果在面内,则线段在面内,否则不在面内。
所以,算法思路如下(本算法引用网络上一篇文章):
if 线端PQ的端点不都在多边形内
then return false;
点集pointSet初始化为空;
for 多边形的每条边s
do if 线段的某个端点在s上
then 将该端点加入pointSet;
else if s的某个端点在线段PQ上
then 将该端点加入pointSet;
else if s和线段PQ相交// 这时候已经可以肯定是内交了
then return false;
将pointSet中的点按照X-Y坐标排序;
for pointSet中每两个相邻点pointSet[i] , pointSet[ i+1]
do if pointSet[i] , pointSet[ i+1] 的中点不在多边形中
then return false;
return true;
注:X-Y坐标排序,X坐标小的排在前面,对于X坐标相同的点,Y坐标小
的排在前面,这种排序准则也是为了保证水平和垂直情况的判断正确
点在面内,线段相交情况的判断见上面的思路。
这个过程中的排序因为交点数目肯定远小于多边形的顶点数目n,所以最
多是常数级的复杂度,几乎可以忽略不计。
因此算法的时间复杂度也是
O(n)。
有了线段和面的关系,再判断折线与面的关系,也就可以for循环,同理
进行判断了。
五,面和面的关系
面面的空间关系,可能要更复杂一些,在拓扑判断,多边形叠置分析,面
对象的编辑中,有着广泛的应用。
这个将在以后的章节中介绍一种时间复
杂度为O(nlogn)的算法“平面扫描算法”。
六,点到线段的距离
点到线段的距离,在各种测量,拓扑判断(比如,线对象的选取中需要比较
距离)中都需要用到。
大家对点到直线的距离,都很熟悉,那点到线段距离
又该怎么计算呢?
问题的关键是判断a、r的角度,向量的点积能判断一个角是钝角还是锐角,
先复习一下向量的点积,也叫向量的数量积,结果是一个数,没有方向。
设
向量a=(Xa,Ya,Za) b=(Xb,Yb,Zb)
a . b=|a|*|b|*cosα=Xa*Xb+Ya*Yb+Za*Z
b 向量点积的几何意义是,高中物
理中,求作用力在一个方向上所作的功。
如果a . b>0,则α为锐角,a . b<0,
则α钝角。
熟悉了利用向量的点积来判断角度,A C·AB 判断夹角a,B A·BC判断夹
角r,即可确定三种情况中,具体是哪一种。
至于第一种情况,求点到垂
足的距离,可以饶开建立方程求垂足,再求两点距离的思路,因为运算就
复杂了,多耗了CPU资源。
利用向量叉积的几何意义来求,向量的叉积表
示两向量为邻边的平行四边形的面积|AC X AB|为⊿ABC的面积的两倍,求
平行四边形的高,只要用面积除以底边AB的长度,高CD的长度=|AC X
AB|/distance(AB)。
这些复杂的几何判断,都将在空间索引的过滤下,在少量数据集(侯选集)上进行。
计算几何算法,通常是比较复杂,比较耗CPU的运算,而且还要考虑各种退化的情况,在这里,并不试图向大家穷举各种情况,只想起一个抛砖引玉的作用,或许还有人会有这样的疑问:有没考虑“投影”的问题?关于投影将在相应的章节中给予解释,但有一点是可以肯定的,空间分析计算几何算法,都是在直角平面上运算的,不会在球面上。
参考文献:计算机地图制图蔡先华东南大学 2000.08
作者:陈玉进geochenyj@
07.01.30。