# 几何算法

#

类名/命名空间 方法名 参数 说明
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)