Browse Source

add base map infrastructure

pull/2535/head
Artem Halushko 7 years ago
parent
commit
3a90afcc7e
  1. 5870
      ui-ngx/package-lock.json
  2. 5
      ui-ngx/package.json
  3. 117
      ui-ngx/src/app/modules/home/components/widget/lib/maps/leaflet-map.ts
  4. 19
      ui-ngx/src/app/modules/home/components/widget/lib/maps/map-models.ts
  5. 14
      ui-ngx/src/app/modules/home/components/widget/lib/maps/map-widget.interface.ts
  6. 245
      ui-ngx/src/app/modules/home/components/widget/lib/maps/map-widget2.ts
  7. 22
      ui-ngx/src/app/modules/home/components/widget/lib/maps/maps-utils.ts
  8. 137
      ui-ngx/src/app/modules/home/components/widget/lib/maps/markers.ts
  9. 53
      ui-ngx/src/app/modules/home/components/widget/lib/maps/polygon.ts
  10. 38
      ui-ngx/src/app/modules/home/components/widget/lib/maps/polyline.ts
  11. 813
      ui-ngx/src/app/modules/home/components/widget/lib/maps/schemes.ts
  12. 4
      ui-ngx/src/polyfills.ts

5870
ui-ngx/package-lock.json

File diff suppressed because it is too large

5
ui-ngx/package.json

@ -57,6 +57,9 @@
"json-schema-defaults": "^0.4.0",
"jstree": "^3.3.9",
"jstree-bootstrap-theme": "^1.0.1",
"leaflet": "^1.6.0",
"leaflet-providers": "^1.9.1",
"leaflet.markercluster": "^1.4.1",
"material-design-icons": "^3.0.1",
"messageformat": "^2.3.0",
"moment": "^2.24.0",
@ -100,7 +103,7 @@
"@types/jquery": "^3.3.32",
"@types/js-beautify": "^1.8.1",
"@types/jstree": "^3.3.39",
"@types/node": "^13.7.2",
"@types/leaflet": "^1.5.9",
"@types/raphael": "^2.1.30",
"@types/react": "^16.9.20",
"@types/react-dom": "^16.9.5",

117
ui-ngx/src/app/modules/home/components/widget/lib/maps/leaflet-map.ts

@ -0,0 +1,117 @@
import * as L from 'leaflet';
import 'leaflet-providers';
import 'leaflet/dist/leaflet.css';
import 'leaflet.markercluster/dist/MarkerCluster.css'
import 'leaflet.markercluster/dist/MarkerCluster.Default.css'
import 'leaflet.markercluster/dist/leaflet.markercluster'
import { MapOptions } from './map-models';
export default class LeafletMap {
markers = [];
tooltips = [];
map: L.Map;
isMarketCluster;
constructor($container, options: MapOptions) {
this.isMarketCluster = options.markerClusteringSetting?.isMarketCluster;
// defaultCenterPosition = options.defaultCenterPosition || [0, 0];
this.map = L.map($container).setView(options.defaultCenterPosition, options.defaultZoomLevel || 8);
if (options.disableScrollZooming) {
this.map.scrollWheelZoom.disable();
}
let credetials = {
app_id: "AhM6TzD9ThyK78CT3ptx",
app_code: "p6NPiITB3Vv0GMUFnkLOOg"
}
var tileLayer = (L.tileLayer as any).provider("OpenStreetMap.Mapnik", credetials);
tileLayer.addTo(this.map);
/* if (this.isMarketCluster) {
this.markersCluster = L.markerClusterGroup(options.markerClusteringSetting);
this.map.addLayer(this.markersCluster);
}*/
if (options.initCallback) {
setTimeout(options.initCallback, 0); //eslint-disable-line
}
}
inited() {
return !!this.map;
}
getContainer() {
return /* this.isMarketCluster ? this.markersCluster :*/ this.map;
}
/*
fitBounds(bounds, useDefaultZoom) {
if (bounds.isValid()) {
if ((this.dontFitMapBounds || useDefaultZoom) && this.defaultZoomLevel) {
this.map.setZoom(this.defaultZoomLevel, { animate: false });
this.map.panTo(bounds.getCenter(), { animate: false });
} else {
this.map.once('zoomend', () => {
if (!this.defaultZoomLevel && this.map.getZoom() > this.minZoomLevel) {
this.map.setZoom(this.minZoomLevel, { animate: false });
}
});
this.map.fitBounds(bounds, { padding: [50, 50], animate: false });
}
}
}*/
createLatLng(lat, lng) {
return L.latLng(lat, lng);
}
createBounds() {
return this.map.getBounds();
}
extendBounds(bounds, polyline) {
if (polyline && polyline.getLatLngs() && polyline.getBounds()) {
bounds.extend(polyline.getBounds());
}
}
invalidateSize() {
this.map.invalidateSize(true);
}
createTooltip(marker, dsIndex, settings, markerArgs) {
var popup = L.popup();
popup.setContent('');
marker.bindPopup(popup, { autoClose: settings.autocloseTooltip, closeOnClick: false });
if (settings.displayTooltipAction == 'hover') {
marker.off('click');
marker.on('mouseover', function () {
this.openPopup();
});
marker.on('mouseout', function () {
this.closePopup();
});
}
return {
markerArgs: markerArgs,
popup: popup,
locationSettings: settings,
dsIndex: dsIndex
}
}
getTooltips() {
return this.tooltips;//rewrite
}
getCenter() {
return this.map.getCenter();
}
}

