# 5.1 距离、长度、面积
TIP
JS API 为开发者提供了空间数据计算的函数库 aimap.GeometryUtil,可以帮助开发者计算点线面空间关系、长度、面积等函数。
注意:入参坐标的坐标系为gcj02坐标系(即火星坐标或高德坐标)。
本章我们将介绍一些常用的数学计算方法,包括:
- 计算两点间的实际距离 aimap.GeometryUtil.distance
- 计算点到路径的最短距离 aimap.GeometryUtil.distanceToLine
- 计算路径的实际长度 aimap.GeometryUtil.distanceOfLine
- 计算封闭区域的面积 aimap.GeometryUtil.ringArea
# 5.1.1 计算两点间的实际距离
TIP
当需要计算两个地理位置间的实际地面距离时,可以使用静态方法 aimap.GeometryUtil.distance,返回数据以米为单位。
const p1 = [116.434027, 39.941037];
const p2 = [116.461665, 39.941564];
// 返回 p1 到 p2 间的地面距离,单位:米
const dis = aimap.GeometryUtil.distance(p1, p2);
1
2
3
4
2
3
4
# 5.1.2 计算点到路径的最短距离
TIP
当需要计算某一点到一段路径的最短地面距离时,可以使用静态方法 aimap.GeometryUtil.distanceToLine,返回数据以米为单位。
const p0 = [116.450378, 39.947585];
const p1 = [116.434027, 39.941037];
const p2 = [116.461665, 39.941564];
const p3 = [116.466171, 39.937977];
// 返回 p0 到线段 p1-p2-p3 的最短地面距离,单位:米
const dis = aimap.GeometryUtil.distanceToLine(p0, [p1, p2, p3]);
1
2
3
4
5
6
2
3
4
5
6
# 5.1.3 计算路径的实际长度
TIP
当需要计算某段路径的实际长度时,可以使用静态方法 aimap.GeometryUtil.distanceOfLine,返回数据以米为单位。
const p0 = [116.450378, 39.947585];
const p1 = [116.434027, 39.941037];
const p2 = [116.461665, 39.941564];
// 返回线段 p0-p1-p2 的实际长度,单位:米
const dis = aimap.GeometryUtil.distanceOfLine([p0, p1, p2]);
1
2
3
4
5
2
3
4
5
# 5.1.4 计算封闭区域的面积
TIP
当需要计算指定路径围成的闭合区域面积时,可以使用静态方法 aimap.GeometryUtil.ringArea,返回数据以平方米为单位。
const p0 = [116.450378, 39.947585];
const p1 = [116.434027, 39.941037];
const p2 = [116.461665, 39.941564];
// 返回点 p0-p1-p2 围成的闭合区域面积,单位:平方米
const area = aimap.GeometryUtil.ringArea([p0, p1, p2]);
1
2
3
4
5
2
3
4
5
# 5.2 计算点线面关系
# 5.2.1 判断点是否在面内
TIP
当需要计算指单个或者多个点是否在某一个范围(面)内时,可以使用静态方法 aimap.GeometryUtil.pointsWithinPolygon,若在指定范围(面)内返回在面内的单个或多个点,否则返回undefined
const rings = {
coordinates: [
[
[121.50010406970978,31.23853154593988],
[121.49993777275085,31.237926104668983],
[121.50047421455382,31.23757292880233],
[121.5011340379715,31.23826093251808],
[121.50010406970978,31.23853154593988]
]
]
};
const points = [
{eg: '在面内',other: '自定义其他字段',coordinates: [121.50031328201293,31.238063705298575]},
{eg: '在面外',other: '自定义其他字段',coordinates: [121.49955689907073,31.23761420916658]}
];
const results = aimap.GeometryUtil.pointsWithinPolygon(points, rings);
// results结果:
// [{"eg":"在面内","other":"自定义其他字段","coordinates":[121.50031328201293,31.238063705298575]}]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18