import {GeoOperations} from "./GeoOperations"; import {UIElement} from "../UI/UIElement"; import Combine from "../UI/Base/Combine"; export class ExtraFunction { private static DistanceToFunc = new ExtraFunction( "distanceTo", "Calculates the distance between the feature and a specified point", ["longitude", "latitude"], (feature) => { return (lon, lat) => { // Feature._lon and ._lat is conveniently place by one of the other metatags return GeoOperations.distanceBetween([lon, lat], [feature._lon, feature._lat]); } } ) private static readonly allFuncs: ExtraFunction[] = [ExtraFunction.DistanceToFunc]; private readonly _name: string; private readonly _args: string[]; private readonly _doc: string; private readonly _f: (feat: any) => any; constructor(name: string, doc: string, args: string[], f: ((feat: any) => any)) { this._name = name; this._doc = doc; this._args = args; this._f = f; } public static FullPatchFeature(feature) { for (const func of ExtraFunction.allFuncs) { func.PatchFeature(feature); } } public static HelpText(): UIElement { return new Combine([ ExtraFunction.intro, ...ExtraFunction.allFuncs.map(func => new Combine([ "
In some cases, it is useful to have some tags calculated based on other properties. Some useful tags are available by default (e.g. _lat, lon, _country), as detailed above.
It is also possible to calculate your own tags - but this requires some javascript knowledge.
Before proceeding, some warnings: