【量算分析工具-概述】GeoServer改造Springboot番外系列三-CSDN博客
【量算分析工具-水平距离】GeoServer改造Springboot番外系列四-CSDN博客
【量算分析工具-水平面积】GeoServer改造Springboot番外系列五-CSDN博客
【量算分析工具-方位角】GeoServer改造Springboot番外系列六-CSDN博客
【量算分析工具-坡度】GeoServer改造Springboot番外系列七-CSDN博客
【量算分析工具-获取高程】GeoServer改造Springboot番外系列八-CSDN博客
【量算分析工具-贴地距离】GeoServer改造Springboot番外系列九-CSDN博客
【量算分析工具-贴地面积】GeoServer改造Springboot番外系列十-CSDN博客
坡度
表示方法
坡度是地表单元陡缓的程度,通常把坡面的垂直高度h和水平宽度l的比叫做坡度(或叫做坡比)用字母i表示,即坡角的正切值。
i=h/l
坡度的表示方法有百分比法、度数法、密位法和分数法四种,其中以百分比法和度数法较为常用。
1、百分比法
表示坡度最为常用的方法,即两点的高程差与其水平距离的百分比,其计算公式如下:
坡度=(高程差/水平距离)x100%
使用百分比表示时,
即:
i=h/l×100%
例如:
坡度3%是指水平距离每100米,垂直方向上升(下降)3米;1%是指水平距离每100米,垂直方向上升(下降)1米。以次类推!
2、度数法
用度数来表示坡度,利用反三角函数计算而得,其公式如下:
tanα(坡度)=高程差/水平距离
所以α(坡度)=tan-1 (高程差/水平距离)
3、代码
下面代码是通过两点之间的三维坐标算出两点之间的坡度,两个坐标点的经纬度获取容易,但是经纬度所在的高度数值就需要基于terrain-rgb高程地图去获取。下一篇着重介绍一下如何通过经纬度获取高程数值。
/*** 获取两点之间的坡度数值** @param x1* @param y1* @param z1* @param x2* @param y2* @param z2* @return double*/public static double getSlopeInDegrees(double x1, double y1, double z1, double x2, double y2, double z2) {// 计算水平距离double horizontalDistance = getHorizontalDistance(x1, y1, x2, y2);// 计算高度差double heightDifference = z2 - z1;// 计算坡度的度数法(角度):用度数来表示坡度,利用反三角函数计算而得,其公式如下:tanα(坡度)=高程差/路程。double slopeDegrees = Math.abs(Math.toDegrees(Math.atan(heightDifference / horizontalDistance)));return slopeDegrees;}/*** 计算两点间的大圆路径距离,即直线距离** @param lon1* @param lat1* @param lon2* @param lat2* @return double*/public static double getHorizontalDistance(double lon1, double lat1, double lon2, double lat2) {// 将经纬度转换为弧度double lat1Radians = Math.toRadians(lat1);double lon1Radians = Math.toRadians(lon1);double lat2Radians = Math.toRadians(lat2);double lon2Radians = Math.toRadians(lon2);double deltaLat = lat2Radians - lat1Radians;double deltaLon = lon2Radians - lon1Radians;// 计算两点之间的水平大圆距离double a = Math.sin(deltaLat / 2) * Math.sin(deltaLat / 2) +Math.cos(lat1Radians) * Math.cos(lat2Radians) *Math.sin(deltaLon / 2) * Math.sin(deltaLon / 2);double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));double distance = EARTH_RADIUS * c;return distance;}