# Geometric Algorithms

# Point

Class/Namespace Method Parameters Description
GeoPoint add p: GeoPoint Add two points. Example: let p1 = new vjmap.GeoPoint(1,2); let p2 = new vjmap.GeoPoint(3, 4); p1.add(p2); // 4, 6
GeoPoint sub p: GeoPoint Subtract two points
GeoPoint multByPoint p: GeoPoint Multiply two points
GeoPoint divByPoint p: GeoPoint Divide two points
GeoPoint dot p: GeoPoint Vector dot product
GeoPoint lerp v: GeoPoint, alpha: number Interpolate a new point between two points by ratio
GeoPoint rotate angle: number Rotate
GeoPoint roateAround angle: number, p: GeoPoint Rotate around a point.
GeoPoint matMult m: number[] Multiply by a matrix
GeoPoint unit Unit length
GeoPoint equals other: GeoPoint, dotErr: number = 8 Check if equal
GeoPoint distanceTo p: GeoPoint Distance between two points
GeoPoint angle Angle
GeoPoint angleTo p: GeoPoint Angle to a point
GeoPoint angleWith p: GeoPoint interiorAngle to a point
GeoPoint angleWithSep p: GeoPoint interiorAngle to a point
GeoPoint transform basePt: GeoPoint, destPt: GeoPoint, scale?:number, angle?: number Scale, rotate, and translate a point around a base point.

# Bounding Box

Class/Namespace Method Parameters Description
GeoBounds center Get center point. Example: let bounds = new vjmap.GeoBounds([0,10], [10, 50]); let c = bounds.center(); // [5, 30]
GeoBounds square isLatlng?: boolean, isMinValue?: boolean Make square with equal width and height
GeoBounds width Get width
GeoBounds height Get height
GeoBounds scale ratio: number, origin?: GeoPoint | null Scale to produce a new GeoBounds.
GeoBounds scaleXY ratioX: number, ratioY: number, origin?: GeoPoint | null Scale by X/Y ratio to produce a new GeoBounds.
GeoBounds translate dx: number, dy: number Translate bounding box
GeoBounds update vertices: GeoPoint[] Update bounding box
GeoBounds updateByBounds bounds: GeoBounds[] | GeoBounds Update bounding box from child bounds
GeoBounds intersect b: GeoBounds Intersection of two bounding boxes
GeoBounds union bound: GeoBounds Union of multiple bounding boxes
GeoBounds isIntersect bound: GeoBounds Check if intersects with another bounding box
GeoBounds isContains bound: GeoBounds Check if one bounding box contains another
GeoBounds contains point: GeoPoint Check if point is inside bounding box
GeoBounds closestPoint testPoint: GeoPoint, includeInterior: boolean = true Find the closest point on the bounding box and return it.

# Line

Class/Namespace Method Parameters Description
vjmap pointToSegmentDistance p: GeoPoint, p1: GeoPoint, p2: GeoPoint Distance from point to segment. Example: vjmap.pointToSegmentDistance(vjmap.geoPoint([3, 2]), vjmap.geoPoint([0,0]), vjmap.geoPoint([0, 10])) // 3
vjmap simplify points: GeoPoint[], tolerance?: number Simplify point coordinates
vjmap closestPointOnSegment p: GeoPoint, p1: GeoPoint, p2: GeoPoint Closest point on segment to a point
vjmap closestPointOnPolyline p: GeoPoint, points: GeoPoint[] Closest point on polyline to a point
vjmap closestPointOnPolylines p: GeoPoint, lines: GeoPoint[][] Closest point on multiple lines to a point
vjmap segmentIntersect x1,y1,x2,y2,x3,y3,x4,y4 Segment intersection
vjmap lineSplit line: GeoPoint[], splitLine: GeoPoint[], dotErr?: number Split a line by another line into multiple segments, returns new segments
vjmap multiLineSplit lines: GeoPoint[][], dotErr?: number Split multiple lines by their intersections, returns all segments after splitting. Ensure each segment does not self-intersect
vjmap clipSegment a: GeoPoint, b: GeoPoint, bounds: GeoBounds Clip segment by bounds
vjmap interpolatePointsByRatio points: GeoPointLike[], ratio: number, isLngLat: boolean = false Get point coordinates from coordinate sequence by ratio (0-1)
vjmap interpolateLineRange points, number, isLngLat, offsetDist, minGap, includeSrcPoint Vertices of (poly)line to interpolate (input must be lon/lat).
vjmap.Math2D dist ax,ay, bx, by Calculate distance between two points
vjmap.Math2D lineDist pts: GeoPointLike[] Calculate line length
vjmap.Math2D distToSegmentSquared px, py, l0x, l0y, l1x, l1y Squared distance between point and 2D segment.
vjmap.Math2D intersectLineAndCircle xLine1, yLine1, xLine2, yLine2, radius, xCenter, yCenter Intersection of line and circle
vjmap.Math2D lineDist pts: GeoPointLike[] Calculate line length

# Polygon

Class/Namespace Method Parameters Description
vjmap calcPolygonArea points: GeoPoint[] Calculate polygon area. Example: vjmap.calcPolygonArea([vjmap.geoPoint([0, 0]),vjmap.geoPoint([5, 5]),vjmap.geoPoint([10, 0])]) // 25
vjmap clipPolygon points: GeoPoint[], bounds: GeoBounds Clip polygon by bounds
vjmap bufferConvexPolygon ring: GeoPoint[], buffer: number Take a convex ring and expand it outward by applying a buffer. Assumes ring is clockwise wound.
vjmap polygonIsClockwise points: GeoPoint[] Determine if polygon is clockwise using Green's formula
vjmap polygonCentroid points: GeoPoint[] Calculate polygon centroid from coordinate list
vjmap isPointInPolygon pos: GeoPoint, polygon: GeoPoint[] Check if point is inside polygon.
vjmap polylineMarginToPolygon pts: GeoPointLike[],options Expand polyline outward into a polygon.
vjmap createObjectPolygonUtil Create a polygon geometry utility object for difference, union, intersection, etc.

# Circle/Ellipse

Class/Namespace Method Parameters Description
vjmap getCirclePolygonCoordinates center,radius,points,startAngle,endAngle Get discretized polygon points for circle or arc
vjmap getCircleFeature center,radius,points,startAngle,endAngle Get discretized polygon as GeoJSON for circle or arc
vjmap getEllipsePolygonCoordinates Same as above, majorAxisRadius, minorAxisRadius Get discretized polygon points for ellipse or elliptic arc
vjmap getEllipseFeature Same as above, majorAxisRadius, minorAxisRadius Get discretized polygon as GeoJSON for ellipse or elliptic arc

# Curve

Class/Namespace Method Parameters Description
vjmap bezierCurveToPolyline bezierCurve,precision, recursiveCount Convert bezierCurve to polyline
vjmap getBezierCurveLength bezierCurve,precision, recursiveCount Calculate Bezier curve length
vjmap convertBezierCurveToPolyline bezierCurve,precision, recursiveCount Convert Bezier curve to polyline.

# Topology Graph

Class/Namespace Method Parameters Description
vjmap Graph Find shortest path. Example: 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 Generate shortest path given all routes, start point, and end point

# Algorithms

Class/Namespace Method Parameters Description
vjmap coordTransfromGetFourParamter srcArr,destArr,isSetRotateZero,isConsiderPointOrder Get four parameters for coordinate transformation
vjmap coordTransfromByFourParamter pt: GeoPoint, param: {dx: number, dy: number, scale: number, rotate: number} Coordinate transformation using four parameters
vjmap coordTransfromByInvFourParamter pt: GeoPoint, param: {dx: number, dy: number, scale: number, rotate: number} Coordinate transformation using inverse four parameters
vjmap buildTransformerMatrix3d src: number[], dest: number[] Perspective projection to 3D CSS matrix
vjmap vectorContour featureCollection: FeatureCollection,weight: string, breaks: number[],params Generate vector contour map

# Others

Class/Namespace Method Parameters Description Example
vjmap.MathUtils equals num1: number, num2: number, dotErr: number = 8 Check if two numbers are equal vjmap.MathUtils.equals(0.0041, 0.0042, 3) // true
vjmap.MathUtils lerp v1: number, v2: number, value: number Linear interpolation vjmap.MathUtils.lerp(10, 20, 0.3) // 13
vjmap.MathUtils map val: number, inMin: number, inMax: number, outMin: number, outMax: number Map a number from one range to another. vjmap.MathUtils.map(5, 0, 10, 100, 200) // 150
vjmap.MathUtils clamp value: number, min: number, max: number Clamp value to given range. vjmap.MathUtils.clamp(-1, 0, 10) // 0
vjmap.MathUtils wrap n: number, min: number, max: number, isMin: boolean = false Constrain n to given range via modulo, excluding minimum vjmap.MathUtils.wrap(11, 0, 10) // 1

# Geometric Model

API documentation: https://vjmap.com/docs/geomodel/ (opens new window)

Example code: https://vjmap.com/demo/#/demo/map/models/01geomodels (opens new window)