mapcomplete/Customizations/LayerDefinition.ts

81 lines
2.5 KiB
TypeScript
Raw Normal View History

2020-07-05 18:59:47 +02:00
import {Tag, TagsFilter} from "../Logic/TagsFilter";
import {UIElement} from "../UI/UIElement";
import {Basemap} from "../Logic/Basemap";
import {ElementStorage} from "../Logic/ElementStorage";
import {UIEventSource} from "../UI/UIEventSource";
import {FilteredLayer} from "../Logic/FilteredLayer";
import {Changes} from "../Logic/Changes";
import {UserDetails} from "../Logic/OsmConnection";
import {TagRenderingOptions} from "./TagRendering";
2020-07-12 23:19:05 +02:00
import {TagDependantUIElementConstructor} from "./UIElementConstructor";
2020-06-24 00:35:19 +02:00
export class LayerDefinition {
2020-07-07 16:00:39 +02:00
/**
* This name is shown in the 'add XXX button'
*/
2020-06-24 00:35:19 +02:00
name: string;
2020-07-15 11:23:35 +02:00
/**
* These tags are added whenever a new point is added by the user on the map.
* This is the ideal place to add extra info, such as "fixme=added by MapComplete, geometry should be checked"
*/
2020-06-24 00:35:19 +02:00
newElementTags: Tag[]
2020-07-15 11:23:35 +02:00
/**
* Not really used anymore
* This is meant to serve as icon in the buttons
*/
2020-06-24 00:35:19 +02:00
icon: string;
2020-07-15 11:23:35 +02:00
/**
* Only show this layer starting at this zoom level
*/
2020-06-24 00:35:19 +02:00
minzoom: number;
2020-07-15 11:23:35 +02:00
/**
* This tagfilter is used to query overpass.
* Examples are:
*
* new Tag("amenity","drinking_water")
*
* or a query for bicycle pumps which have two tagging schemes:
* new Or([
* new Tag("service:bicycle:pump","yes") ,
* new And([
* new Tag("amenity","compressed_air"),
* new Tag("bicycle","yes")])
* ])
*/
2020-06-24 00:35:19 +02:00
overpassFilter: TagsFilter;
2020-07-07 16:00:39 +02:00
/**
* This UIElement is rendered as title element in the popup
*/
2020-07-05 18:59:47 +02:00
title: TagRenderingOptions;
2020-07-07 16:00:39 +02:00
/**
* These are the questions/shown attributes in the popup
*/
2020-07-12 23:19:05 +02:00
elementsToShow: TagDependantUIElementConstructor[];
2020-06-24 00:35:19 +02:00
style: (tags: any) => { color: string, icon: any };
2020-06-28 23:33:48 +02:00
/**
* If an object of the next layer is contained for this many percent in this feature, it is eaten and not shown
*/
maxAllowedOverlapPercentage: number = undefined;
2020-06-24 00:35:19 +02:00
2020-07-01 16:32:17 +02:00
asLayer(basemap: Basemap, allElements: ElementStorage, changes: Changes, userDetails: UIEventSource<UserDetails>, selectedElement: UIEventSource<any>,
showOnPopup: (tags: UIEventSource<(any)>) => UIElement):
2020-06-24 00:35:19 +02:00
FilteredLayer {
return new FilteredLayer(
this.name,
basemap, allElements, changes,
this.overpassFilter,
2020-06-28 23:33:48 +02:00
this.maxAllowedOverlapPercentage,
this.style,
2020-06-29 16:21:36 +02:00
selectedElement,
showOnPopup);
2020-06-24 00:35:19 +02:00
}
}