# 几何算法
# 点
类名/命名空间 | 方法名 | 参数 | 说明 |
---|---|---|---|
GeoPoint | add | p: GeoPoint | 两个点相加 示例: let p1 = new vjmap.GeoPoint(1,2); let p2 = new vjmap.GeoPoint(3, 4); p1.add(p2); // 4, 6 |
GeoPoint | sub | p: GeoPoint | 两个点相减 |
GeoPoint | multByPoint | p: GeoPoint | 两个点相乘 |
GeoPoint | divByPoint | p: GeoPoint | 两个点相除 |
GeoPoint | dot | p: GeoPoint | 向量点积 |
GeoPoint | lerp | v: GeoPoint, alpha: number | 两点之间根据比例插值出新的点 |
GeoPoint | rotate | angle: number | 旋转 |
GeoPoint | roateAround | angle: number, p: GeoPoint | 绕一个点旋转. |
GeoPoint | matMult | m: number[] | 乘一个矩阵 |
GeoPoint | unit | 单位长度 | |
GeoPoint | equals | other: GeoPoint, dotErr: number = 8 | 判断是否相等 |
GeoPoint | distanceTo | p: GeoPoint | 两点之间距离 |
GeoPoint | angle | 角度 | |
GeoPoint | angleTo | p: GeoPoint | 距一个点的角度 |
GeoPoint | angleWith | p: GeoPoint | 距一个点的interiorAngle |
GeoPoint | angleWithSep | p: GeoPoint | 距一个点的interiorAngle |
GeoPoint | transform | basePt: GeoPoint, destPt: GeoPoint, scale?:number, angle?: number | 对一个点围绕一个基点进行缩放旋转平移操作. |
# 矩形范围外包盒
类名/命名空间 | 方法名 | 参数 | 说明 |
---|---|---|---|
GeoBounds | center | 获取中心点 示例: let bounds = new vjmap.GeoBounds([0,10], [10, 50]); let c = bounds.center(); // [5, 30] | |
GeoBounds | square | isLatlng?: boolean, isMinValue?: boolean | 变成正方形,使宽高相等 |
GeoBounds | width | 获取宽度 | |
GeoBounds | height | 获取高度 | |
GeoBounds | scale | ratio: number, origin?: GeoPoint | null | 按照比例扩大/缩小出一个新的 GeoBounds。 |
GeoBounds | scaleXY | ratioX: number, ratioY: number, origin?: GeoPoint | null | 按照XY比例扩大/缩小出一个新的 GeoBounds。 |
GeoBounds | translate | dx: number, dy: number | 位移包围盒 |
GeoBounds | update | vertices: GeoPoint[] | 更新包围盒 |
GeoBounds | updateByBounds | bounds: GeoBounds[] | GeoBounds | 根据子包围盒更新包围盒 |
GeoBounds | intersect | b: GeoBounds | 两包围盒求交集 |
GeoBounds | union | bound: GeoBounds | 求多个包围盒的并集 |
GeoBounds | isIntersect | bound: GeoBounds | 判断与另一个包围盒是否相交 |
GeoBounds | isContains | bound: GeoBounds | 求一个包围盒是否包含另一个包围盒 |
GeoBounds | contains | point: GeoPoint | 查看点是否在包围盒中 |
GeoBounds | closestPoint | testPoint: GeoPoint, includeInterior: boolean = true | 查找边界框上最近的点并返回该点. |
# 线
类名/命名空间 | 方法名 | 参数 | 说明 |
---|---|---|---|
vjmap | pointToSegmentDistance | p: GeoPoint, p1: GeoPoint, p2: GeoPoint | 点到线段的距离 示例: vjmap.pointToSegmentDistance(vjmap.geoPoint([3, 2]), vjmap.geoPoint([0,0]), vjmap.geoPoint([0, 10])) // 3 |
vjmap | simplify | points: GeoPoint[], tolerance?: number | 简化点坐标 |
vjmap | closestPointOnSegment | p: GeoPoint, p1: GeoPoint, p2: GeoPoint | 点到线段的最近点 |
vjmap | closestPointOnPolyline | p: GeoPoint, points: GeoPoint[] | 点到多段线的最近点 |
vjmap | closestPointOnPolylines | p: GeoPoint, lines: GeoPoint[][] | 点到多条线的最近点 |
vjmap | segmentIntersect | x1,y1,x2,y2,x3,y3,x4,y4 | 线段相交 |
vjmap | lineSplit | line: GeoPoint[], splitLine: GeoPoint[], dotErr?: number | 线被另外一条线分开多条线段,返回新的线段 |
vjmap | multiLineSplit | lines: GeoPoint[][], dotErr?: number | 多条线之间根据交点相互分开,返回相交后的所有线段,请确保每条线段不要自相交 |
vjmap | clipSegment | a: GeoPoint, b: GeoPoint, bounds: GeoBounds | 根据范围裁剪线段 |
vjmap | interpolatePointsByRatio | points: GeoPointLike[], ratio: number, isLngLat: boolean = false | 通过比例(0-1)的值,得到坐标序列的点坐标的值 |
vjmap | interpolateLineRange | points, number, isLngLat, offsetDist, minGap, includeSrcPoint | 要插值的(多段)线的顶点(输入必须为经纬度). |
vjmap.Math2D | dist | ax,ay, bx, by | 计算两点距离 |
vjmap.Math2D | lineDist | pts: GeoPointLike[] | 求线的距离 |
vjmap.Math2D | distToSegmentSquared | px, py, l0x, l0y, l1x, l1y | 计算点和二维线段之间的平方距离。 |
vjmap.Math2D | intersectLineAndCircle | xLine1, yLine1, xLine2, yLine2, radius, xCenter, yCenter | 求线和圆的交点 |
vjmap.Math2D | lineDist | pts: GeoPointLike[] | 求线的距离 |
# 多边形
类名/命名空间 | 方法名 | 参数 | 说明 |
---|---|---|---|
vjmap | calcPolygonArea | points: GeoPoint[] | 计算多边形面积 示例: vjmap.calcPolygonArea([vjmap.geoPoint([0, 0]),vjmap.geoPoint([5, 5]),vjmap.geoPoint([10, 0])]) // 25 |
vjmap | clipPolygon | points: GeoPoint[], bounds: GeoBounds | 根据范围裁剪多边形 |
vjmap | bufferConvexPolygon | ring: GeoPoint[], buffer: number | 取一个凸环并通过在其周围应用缓冲区将其向外扩展。 此功能假定环是顺时针缠绕的。 |
vjmap | polygonIsClockwise | points: GeoPoint[] | 根据格林公式判断多边形是否为顺时针 |
vjmap | polygonCentroid | points: GeoPoint[] | 根据坐标列表计算多边形的质心 |
vjmap | isPointInPolygon | pos: GeoPoint, polygon: GeoPoint[] | 判断点是否在多边形内。 |
vjmap | polylineMarginToPolygon | pts: GeoPointLike[],options | 把多段线往外扩展成多边形。 |
vjmap | createObjectPolygonUtil | 创建一个多边形几何工具对象,可对多边形进行差,并,相交等操作。 |
# 圆/椭圆
类名/命名空间 | 方法名 | 参数 | 说明 |
---|---|---|---|
vjmap | getCirclePolygonCoordinates | center,radius,points,startAngle,endAngle | 得到圆或圆弧的离散化的多边形的点 |
vjmap | getCircleFeature | center,radius,points,startAngle,endAngle | 得到圆或圆弧的离散化的多边形的geojson的形式 |
vjmap | getEllipsePolygonCoordinates | 同上,majorAxisRadius,minorAxisRadius | 得到椭圆或椭圆弧的离散化的多边形的点 |
vjmap | getEllipseFeature | 同上,majorAxisRadius,minorAxisRadius | 得到圆或圆弧的离散化的多边形的geojson的形式 |
# 曲线
类名/命名空间 | 方法名 | 参数 | 说明 |
---|---|---|---|
vjmap | bezierCurveToPolyline | bezierCurve,precision, recursiveCount | 将 bezierCurve 转换为折线 |
vjmap | getBezierCurveLength | bezierCurve,precision, recursiveCount | 计算贝塞尔曲线的长度 |
vjmap | convertBezierCurveToPolyline | bezierCurve,precision, recursiveCount | 将贝塞尔曲线转换为折线. |
# 拓扑图
类名/命名空间 | 方法名 | 参数 | 说明 |
---|---|---|---|
vjmap | Graph | 找最短路径 示例: var graph = Graph().addEdge("s", "t", 10).addEdge("s", "y", 5).addEdge("s", "y", 4).addEdge("t", "y", 2).addEdge("y", "t", 3).addEdge("t", "x", 1).addEdge("y", "x", 9).addEdge("y", "z", 2).addEdge("x", "z", 4).addEdge("z", "x", 6);var res = graph.shortestPath("s", "z") | |
vjmap | findShortestPath | startPoint, endPoint,lines,precision,hasDirection | 给定所有路线、起始点、终点生成最短路径 |
# 算法
类名/命名空间 | 方法名 | 参数 | 说明 |
---|---|---|---|
vjmap | coordTransfromGetFourParamter | srcArr,destArr,isSetRotateZero,isConsiderPointOrder | 坐标转换得到四参数 |
vjmap | coordTransfromByFourParamter | pt: GeoPoint, param: {dx: number, dy: number, scale: number, rotate: number} | 通过四参数进行坐标转换 |
vjmap | coordTransfromByInvFourParamter | pt: GeoPoint, param: {dx: number, dy: number, scale: number, rotate: number} | 通过四参数反算进行坐标转换 |
vjmap | buildTransformerMatrix3d | src: number[], dest: number[] | 透视投影转3d css 矩阵 |
vjmap | vectorContour | featureCollection: FeatureCollection,weight: string, breaks: number[],params | 生成矢量等值面 |
# 其他
类名/命名空间 | 方法名 | 参数 | 说明 | 示例 |
---|---|---|---|---|
vjmap.MathUtils | equals | num1: number, num2: number, dotErr: number = 8 | 判断两个点是否相等 | vjmap.MathUtils.equals(0.0041, 0.0042, 3) // true |
vjmap.MathUtils | lerp | v1: number, v2: number, value: number | 线性插值 | vjmap.MathUtils.lerp(10, 20, 0.3) // 13 |
vjmap.MathUtils | map | val: number, inMin: number, inMax: number, outMin: number, outMax: number | 将数字从一个范围映射到另一个范围。 | vjmap.MathUtils.map(5, 0, 10, 100, 200) // 150 |
vjmap.MathUtils | clamp | value: number, min: number, max: number | 确保输入值适合给定范围。 | vjmap.MathUtils.clamp(-1, 0, 10) // 0 |
vjmap.MathUtils | wrap | n: number, min: number, max: number, isMin: boolean = false | 通过模运算将n约束在给定范围内,不包括最小值 | vjmap.MathUtils.wrap(11, 0, 10) // 1 |
# 几何模型
API文档地址: https://vjmap.com/docs/geomodel/ (opens new window)
示例代码地址: https://vjmap.com/demo/#/demo/map/models/01geomodels (opens new window)
← 百度地图与CAD图叠加显示 几何模型 →