19
ui-ngx/src/app/modules/home/components/widget/lib/maps/map-models.ts

@ -0,0 +1,19 @@
export interface MapOptions {
initCallback?: Function,
defaultZoomLevel?: number,
dontFitMapBounds?: boolean,
disableScrollZooming?: boolean,
minZoomLevel?: number,
mapProvider: MapProviders,
credentials?: string,
defaultCenterPosition?: L.LatLngExpression,
markerClusteringSetting?
}
export enum MapProviders {
google = 'google-map',
openstreet = 'openstreet-map',
here = 'here',
image = 'image-map',
tencent = 'tencent-map'
}

14
ui-ngx/src/app/modules/home/components/widget/lib/maps/map-widget.interface.ts

@ -0,0 +1,14 @@
export interface MapWidgetInterface {
resize(),
onInit(),
onDataUpdated();
onResize();
getSettingsSchema(): Object;
onDestroy();
}
export interface MapWidgetStaticInterface {
settingsSchema(mapProvider, drawRoutes): Object;
dataKeySettingsSchema(): Object;
actionSources(): Object;
}

245
ui-ngx/src/app/modules/home/components/widget/lib/maps/map-widget2.ts

@ -0,0 +1,245 @@
import { MapProviders, MapOptions } from "./map-models";
import LeafletMap from './leaflet-map';
import { deepClone } from '@core/utils';
import { openstreetMapSettingsSchema, googleMapSettingsSchema, imageMapSettingsSchema, tencentMapSettingsSchema, hereMapSettingsSchema, commonMapSettingsSchema, routeMapSettingsSchema, markerClusteringSettingsSchema, markerClusteringSettingsSchemaGoogle, markerClusteringSettingsSchemaLeaflet } from './schemes';
import { MapWidgetStaticInterface, MapWidgetInterface } from './map-widget.interface';
const providerSets = {
openstreet: {
constructor: LeafletMap,
schema: openstreetMapSettingsSchema
}
}
export let TbMapWidgetV2: MapWidgetStaticInterface;
TbMapWidgetV2 = class TbMapWidgetV2 implements MapWidgetInterface {
map: LeafletMap;
provider: MapProviders;
schema;
constructor(mapProvider: MapProviders, drawRoutes, ctx, useDynamicLocations, $element, isEdit) {
// if(!$element) return
if (!$element) {
$element = ctx.$container[0];
}
this.provider = mapProvider;
const options: MapOptions = {
initCallback: () => { },
defaultZoomLevel: 8,
dontFitMapBounds: false,
disableScrollZooming: false,
minZoomLevel: drawRoutes ? 18 : 15,
mapProvider: mapProvider,
credentials: '',
defaultCenterPosition: [0, 0],
markerClusteringSetting: null
}
this.map = new LeafletMap($element, options)
this.schema = providerSets[mapProvider]?.schema;
}
onInit() {
}
onDataUpdated() {
}
onResize() {
}
getSettingsSchema(): Object {
return this.schema;
}
resize() {
}
public static dataKeySettingsSchema(): Object {
return {};
}
public static settingsSchema(mapProvider, drawRoutes): Object {
var schema;
if (mapProvider === 'google-map') {
schema = googleMapSettingsSchema;
schema.groupInfoes = [{
"formIndex": 0,
"GroupTitle": "Google Map Settings"
}];
} else if (mapProvider === 'openstreet-map') {
schema = deepClone(openstreetMapSettingsSchema);
schema.groupInfoes = [{
"formIndex": 0,
"GroupTitle": "Openstreet Map Settings"
}];
} else if (mapProvider === 'image-map') {
return imageMapSettingsSchema;
} else if (mapProvider === 'tencent-map') {
schema = deepClone(tencentMapSettingsSchema);
schema.groupInfoes = [{
"formIndex": 0,
"GroupTitle": "Tencent Map Settings"
}];
} else if (mapProvider === 'here') {
schema = deepClone(hereMapSettingsSchema);
schema.groupInfoes = [{
"formIndex": 0,
"GroupTitle": "Here Map Settings"
}];
}
if (!schema.groupInfoes) schema.groupInfoes = [];
schema.form = [schema.form];
Object.assign(schema.schema.properties, commonMapSettingsSchema.schema.properties);
schema.schema.required = schema.schema.required.concat(commonMapSettingsSchema.schema.required);
schema.form.push(commonMapSettingsSchema.form);//schema.form.concat(commonMapSettingsSchema.form);
schema.groupInfoes.push({
"formIndex": schema.groupInfoes.length,
"GroupTitle": "Common Map Settings"
});
if (drawRoutes) {
Object.assign(schema.schema.properties, routeMapSettingsSchema.schema.properties);
schema.schema.required = schema.schema.required.concat(routeMapSettingsSchema.schema.required);
schema.form.push(routeMapSettingsSchema.form);//schema.form = schema.form.concat(routeMapSettingsSchema.form);
schema.groupInfoes.push({
"formIndex": schema.groupInfoes.length,
"GroupTitle": "Route Map Settings"
});
} else if (mapProvider !== 'image-map') {
Object.assign(schema.schema.properties, markerClusteringSettingsSchema.schema.properties);
schema.schema.required = schema.schema.required.concat(markerClusteringSettingsSchema.schema.required);
schema.form.push(markerClusteringSettingsSchema.form);
if (mapProvider === 'google-map' || mapProvider === 'tencent-map') {
Object.assign(schema.schema.properties, markerClusteringSettingsSchemaGoogle.schema.properties);
schema.schema.required = schema.schema.required.concat(markerClusteringSettingsSchemaGoogle.schema.required);
schema.form[schema.form.length - 1] = schema.form[schema.form.length - 1].concat(markerClusteringSettingsSchemaGoogle.form);
}
if (mapProvider === 'openstreet-map' || mapProvider === 'here') {
Object.assign(schema.schema.properties, markerClusteringSettingsSchemaLeaflet.schema.properties);
schema.schema.required = schema.schema.required.concat(markerClusteringSettingsSchemaLeaflet.schema.required);
schema.form[schema.form.length - 1] = schema.form[schema.form.length - 1].concat(markerClusteringSettingsSchemaLeaflet.form);
}
schema.groupInfoes.push({
"formIndex": schema.groupInfoes.length,
"GroupTitle": "Markers Clustering Settings"
});
}
return schema;
}
public static actionSources(): Object {
return {
'markerClick': {
name: 'widget-action.marker-click',
multiple: false
},
'polygonClick': {
name: 'widget-action.polygon-click',
multiple: false
},
'tooltipAction': {
name: 'widget-action.tooltip-tag-action',
multiple: true
}
};
}
onDestroy() {
}
}
let defaultSettings = {
xPosKeyName: 'xPos',
yPosKeyName: 'yPos',
markerOffsetX: 0.5,
markerOffsetY: 1,
latKeyName: 'latitude',
lngKeyName: 'longitude',
polygonKeyName: 'coordinates',
//this.locationSettings.tooltipPattern = this.ctx.settings.tooltipPattern || "<b>${entityName}</b><br/><br/><b>Latitude:</b> ${" + this.locationSettings.latKeyName + ":7}<br/><b>Longitude:</b> ${" + this.locationSettings.lngKeyName + ":7}",
showLabel: false,
showTooltip: false,
useDefaultCenterPosition: true,
showTooltipAction: "click",
autocloseTooltip: false,
showPolygon: true,
labelColor: '#000000',
/* this.locationSettings.label = this.ctx.settings.label || "${entityName}",
this.locationSettings.color = this.ctx.settings.color ? tinycolor(this.ctx.settings.color).toHexString() : "#FE7569",
this.locationSettings.polygonColor = this.ctx.settings.polygonColor ? tinycolor(this.ctx.settings.polygonColor).toHexString() : "#0000ff",
this.locationSettings.polygonStrokeColor = this.ctx.settings.polygonStrokeColor ? tinycolor(this.ctx.settings.polygonStrokeColor).toHexString() : "#fe0001",
this.locationSettings.polygonOpacity = angular.isDefined(this.ctx.settings.polygonOpacity) ? this.ctx.settings.polygonOpacity : 0.5,
this.locationSettings.polygonStrokeOpacity = angular.isDefined(this.ctx.settings.polygonStrokeOpacity) ? this.ctx.settings.polygonStrokeOpacity : 1,
this.locationSettings.polygonStrokeWeight = angular.isDefined(this.ctx.settings.polygonStrokeWeight) ? this.ctx.settings.polygonStrokeWeight : 1,
this.locationSettings.useLabelFunction = this.ctx.settings.useLabelFunction === true,
if(angular.isDefined(this.ctx.settings.labelFunction) && this.ctx.settings.labelFunction.length > 0) {
try {
this.locationSettings.labelFunction = new Function('data, dsData, dsIndex', this.ctx.settings.labelFunction),
} catch (e) {
this.locationSettings.labelFunction = null,
}
}
this.locationSettings.useTooltipFunction = this.ctx.settings.useTooltipFunction === true,
if (angular.isDefined(this.ctx.settings.tooltipFunction) && this.ctx.settings.tooltipFunction.length > 0) {
try {
this.locationSettings.tooltipFunction = new Function('data, dsData, dsIndex', this.ctx.settings.tooltipFunction),
} catch (e) {
this.locationSettings.tooltipFunction = null,
}
}
this.locationSettings.useColorFunction = this.ctx.settings.useColorFunction === true,
if (angular.isDefined(this.ctx.settings.colorFunction) && this.ctx.settings.colorFunction.length > 0) {
try {
this.locationSettings.colorFunction = new Function('data, dsData, dsIndex', this.ctx.settings.colorFunction),
} catch (e) {
this.locationSettings.colorFunction = null,
}
}
this.locationSettings.usePolygonColorFunction = this.ctx.settings.usePolygonColorFunction === true,
if (angular.isDefined(this.ctx.settings.polygonColorFunction) && this.ctx.settings.polygonColorFunction.length > 0) {
try {
this.locationSettings.polygonColorFunction = new Function('data, dsData, dsIndex', this.ctx.settings.polygonColorFunction),
} catch (e) {
this.locationSettings.polygonColorFunction = null,
}
}
this.locationSettings.useMarkerImageFunction = this.ctx.settings.useMarkerImageFunction === true,
if (angular.isDefined(this.ctx.settings.markerImageFunction) && this.ctx.settings.markerImageFunction.length > 0) {
try {
this.locationSettings.markerImageFunction = new Function('data, images, dsData, dsIndex', this.ctx.settings.markerImageFunction),
} catch (e) {
this.locationSettings.markerImageFunction = null,
}
}
this.locationSettings.markerImages = this.ctx.settings.markerImages || [],
if (!this.locationSettings.useMarkerImageFunction &&
angular.isDefined(this.ctx.settings.markerImage) &&
this.ctx.settings.markerImage.length > 0) {
this.locationSettings.useMarkerImage = true,
var url = this.ctx.settings.markerImage,
var size = this.ctx.settings.markerImageSize || 34,
this.locationSettings.currentImage = {
url: url,
size: size
},
}
if (this.drawRoutes) {
this.locationSettings.strokeWeight = this.ctx.settings.strokeWeight || 2,
this.locationSettings.strokeOpacity = this.ctx.settings.strokeOpacity || 1.0,*/
}

