Browse Source

here maps support && WIP on markers

pull/2535/head
Artem Halushko 7 years ago
parent
commit
f3615348b7
  1. 30
      ui-ngx/src/app/modules/home/components/widget/lib/maps/leaflet-map.ts
  2. 6
      ui-ngx/src/app/modules/home/components/widget/lib/maps/map-models.ts
  3. 115
      ui-ngx/src/app/modules/home/components/widget/lib/maps/map-widget2.ts
  4. 4
      ui-ngx/src/app/modules/home/components/widget/lib/maps/maps-utils.ts
  5. 19
      ui-ngx/src/app/modules/home/components/widget/lib/maps/markers.ts
  6. 20
      ui-ngx/src/app/modules/home/components/widget/lib/maps/providers/here-map.ts
  7. 1
      ui-ngx/src/app/modules/home/components/widget/lib/maps/providers/index.ts

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

@ -5,13 +5,16 @@ import 'leaflet.markercluster/dist/MarkerCluster.css'
import 'leaflet.markercluster/dist/MarkerCluster.Default.css' import 'leaflet.markercluster/dist/MarkerCluster.Default.css'
import 'leaflet.markercluster/dist/leaflet.markercluster' import 'leaflet.markercluster/dist/leaflet.markercluster'
import { MapOptions } from './map-models'; import { MapOptions, MarkerSettings } from './map-models';
import { Marker } from './markers';
import { Observable, of } from 'rxjs';
export default class LeafletMap { export default class LeafletMap {
markers = []; markers = [];
tooltips = []; tooltips = [];
map: L.Map; map: L.Map;
map$: Observable<L.Map>;
options: MapOptions; options: MapOptions;
isMarketCluster; isMarketCluster;
@ -44,6 +47,7 @@ export default class LeafletMap {
public setMap(map: L.Map) { public setMap(map: L.Map) {
this.map = map; this.map = map;
this.map$ = of(this.map);
} }
getContainer() { getContainer() {
@ -84,7 +88,7 @@ export default class LeafletMap {
this.map.invalidateSize(true); this.map.invalidateSize(true);
} }
createTooltip(marker, dsIndex, settings, markerArgs) { createTool0tip(marker, dsIndex, settings, markerArgs) {
var popup = L.popup(); var popup = L.popup();
popup.setContent(''); popup.setContent('');
marker.bindPopup(popup, { autoClose: settings.autocloseTooltip, closeOnClick: false }); marker.bindPopup(popup, { autoClose: settings.autocloseTooltip, closeOnClick: false });
@ -105,8 +109,8 @@ export default class LeafletMap {
} }
} }
onResize(){ onResize() {
} }
getTooltips() { getTooltips() {
@ -117,5 +121,23 @@ export default class LeafletMap {
return this.map.getCenter(); return this.map.getCenter();
} }
////Markers
createMarker() {
let setings: MarkerSettings = {
}
this.markers.push(new Marker(this.map$, { lat: 0, lng: 0 }, setings))
}
updateMarker() {
}
deleteMarker() {
}
} }

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

@ -17,4 +17,10 @@ export enum MapProviders {
here = 'here', here = 'here',
image = 'image-map', image = 'image-map',
tencent = 'tencent-map' tencent = 'tencent-map'
}
export interface MarkerSettings{
showLabel?: boolean,
draggable?: boolean,
displayTooltip?: boolean
} }

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

@ -1,10 +1,19 @@
import { MapProviders, MapOptions } from "./map-models"; import { MapProviders, MapOptions } from "./map-models";
import LeafletMap from './leaflet-map'; import LeafletMap from './leaflet-map';
import { deepClone } from '@core/utils'; import {
import { openstreetMapSettingsSchema, googleMapSettingsSchema, imageMapSettingsSchema, tencentMapSettingsSchema, hereMapSettingsSchema, commonMapSettingsSchema, routeMapSettingsSchema, markerClusteringSettingsSchema, markerClusteringSettingsSchemaGoogle, markerClusteringSettingsSchemaLeaflet } from './schemes'; openstreetMapSettingsSchema,
googleMapSettingsSchema,
imageMapSettingsSchema,
tencentMapSettingsSchema,
commonMapSettingsSchema,
routeMapSettingsSchema,
markerClusteringSettingsSchema,
markerClusteringSettingsSchemaLeaflet,
hereMapSettingsSchema
} from './schemes';
import { MapWidgetStaticInterface, MapWidgetInterface } from './map-widget.interface'; import { MapWidgetStaticInterface, MapWidgetInterface } from './map-widget.interface';
import { OpenStreetMap, TencentMap, ImageMap, GoogleMap } from './providers'; import { OpenStreetMap, TencentMap, GoogleMap, HEREMap, ImageMap } from './providers';
import { string } from 'prop-types';
const providerSets = { const providerSets = {
'openstreet-map': { 'openstreet-map': {
@ -22,6 +31,11 @@ const providerSets = {
schema: googleMapSettingsSchema, schema: googleMapSettingsSchema,
name: "Openstreet" name: "Openstreet"
}, },
'here': {
MapClass: HEREMap,
schema: hereMapSettingsSchema,
name: "HERE"
},
'image-map': { 'image-map': {
MapClass: ImageMap, MapClass: ImageMap,
schema: imageMapSettingsSchema schema: imageMapSettingsSchema
@ -34,7 +48,7 @@ TbMapWidgetV2 = class TbMapWidgetV2 implements MapWidgetInterface {
provider: MapProviders; provider: MapProviders;
schema; schema;
constructor(mapProvider: MapProviders, drawRoutes, ctx, useDynamicLocations, $element, isEdit) { constructor(mapProvider: MapProviders, drawRoutes, ctx, $element) {
console.log(ctx.settings); console.log(ctx.settings);
if (!$element) { if (!$element) {
@ -58,7 +72,7 @@ TbMapWidgetV2 = class TbMapWidgetV2 implements MapWidgetInterface {
return; return;
} }
this.map = new MapClass($element, { ...baseOptions, ...ctx.settings }) this.map = new MapClass($element, { ...baseOptions, ...ctx.settings })
this.map.createMarker();
this.schema = providerSets[mapProvider]?.schema; this.schema = providerSets[mapProvider]?.schema;
} }
@ -156,93 +170,4 @@ TbMapWidgetV2 = class TbMapWidgetV2 implements MapWidgetInterface {
onDestroy() { 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,*/
} }

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

@ -1,6 +1,6 @@
import L from 'leaflet'; import L from 'leaflet';
export function createTooltip(target, dsIndex, settings, targetArgs?) { export function createTooltip(target, settings, targetArgs?) {
var popup = L.popup(); var popup = L.popup();
popup.setContent(''); popup.setContent('');
target.bindPopup(popup, { autoClose: settings.autocloseTooltip, closeOnClick: false }); target.bindPopup(popup, { autoClose: settings.autocloseTooltip, closeOnClick: false });
@ -17,6 +17,6 @@ export function createTooltip(target, dsIndex, settings, targetArgs?) {
markerArgs: targetArgs, markerArgs: targetArgs,
popup: popup, popup: popup,
locationSettings: settings, locationSettings: settings,
dsIndex: dsIndex dsIndex: settings.dsIndex
}; };
} }

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

@ -1,30 +1,34 @@
import L from 'leaflet'; import L from 'leaflet';
import { createTooltip } from './maps-utils'; import { createTooltip } from './maps-utils';
import { MarkerSettings } from './map-models';
import { Observable } from 'rxjs';
export class Marker { export class Marker {
leafletMarker: L.Marker; leafletMarker: L.Marker;
map: L.Map; // map: L.Map;
tooltipOffset; tooltipOffset;
tooltip; tooltip;
constructor(map: L.Map, location, dsIndex, settings, onClickListener, markerArgs, onDragendListener) { constructor(private map$: Observable<L.Map>, location: L.LatLngExpression, settings: MarkerSettings, onClickListener?, markerArgs?, onDragendListener?) {
this.map = map; //this.map = map;
this.leafletMarker = L.marker(location, { this.leafletMarker = L.marker(location, {
draggable: settings.drraggable draggable: settings.draggable
}); });
this.createMarkerIcon(this.leafletMarker, settings, (iconInfo) => { this.createMarkerIcon(this.leafletMarker, settings, (iconInfo) => {
this.leafletMarker.setIcon(iconInfo.icon); this.leafletMarker.setIcon(iconInfo.icon);
if (settings.showLabel) { if (settings.showLabel) {
this.tooltipOffset = [0, -iconInfo.size[1] + 10]; this.tooltipOffset = [0, -iconInfo.size[1] + 10];
this.updateMarkerLabel(settings) this.updateMarkerLabel(settings)
} }
this.leafletMarker.addTo(this.map); map$.subscribe(map =>
this.leafletMarker.addTo(map))
}); });
if (settings.displayTooltip) { if (settings.displayTooltip) {
this.tooltip = createTooltip(this.leafletMarker, dsIndex, settings, markerArgs); this.tooltip = createTooltip(this.leafletMarker, settings, markerArgs);
} }
if (onClickListener) { if (onClickListener) {
@ -120,7 +124,8 @@ export class Marker {
removeMarker() { removeMarker() {
this.map.removeLayer(this.leafletMarker); this.map$.subscribe(map =>
this.leafletMarker.addTo(map))
} }
extendBoundsWithMarker(bounds) { extendBoundsWithMarker(bounds) {

20
ui-ngx/src/app/modules/home/components/widget/lib/maps/providers/here-map.ts

@ -0,0 +1,20 @@
import L from 'leaflet';
import LeafletMap from '../leaflet-map';
import { MapOptions } from '../map-models';
export class HEREMap extends LeafletMap {
constructor($container, options: MapOptions) {
console.log("HEREMap -> constructor -> options", options)
const defaultCredentials =
{
app_id: "AhM6TzD9ThyK78CT3ptx",
app_code: "p6NPiITB3Vv0GMUFnkLOOg"
}
super($container, options);
const map = L.map($container).setView(options?.defaultCenterPosition, options?.defaultZoomLevel);
var tileLayer = (L.tileLayer as any).provider(options.mapProvider || "HERE.normalDay", options.credentials || defaultCredentials);
tileLayer.addTo(map);
super.setMap(map);
super.initSettings(options);
}
}

1
ui-ngx/src/app/modules/home/components/widget/lib/maps/providers/index.ts

@ -1,4 +1,5 @@
export * from './tencent-map'; export * from './tencent-map';
export * from './google-map'; export * from './google-map';
export * from './here-map';
export * from './image-map'; export * from './image-map';
export * from './openstreet-map'; export * from './openstreet-map';

Loading…
Cancel
Save