22
ui-ngx/src/app/modules/home/components/widget/lib/maps/maps-utils.ts

@ -0,0 +1,22 @@
import L from 'leaflet';
export function createTooltip(target, dsIndex, settings, targetArgs?) {
var popup = L.popup();
popup.setContent('');
target.bindPopup(popup, { autoClose: settings.autocloseTooltip, closeOnClick: false });
if (settings.displayTooltipAction == 'hover') {
target.off('click');
target.on('mouseover', function () {
this.openPopup();
});
target.on('mouseout', function () {
this.closePopup();
});
}
return {
markerArgs: targetArgs,
popup: popup,
locationSettings: settings,
dsIndex: dsIndex
};
}

137
ui-ngx/src/app/modules/home/components/widget/lib/maps/markers.ts

@ -0,0 +1,137 @@
import L from 'leaflet';
import { createTooltip } from './maps-utils';
export class Marker {
leafletMarker: L.Marker;
map: L.Map;
tooltipOffset;
tooltip;
constructor(map: L.Map, location, dsIndex, settings, onClickListener, markerArgs, onDragendListener) {
this.map = map;
this.leafletMarker = L.marker(location, {
draggable: settings.drraggable
});
this.createMarkerIcon(this.leafletMarker, settings, (iconInfo) => {
this.leafletMarker.setIcon(iconInfo.icon);
if (settings.showLabel) {
this.tooltipOffset = [0, -iconInfo.size[1] + 10];
this.updateMarkerLabel(settings)
}
this.leafletMarker.addTo(this.map);
});
if (settings.displayTooltip) {
this.tooltip = createTooltip(this.leafletMarker, dsIndex, settings, markerArgs);
}
if (onClickListener) {
this.leafletMarker.on('click', onClickListener);
}
if (onDragendListener) {
this.leafletMarker.on('dragend', onDragendListener);
}
}
updateMarkerLabel(settings) {
this.leafletMarker.unbindTooltip();
if (settings.showLabel)
this.leafletMarker.bindTooltip(`<div style="color: ${settings.labelColor};"><b>${settings.labelText}</b></div>`,
{ className: 'tb-marker-label', permanent: true, direction: 'top', offset: this.tooltipOffset });
}
updateMarkerColor(marker, color) {
this.createDefaultMarkerIcon(color, (iconInfo) => {
this.leafletMarker.setIcon(iconInfo.icon);
});
}
updateMarkerIcon(marker, settings) {
this.createMarkerIcon(marker, settings, (iconInfo) => {
this.leafletMarker.setIcon(iconInfo.icon);
if (settings.showLabel) {
this.tooltipOffset = [0, -iconInfo.size[1] + 10];
this.updateMarkerLabel(settings)
}
});
}
createMarkerIcon(marker, settings, onMarkerIconReady) {
var currentImage = settings.currentImage;
// var opMap = this;
/* if (currentImage && currentImage.url) {
this.utils.loadImageAspect(currentImage.url).then(
(aspect) => {
if (aspect) {
var width;
var height;
if (aspect > 1) {
width = currentImage.size;
height = currentImage.size / aspect;
} else {
width = currentImage.size * aspect;
height = currentImage.size;
}
var icon = L.icon({
iconUrl: currentImage.url,
iconSize: [width, height],
iconAnchor: [width / 2, height],
popupAnchor: [0, -height]
});
var iconInfo = {
size: [width, height],
icon: icon
};
onMarkerIconReady(iconInfo);
} else {
opMap.createDefaultMarkerIcon(settings.color, onMarkerIconReady);
}
}
);
} else {
this.createDefaultMarkerIcon(settings.color, onMarkerIconReady);
}*/
}
createDefaultMarkerIcon(color, onMarkerIconReady) {
var pinColor = color.substr(1);
var icon = L.icon({
iconUrl: 'https://chart.apis.google.com/chart?chst=d_map_pin_letter&chld=%E2%80%A2|' + pinColor,
iconSize: [21, 34],
iconAnchor: [10, 34],
popupAnchor: [0, -34],
shadowUrl: 'https://chart.apis.google.com/chart?chst=d_map_pin_shadow',
shadowSize: [40, 37],
shadowAnchor: [12, 35]
});
var iconInfo = {
size: [21, 34],
icon: icon
};
onMarkerIconReady(iconInfo);
}
removeMarker() {
this.map.removeLayer(this.leafletMarker);
}
extendBoundsWithMarker(bounds) {
bounds.extend(this.leafletMarker.getLatLng());
}
getMarkerPosition() {
return this.leafletMarker.getLatLng();
}
setMarkerPosition(latLng) {
this.leafletMarker.setLatLng(latLng);
}
}

53
ui-ngx/src/app/modules/home/components/widget/lib/maps/polygon.ts

@ -0,0 +1,53 @@
import L from 'leaflet';
import { createTooltip } from './maps-utils';
export class Polygon {
map: L.Map;
leafletPoly: L.Polygon;
tooltip;
constructor(latLangs, settings, location, onClickListener) {
this.leafletPoly = L.polygon(latLangs, {
fill: true,
fillColor: settings.polygonColor,
color: settings.polygonStrokeColor,
weight: settings.polygonStrokeWeight,
fillOpacity: settings.polygonOpacity,
opacity: settings.polygonStrokeOpacity
}).addTo(this.map);
if (settings.displayTooltip) {
this.tooltip = createTooltip(this.leafletPoly, location.dsIndex, settings);
}
if (onClickListener) {
this.leafletPoly.on('click', onClickListener);
}
}
removePolygon() {
this.map.removeLayer(this.leafletPoly);
}
updatePolygonColor(settings, color) {
let style = {
fill: true,
fillColor: color,
color: color,
weight: settings.polygonStrokeWeight,
fillOpacity: settings.polygonOpacity,
opacity: settings.polygonStrokeOpacity
};
this.leafletPoly.setStyle(style);
}
getPolygonLatLngs() {
return this.leafletPoly.getLatLngs();
}
setPolygonLatLngs(latLngs) {
this.leafletPoly.setLatLngs(latLngs);
this.leafletPoly.redraw();
}
}

38
ui-ngx/src/app/modules/home/components/widget/lib/maps/polyline.ts

@ -0,0 +1,38 @@
import L from 'leaflet';
export class Polyline {
map: L.Map;
leafletPoly: L.Polyline;
constructor(locations, settings) {
this.leafletPoly = L.polyline(locations,
{
color: settings.color,
opacity: settings.strokeOpacity,
weight: settings.strokeWeight
}
).addTo(this.map);
}
updatePolylineColor(settings, color) {
var style = {
color: color,
opacity: settings.strokeOpacity,
weight: settings.strokeWeight
};
this.leafletPoly.setStyle(style);
}
removePolyline() {
this.map.removeLayer(this.leafletPoly);
}
getPolylineLatLngs() {
return this.leafletPoly.getLatLngs();
}
setPolylineLatLngs(latLngs) {
this.leafletPoly.setLatLngs(latLngs);
}
}

813
ui-ngx/src/app/modules/home/components/widget/lib/maps/schemes.ts

@ -0,0 +1,813 @@
export const googleMapSettingsSchema =
{
"schema": {
"title": "Google Map Configuration",
"type": "object",
"properties": {
"gmApiKey": {
"title": "Google Maps API Key",
"type": "string"
},
"gmDefaultMapType": {
"title": "Default map type",
"type": "string",
"default": "roadmap"
}
},
"required": [
"gmApiKey"
]
},
"form": [
"gmApiKey",
{
"key": "gmDefaultMapType",
"type": "rc-select",
"multiple": false,
"items": [
{
"value": "roadmap",
"label": "Roadmap"
},
{
"value": "satellite",
"label": "Satellite"
},
{
"value": "hybrid",
"label": "Hybrid"
},
{
"value": "terrain",
"label": "Terrain"
}
]
}
]
};
export const tencentMapSettingsSchema =
{
"schema": {
"title": "Tencent Map Configuration",
"type": "object",
"properties": {
"tmApiKey": {
"title": "Tencent Maps API Key",
"type": "string"
},
"tmDefaultMapType": {
"title": "Default map type",
"type": "string",
"default": "roadmap"
}
},
"required": [
"tmApiKey"
]
},
"form": [
"tmApiKey",
{
"key": "tmDefaultMapType",
"type": "rc-select",
"multiple": false,
"items": [
{
"value": "roadmap",
"label": "Roadmap"
},
{
"value": "satellite",
"label": "Satellite"
},
{
"value": "hybrid",
"label": "Hybrid"
},
]
}
]
};
export const hereMapSettingsSchema =
{
"schema": {
"title": "HERE Map Configuration",
"type": "object",
"properties": {
"mapProvider": {
"title": "Map layer",
"type": "string",
"default": "HERE.normalDay"
},
"credentials": {
"type": "object",
"properties": {
"app_id": {
"title": "HERE app id",
"type": "string"
},
"app_code": {
"title": "HERE app code",
"type": "string"
}
},
"required": ["app_id", "app_code"]
}
},
"required": []
},
"form": [
{
"key": "mapProvider",
"type": "rc-select",
"multiple": false,
"items": [
{
"value": "HERE.normalDay",
"label": "HERE.normalDay (Default)"
},
{
"value": "HERE.normalNight",
"label": "HERE.normalNight"
},
{
"value": "HERE.hybridDay",
"label": "HERE.hybridDay"
},
{
"value": "HERE.terrainDay",
"label": "HERE.terrainDay"
}
]
},
"credentials"
]
};
export const openstreetMapSettingsSchema =
{
"schema": {
"title": "Openstreet Map Configuration",
"type": "object",
"properties": {
"mapProvider": {
"title": "Map provider",
"type": "string",
"default": "OpenStreetMap.Mapnik"
},
"useCustomProvider": {
"title": "Use custom provider",
"type": "boolean",
"default": false
},
"customProviderTileUrl": {
"title": "Custom provider tile URL",
"type": "string",
"default": "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
}
},
"required": []
},
"form": [
{
"key": "mapProvider",
"type": "rc-select",
"multiple": false,
"items": [
{
"value": "OpenStreetMap.Mapnik",
"label": "OpenStreetMap.Mapnik (Default)"
},
{
"value": "OpenStreetMap.BlackAndWhite",
"label": "OpenStreetMap.BlackAndWhite"
},
{
"value": "OpenStreetMap.HOT",
"label": "OpenStreetMap.HOT"
},
{
"value": "Esri.WorldStreetMap",
"label": "Esri.WorldStreetMap"
},
{
"value": "Esri.WorldTopoMap",
"label": "Esri.WorldTopoMap"
},
{
"value": "CartoDB.Positron",
"label": "CartoDB.Positron"
},
{
"value": "CartoDB.DarkMatter",
"label": "CartoDB.DarkMatter"
}
]
},
"useCustomProvider",
"customProviderTileUrl"
]
};
export const commonMapSettingsSchema =
{
"schema": {
"title": "Map Configuration",
"type": "object",
"properties": {
"defaultZoomLevel": {
"title": "Default map zoom level (0 - 20)",
"type": "number"
},
"useDefaultCenterPosition": {
"title": "Use default map center position",
"type": "boolean",
"default": false
},
"defaultCenterPosition": {
"title": "Default map center position (0,0)",
"type": "string",
"default": "0,0"
},
"fitMapBounds": {
"title": "Fit map bounds to cover all markers",
"type": "boolean",
"default": true
},
"disableScrollZooming": {
"title": "Disable scroll zooming",
"type": "boolean",
"default": false
},
"latKeyName": {
"title": "Latitude key name",
"type": "string",
"default": "latitude"
},
"lngKeyName": {
"title": "Longitude key name",
"type": "string",
"default": "longitude"
},
"showLabel": {
"title": "Show label",
"type": "boolean",
"default": true
},
"label": {
"title": "Label (pattern examples: '${entityName}', '${entityName}: (Text ${keyName} units.)' )",
"type": "string",
"default": "${entityName}"
},
"useLabelFunction": {
"title": "Use label function",
"type": "boolean",
"default": false
},
"labelFunction": {
"title": "Label function: f(data, dsData, dsIndex)",
"type": "string"
},
"showTooltip": {
"title": "Show tooltip",
"type": "boolean",
"default": true
},
"showTooltipAction": {
"title": "Action for displaying the tooltip",
"type": "string",
"default": "click"
},
"autocloseTooltip": {
"title": "Auto-close tooltips",
"type": "boolean",
"default": true
},
"tooltipPattern": {
"title": "Tooltip (for ex. 'Text ${keyName} units.' or <link-act name='my-action'>Link text</link-act>')",
"type": "string",
"default": "<b>${entityName}</b><br/><br/><b>Latitude:</b> ${latitude:7}<br/><b>Longitude:</b> ${longitude:7}"
},
"useTooltipFunction": {
"title": "Use tooltip function",
"type": "boolean",
"default": false
},
"tooltipFunction": {
"title": "Tooltip function: f(data, dsData, dsIndex)",
"type": "string"
},
"color": {
"title": "Color",
"type": "string"
},
"useColorFunction": {
"title": "Use color function",
"type": "boolean",
"default": false
},
"colorFunction": {
"title": "Color function: f(data, dsData, dsIndex)",
"type": "string"
},
"showPolygon": {
"title": "Show polygon",
"type": "boolean",
"default": false
},
"polygonKeyName": {
"title": "Polygon key name",
"type": "string",
"default": "coordinates"
},
"polygonColor": {
"title": "Polygon color",
"type": "string"
},
"polygonOpacity": {
"title": "Polygon opacity",
"type": "number",
"default": 0.5
},
"polygonStrokeColor": {
"title": "Stroke color",
"type": "string"
},
"polygonStrokeOpacity": {
"title": "Stroke opacity",
"type": "number",
"default": 1
},
"polygonStrokeWeight": {
"title": "Stroke weight",
"type": "number",
"default": 1
},
"usePolygonColorFunction": {
"title": "Use polygon color function",
"type": "boolean",
"default": false
},
"polygonColorFunction": {
"title": "Polygon Color function: f(data, dsData, dsIndex)",
"type": "string"
},
"markerImage": {
"title": "Custom marker image",
"type": "string"
},
"markerImageSize": {
"title": "Custom marker image size (px)",
"type": "number",
"default": 34
},
"useMarkerImageFunction": {
"title": "Use marker image function",
"type": "boolean",
"default": false
},
"markerImageFunction": {
"title": "Marker image function: f(data, images, dsData, dsIndex)",
"type": "string"
},
"markerImages": {
"title": "Marker images",
"type": "array",
"items": {
"title": "Marker image",
"type": "string"
}
}
},
"required": []
},
"form": [
"defaultZoomLevel",
"useDefaultCenterPosition",
"defaultCenterPosition",
"fitMapBounds",
"disableScrollZooming",
"latKeyName",
"lngKeyName",
"showLabel",
"label",
"useLabelFunction",
{
"key": "labelFunction",
"type": "javascript"
},
"showTooltip",
{
"key": "showTooltipAction",
"type": "rc-select",
"multiple": false,
"items": [
{
"value": "click",
"label": "Show tooltip on click (Default)"
},
{
"value": "hover",
"label": "Show tooltip on hover"
}
]
},
"autocloseTooltip",
{
"key": "tooltipPattern",
"type": "textarea"
},
"useTooltipFunction",
{
"key": "tooltipFunction",
"type": "javascript"
},
{
"key": "color",
"type": "color"
},
"useColorFunction",
{
"key": "colorFunction",
"type": "javascript"
}, "showPolygon", "polygonKeyName",
{
"key": "polygonColor",
"type": "color"
},
"polygonOpacity",
{
"key": "polygonStrokeColor",
"type": "color"
},
"polygonStrokeOpacity", "polygonStrokeWeight", "usePolygonColorFunction",
{
"key": "polygonColorFunction",
"type": "javascript"
},
{
"key": "markerImage",
"type": "image"
},
"markerImageSize",
"useMarkerImageFunction",
{
"key": "markerImageFunction",
"type": "javascript"
},
{
"key": "markerImages",
"items": [
{
"key": "markerImages[]",
"type": "image"
}
]
}
]
};
export const routeMapSettingsSchema =
{
"schema": {
"title": "Route Map Configuration",
"type": "object",
"properties": {
"strokeWeight": {
"title": "Stroke weight",
"type": "number",
"default": 2
},
"strokeOpacity": {
"title": "Stroke opacity",
"type": "number",
"default": 1.0
}
},
"required": []
},
"form": [
"strokeWeight",
"strokeOpacity"
]
};
export const markerClusteringSettingsSchema =
{
"schema": {
"title": "Markers Clustering Configuration",
"type": "object",
"properties": {
"useClusterMarkers": {
"title": "Use map markers clustering",
"type": "boolean",
"default": false
},
"zoomOnClick": {
"title": "Zoom when clicking on a cluster",
"type": "boolean",
"default": true
},
"maxZoom": {
"title": "The maximum zoom level when a marker can be part of a cluster (0 - 18)",
"type": "number"
}
},
"required": []
},
"form": [
"useClusterMarkers",
"zoomOnClick",
"maxZoom"
]
};
export const markerClusteringSettingsSchemaGoogle =
{
"schema": {
"title": "Marker Clustering Configuration Google",
"type": "object",
"properties": {
"gridSize": {
"title": "Maximum radius that a cluster will cover in pixels",
"type": "number",
"default": 60
},
"minimumClusterSize": {
"title": "The minimum number of markers in a cluster",
"type": "number"
}
},
"required": []
},
"form": [
"gridSize",
"minimumClusterSize"
]
};
export const markerClusteringSettingsSchemaLeaflet =
{
"schema": {
"title": "Markers Clustering Configuration Leaflet",
"type": "object",
"properties": {
"showCoverageOnHover": {
"title": "Show the bounds of markers when mouse over a cluster",
"type": "boolean",
"default": true
},
"animate": {
"title": "Show animation on markers when zooming",
"type": "boolean",
"default": true
},
"maxClusterRadius": {
"title": "Maximum radius that a cluster will cover in pixels",
"type": "number",
"default": 80
},
"chunkedLoading": {
"title": "Use chunks for adding markers so that the page does not freeze",
"type": "boolean",
"default": false
},
"removeOutsideVisibleBounds": {
"title": "Use lazy load for adding markers",
"type": "boolean",
"default": true
}
},
"required": []
},
"form": [
"showCoverageOnHover",
"animate",
"maxClusterRadius",
"chunkedLoading",
"removeOutsideVisibleBounds"
]
};
export const imageMapSettingsSchema =
{
"schema": {
"title": "Image Map Configuration",
"type": "object",
"properties": {
"mapImageUrl": {
"title": "Image map background",
"type": "string",
"default": "data:image/svg+xml;base64,PHN2ZyBpZD0ic3ZnMiIgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMTAwIiB3aWR0aD0iMTAwIiB2ZXJzaW9uPSIxLjEiIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgdmlld0JveD0iMCAwIDEwMCAxMDAiPgogPGcgaWQ9ImxheWVyMSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAtOTUyLjM2KSI+CiAgPHJlY3QgaWQ9InJlY3Q0Njg0IiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBoZWlnaHQ9Ijk5LjAxIiB3aWR0aD0iOTkuMDEiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiB5PSI5NTIuODYiIHg9Ii40OTUwNSIgc3Ryb2tlLXdpZHRoPSIuOTkwMTAiIGZpbGw9IiNlZWUiLz4KICA8dGV4dCBpZD0idGV4dDQ2ODYiIHN0eWxlPSJ3b3JkLXNwYWNpbmc6MHB4O2xldHRlci1zcGFjaW5nOjBweDt0ZXh0LWFuY2hvcjptaWRkbGU7dGV4dC1hbGlnbjpjZW50ZXIiIGZvbnQtd2VpZ2h0PSJib2xkIiB4bWw6c3BhY2U9InByZXNlcnZlIiBmb250LXNpemU9IjEwcHgiIGxpbmUtaGVpZ2h0PSIxMjUlIiB5PSI5NzAuNzI4MDkiIHg9IjQ5LjM5NjQ3NyIgZm9udC1mYW1pbHk9IlJvYm90byIgZmlsbD0iIzY2NjY2NiI+PHRzcGFuIGlkPSJ0c3BhbjQ2OTAiIHg9IjUwLjY0NjQ3NyIgeT0iOTcwLjcyODA5Ij5JbWFnZSBiYWNrZ3JvdW5kIDwvdHNwYW4+PHRzcGFuIGlkPSJ0c3BhbjQ2OTIiIHg9IjQ5LjM5NjQ3NyIgeT0iOTgzLjIyODA5Ij5pcyBub3QgY29uZmlndXJlZDwvdHNwYW4+PC90ZXh0PgogIDxyZWN0IGlkPSJyZWN0NDY5NCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgaGVpZ2h0PSIxOS4zNiIgd2lkdGg9IjY5LjM2IiBzdHJva2U9IiMwMDAiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgeT0iOTkyLjY4IiB4PSIxNS4zMiIgc3Ryb2tlLXdpZHRoPSIuNjM5ODYiIGZpbGw9Im5vbmUiLz4KIDwvZz4KPC9zdmc+Cg=="
},
"imageEntityAlias": {
"title": "Image URL source entity alias",
"type": "string",
"default": ""
},
"imageUrlAttribute": {
"title": "Image URL source entity attribute",
"type": "string",
"default": ""
},
"disableScrollZooming": {
"title": "Disable scroll zooming",
"type": "boolean",
"default": false
},
"xPosKeyName": {
"title": "X position key name",
"type": "string",
"default": "xPos"
},
"yPosKeyName": {
"title": "Y position key name",
"type": "string",
"default": "yPos"
},
"showLabel": {
"title": "Show label",
"type": "boolean",
"default": true
},
"label": {
"title": "Label (pattern examples: '${entityName}', '${entityName}: (Text ${keyName} units.)' )",
"type": "string",
"default": "${entityName}"
},
"useLabelFunction": {
"title": "Use label function",
"type": "boolean",
"default": false
},
"labelFunction": {
"title": "Label function: f(data, dsData, dsIndex)",
"type": "string"
},
"showTooltip": {
"title": "Show tooltip",
"type": "boolean",
"default": true
},
"showTooltipAction": {
"title": "Action for displaying the tooltip",
"type": "string",
"default": "click"
},
"autocloseTooltip": {
"title": "Auto-close tooltips",
"type": "boolean",
"default": true
},
"tooltipPattern": {
"title": "Tooltip (for ex. 'Text ${keyName} units.' or <link-act name='my-action'>Link text</link-act>')",
"type": "string",
"default": "<b>${entityName}</b><br/><br/><b>X Pos:</b> ${xPos:2}<br/><b>Y Pos:</b> ${yPos:2}"
},
"useTooltipFunction": {
"title": "Use tooltip function",
"type": "boolean",
"default": false
},
"tooltipFunction": {
"title": "Tooltip function: f(data, dsData, dsIndex)",
"type": "string"
},
"color": {
"title": "Color",
"type": "string"
},
"posFunction": {
"title": "Position conversion function: f(origXPos, origYPos), should return x,y coordinates as double from 0 to 1 each",
"type": "string",
"default": "return {x: origXPos, y: origYPos};"
},
"markerOffsetX": {
"title": "Marker X offset relative to position",
"type": "number",
"default": 0.5
},
"markerOffsetY": {
"title": "Marker Y offset relative to position",
"type": "number",
"default": 1
},
"useColorFunction": {
"title": "Use color function",
"type": "boolean",
"default": false
},
"colorFunction": {
"title": "Color function: f(data, dsData, dsIndex)",
"type": "string"
},
"markerImage": {
"title": "Custom marker image",
"type": "string"
},
"markerImageSize": {
"title": "Custom marker image size (px)",
"type": "number",
"default": 34
},
"useMarkerImageFunction": {
"title": "Use marker image function",
"type": "boolean",
"default": false
},
"markerImageFunction": {
"title": "Marker image function: f(data, images, dsData, dsIndex)",
"type": "string"
},
"markerImages": {
"title": "Marker images",
"type": "array",
"items": {
"title": "Marker image",
"type": "string"
}
}
},
"required": []
},
"form": [
{
"key": "mapImageUrl",
"type": "image"
},
"imageEntityAlias",
"imageUrlAttribute",
"disableScrollZooming",
"xPosKeyName",
"yPosKeyName",
"showLabel",
"label",
"useLabelFunction",
{
"key": "labelFunction",
"type": "javascript"
},
"showTooltip",
{
"key": "showTooltipAction",
"type": "rc-select",
"multiple": false,
"items": [
{
"value": "click",
"label": "Show tooltip on click (Default)"
},
{
"value": "hover",
"label": "Show tooltip on hover"
}
]
},
"autocloseTooltip",
{
"key": "tooltipPattern",
"type": "textarea"
},
"useTooltipFunction",
{
"key": "tooltipFunction",
"type": "javascript"
},
{
"key": "color",
"type": "color"
},
{
"key": "posFunction",
"type": "javascript"
},
"markerOffsetX",
"markerOffsetY",
"useColorFunction",
{
"key": "colorFunction",
"type": "javascript"
},
{
"key": "markerImage",
"type": "image"
},
"markerImageSize",
"useMarkerImageFunction",
{
"key": "markerImageFunction",
"type": "javascript"
},
{
"key": "markerImages",
"items": [
{
"key": "markerImages[]",
"type": "image"
}
]
}
]
};

4
ui-ngx/src/polyfills.ts

@ -92,7 +92,8 @@ import { TbAnalogueCompass } from '@home/components/widget/lib/analogue-compass'
import { TbAnalogueRadialGauge } from '@home/components/widget/lib/analogue-radial-gauge';
import { TbAnalogueLinearGauge } from '@home/components/widget/lib/analogue-linear-gauge';
import { TbCanvasDigitalGauge } from '@home/components/widget/lib/digital-gauge';
import { TbMapWidgetV2 } from '@home/components/widget/lib/maps/map-widget2';
import * as tinycolor_ from 'tinycolor2';
const tinycolor = tinycolor_;
@ -104,3 +105,4 @@ const tinycolor = tinycolor_;
(window as any).TbAnalogueRadialGauge = TbAnalogueRadialGauge;
(window as any).TbAnalogueLinearGauge = TbAnalogueLinearGauge;
(window as any).TbCanvasDigitalGauge = TbCanvasDigitalGauge;
(window as any).TbMapWidgetV2 = TbMapWidgetV2;

Loading…
Cancel
Save