diff --git a/src/app/data-collection/fire-force/fire-force.component.ts b/src/app/data-collection/fire-force/fire-force.component.ts index 9387947..5d34354 100644 --- a/src/app/data-collection/fire-force/fire-force.component.ts +++ b/src/app/data-collection/fire-force/fire-force.component.ts @@ -6,6 +6,7 @@ import { Component, OnInit } from '@angular/core'; import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar'; import { MatTreeFlatDataSource, MatTreeFlattener } from '@angular/material/tree'; +import { MapFactory } from '@src/modules/map/declare/factory'; import { Console } from 'console'; import { TreeService } from 'src/app/http-interceptors/tree.service'; import Viewer from 'viewerjs' @@ -94,38 +95,43 @@ export class FireForceComponent implements OnInit { this.map.plugin(["AMap.MarkerClusterer"],() => { var gridSize = 60 var count = markerArrcluster.length; - var _renderClusterMarker = function (context) { - var factor = Math.pow(context.count / count, 1 / 18); - var div = document.createElement('div'); - var Hue = 180 - factor * 180; - var bgColor = 'hsla(' + Hue + ',100%,40%,0.7)'; - var fontColor = 'hsla(' + Hue + ',100%,90%,1)'; - var borderColor = 'hsla(' + Hue + ',100%,40%,1)'; - var shadowColor = 'hsla(' + Hue + ',100%,90%,1)'; - div.style.backgroundColor = bgColor; - var size = Math.round(30 + Math.pow(context.count / count, 1 / 5) * 20); - div.style.width = div.style.height = size + 'px'; - div.style.border = 'solid 1px ' + borderColor; - div.style.borderRadius = size / 2 + 'px'; - div.style.boxShadow = '0 0 5px ' + shadowColor; - div.innerHTML = context.count; - div.style.lineHeight = size + 'px'; - div.style.color = fontColor; - div.style.fontSize = '14px'; - div.style.textAlign = 'center'; - context.marker.setOffset(new AMap.Pixel(-size / 2, -size / 2)); - context.marker.setContent(div) + + let render = MapFactory.RenderClusterMarkerInstance(); + render.contentRender = (contextCount) => { + var factor = Math.pow(contextCount / count, 1 / 18); + var div = document.createElement('div'); + var Hue = 180 - factor * 180; + var bgColor = 'hsla(' + Hue + ',100%,40%,0.7)'; + var fontColor = 'hsla(' + Hue + ',100%,90%,1)'; + var borderColor = 'hsla(' + Hue + ',100%,40%,1)'; + var shadowColor = 'hsla(' + Hue + ',100%,90%,1)'; + div.style.backgroundColor = bgColor; + var size = Math.round(30 + Math.pow(contextCount / count, 1 / 5) * 20); + div.style.width = div.style.height = size + 'px'; + div.style.border = 'solid 1px ' + borderColor; + div.style.borderRadius = size / 2 + 'px'; + div.style.boxShadow = '0 0 5px ' + shadowColor; + div.innerHTML = contextCount; + div.style.lineHeight = size + 'px'; + div.style.color = fontColor; + div.style.fontSize = '14px'; + div.style.textAlign = 'center'; + return div; + }; + render.pixelRender = (contextCount) => { + var size = Math.round(30 + Math.pow(contextCount / count, 1 / 5) * 20); + return MapFactory.PixelInstance(-size / 2, -size / 2); + }; + + render.contentNonRender = (src) => { + return ``; }; - var _renderMarker = (context)=>{ - var content = ``; - var offset = new AMap.Pixel(-15, -15); - context.marker.setContent(content) - context.marker.setOffset(offset) + render.pixelNonRender = () => { + return MapFactory.PixelInstance(-15, -15); } - this.cluster = new AMap.MarkerCluster(this.map, markerArrcluster, { + this.cluster = MapFactory.MarkerClusterInstance(this.map, markerArrcluster, { gridSize: gridSize, // 设置网格像素大小 - renderClusterMarker: _renderClusterMarker, // 自定义聚合点样式 - renderMarker: _renderMarker, // 自定义非聚合点样式 + render: render //自定义聚合点样式, 自定义非聚合点样式 }); this.cluster.on('click',(e)=>{ if(e.clusterData.length == 1){ diff --git a/src/app/data-collection/linkage-forces/linkage-forces.component.ts b/src/app/data-collection/linkage-forces/linkage-forces.component.ts index 5df61bb..4cd3e63 100644 --- a/src/app/data-collection/linkage-forces/linkage-forces.component.ts +++ b/src/app/data-collection/linkage-forces/linkage-forces.component.ts @@ -10,6 +10,7 @@ import { NzTreeNode } from 'ng-zorro-antd/tree'; import { TreeService } from 'src/app/http-interceptors/tree.service'; import Viewer from 'viewerjs' import Swiper from 'swiper'; +import { MapFactory } from '@src/modules/map/declare/factory'; declare var CryptoJS declare var AMap: any; @Component({ @@ -127,38 +128,44 @@ export class LinkageForcesComponent implements OnInit { this.map.plugin(["AMap.MarkerClusterer"],() => { var gridSize = 60 var count = markerArrcluster.length; - var _renderClusterMarker = function (context) { - var factor = Math.pow(context.count / count, 1 / 18); - var div = document.createElement('div'); - var Hue = 180 - factor * 180; - var bgColor = 'hsla(' + Hue + ',100%,40%,0.7)'; - var fontColor = 'hsla(' + Hue + ',100%,90%,1)'; - var borderColor = 'hsla(' + Hue + ',100%,40%,1)'; - var shadowColor = 'hsla(' + Hue + ',100%,90%,1)'; - div.style.backgroundColor = bgColor; - var size = Math.round(30 + Math.pow(context.count / count, 1 / 5) * 20); - div.style.width = div.style.height = size + 'px'; - div.style.border = 'solid 1px ' + borderColor; - div.style.borderRadius = size / 2 + 'px'; - div.style.boxShadow = '0 0 5px ' + shadowColor; - div.innerHTML = context.count; - div.style.lineHeight = size + 'px'; - div.style.color = fontColor; - div.style.fontSize = '14px'; - div.style.textAlign = 'center'; - context.marker.setOffset(new AMap.Pixel(-size / 2, -size / 2)); - context.marker.setContent(div) + + let render = MapFactory.RenderClusterMarkerInstance(); + render.contentRender = (contextCount) => { + var factor = Math.pow(contextCount / count, 1 / 18); + var div = document.createElement('div'); + var Hue = 180 - factor * 180; + var bgColor = 'hsla(' + Hue + ',100%,40%,0.7)'; + var fontColor = 'hsla(' + Hue + ',100%,90%,1)'; + var borderColor = 'hsla(' + Hue + ',100%,40%,1)'; + var shadowColor = 'hsla(' + Hue + ',100%,90%,1)'; + div.style.backgroundColor = bgColor; + var size = Math.round(30 + Math.pow(contextCount / count, 1 / 5) * 20); + div.style.width = div.style.height = size + 'px'; + div.style.border = 'solid 1px ' + borderColor; + div.style.borderRadius = size / 2 + 'px'; + div.style.boxShadow = '0 0 5px ' + shadowColor; + div.innerHTML = contextCount; + div.style.lineHeight = size + 'px'; + div.style.color = fontColor; + div.style.fontSize = '14px'; + div.style.textAlign = 'center'; + return div; }; - var _renderMarker = (context)=> { - var content = ``; - var offset = new AMap.Pixel(-15, -15); - context.marker.setContent(content) - context.marker.setOffset(offset) + render.pixelRender = (contextCount) => { + var size = Math.round(30 + Math.pow(contextCount / count, 1 / 5) * 20); + return MapFactory.PixelInstance(-size / 2, -size / 2); + }; + + render.contentNonRender = (src) => { + return ``; + }; + render.pixelNonRender = () => { + return MapFactory.PixelInstance(-15, -15); } - this.cluster = new AMap.MarkerCluster(this.map, markerArrcluster, { + + this.cluster = MapFactory.MarkerClusterInstance(this.map, markerArrcluster, { gridSize: gridSize, // 设置网格像素大小 - renderClusterMarker: _renderClusterMarker, // 自定义聚合点样式 - renderMarker: _renderMarker, // 自定义非聚合点样式 + render: render //自定义聚合点样式, 自定义非聚合点样式 }); this.cluster.on('click',(e)=>{ if(e.clusterData.length == 1){ diff --git a/src/app/data-collection/water-collection/water-collection.component.ts b/src/app/data-collection/water-collection/water-collection.component.ts index 56e12e2..40e2be9 100644 --- a/src/app/data-collection/water-collection/water-collection.component.ts +++ b/src/app/data-collection/water-collection/water-collection.component.ts @@ -4,6 +4,7 @@ import { ElementRef } from '@angular/core'; import { Component, OnInit } from '@angular/core'; import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar'; +import { MapFactory } from '@src/modules/map/declare/factory'; declare var AMap: any; @Component({ @@ -83,38 +84,43 @@ export class WaterCollectionComponent implements OnInit { this.map.plugin(["AMap.MarkerClusterer"],() => { var gridSize = 60 var count = markerArrcluster.length; - var _renderClusterMarker = function (context) { - var factor = Math.pow(context.count / count, 1 / 18); - var div = document.createElement('div'); - var Hue = 180 - factor * 180; - var bgColor = 'hsla(' + Hue + ',100%,40%,0.7)'; - var fontColor = 'hsla(' + Hue + ',100%,90%,1)'; - var borderColor = 'hsla(' + Hue + ',100%,40%,1)'; - var shadowColor = 'hsla(' + Hue + ',100%,90%,1)'; - div.style.backgroundColor = bgColor; - var size = Math.round(30 + Math.pow(context.count / count, 1 / 5) * 20); - div.style.width = div.style.height = size + 'px'; - div.style.border = 'solid 1px ' + borderColor; - div.style.borderRadius = size / 2 + 'px'; - div.style.boxShadow = '0 0 5px ' + shadowColor; - div.innerHTML = context.count; - div.style.lineHeight = size + 'px'; - div.style.color = fontColor; - div.style.fontSize = '14px'; - div.style.textAlign = 'center'; - context.marker.setOffset(new AMap.Pixel(-size / 2, -size / 2)); - context.marker.setContent(div) + + let render = MapFactory.RenderClusterMarkerInstance(); + render.contentRender = (contextCount) => { + var factor = Math.pow(contextCount / count, 1 / 18); + var div = document.createElement('div'); + var Hue = 180 - factor * 180; + var bgColor = 'hsla(' + Hue + ',100%,40%,0.7)'; + var fontColor = 'hsla(' + Hue + ',100%,90%,1)'; + var borderColor = 'hsla(' + Hue + ',100%,40%,1)'; + var shadowColor = 'hsla(' + Hue + ',100%,90%,1)'; + div.style.backgroundColor = bgColor; + var size = Math.round(30 + Math.pow(contextCount / count, 1 / 5) * 20); + div.style.width = div.style.height = size + 'px'; + div.style.border = 'solid 1px ' + borderColor; + div.style.borderRadius = size / 2 + 'px'; + div.style.boxShadow = '0 0 5px ' + shadowColor; + div.innerHTML = contextCount; + div.style.lineHeight = size + 'px'; + div.style.color = fontColor; + div.style.fontSize = '14px'; + div.style.textAlign = 'center'; + return div; + }; + render.pixelRender = (contextCount) => { + var size = Math.round(30 + Math.pow(contextCount / count, 1 / 5) * 20); + return MapFactory.PixelInstance(-size / 2, -size / 2); + }; + + render.contentNonRender = (src) => { + return ``; }; - var _renderMarker = (context)=> { - var content = ``; - context.marker.setContent(content) - var offset = new AMap.Pixel(-15, -15); - context.marker.setOffset(offset) + render.pixelNonRender = () => { + return MapFactory.PixelInstance(-15, -15); } - this.cluster = new AMap.MarkerCluster(this.map, markerArrcluster, { + this.cluster = MapFactory.MarkerClusterInstance(this.map, markerArrcluster, { gridSize: gridSize, // 设置网格像素大小 - renderClusterMarker: _renderClusterMarker, // 自定义聚合点样式 - renderMarker: _renderMarker, // 自定义非聚合点样式 + render: render //自定义聚合点样式, 自定义非聚合点样式 }); this.cluster.on('click',(e)=>{ if(e.clusterData.length == 1){ diff --git a/src/app/gis-management/gis-labeling/gis-labeling.component.ts b/src/app/gis-management/gis-labeling/gis-labeling.component.ts index 2d2dfd1..3063cda 100644 --- a/src/app/gis-management/gis-labeling/gis-labeling.component.ts +++ b/src/app/gis-management/gis-labeling/gis-labeling.component.ts @@ -368,8 +368,10 @@ export class GisLabelingComponent implements OnInit { this.map.plugin(["AMap.MarkerClusterer"], () => { var gridSize = 60 var count = unitMarkerArrcluster.length; - var _renderClusterMarker = function (context) { - var factor = Math.pow(context.count / count, 1 / 18); + + let render = MapFactory.RenderClusterMarkerInstance(); + render.contentRender = (contextCount) => { + var factor = Math.pow(contextCount / count, 1 / 18); var div = document.createElement('div'); var Hue = 180 - factor * 180; var bgColor = 'hsla(' + Hue + ',100%,40%,0.7)'; @@ -377,29 +379,32 @@ export class GisLabelingComponent implements OnInit { var borderColor = 'hsla(' + Hue + ',100%,40%,1)'; var shadowColor = 'hsla(' + Hue + ',100%,90%,1)'; div.style.backgroundColor = bgColor; - var size = Math.round(30 + Math.pow(context.count / count, 1 / 5) * 20); + var size = Math.round(30 + Math.pow(contextCount / count, 1 / 5) * 20); div.style.width = div.style.height = size + 'px'; div.style.border = 'solid 1px ' + borderColor; div.style.borderRadius = size / 2 + 'px'; div.style.boxShadow = '0 0 5px ' + shadowColor; - div.innerHTML = context.count; + div.innerHTML = contextCount; div.style.lineHeight = size + 'px'; div.style.color = fontColor; div.style.fontSize = '14px'; div.style.textAlign = 'center'; - context.marker.setOffset(MapFactory.PixelInstance(-size / 2, -size / 2)); - context.marker.setContent(div) + return div; + }; + render.pixelRender = (contextCount) => { + var size = Math.round(30 + Math.pow(contextCount / count, 1 / 5) * 20); + return MapFactory.PixelInstance(-size / 2, -size / 2); + }; + + render.contentNonRender = (src) => { + return ``; }; - var _renderMarker = (context) => { - var content = ``; - var offset = MapFactory.PixelInstance(-15, -15); - context.marker.setContent(content) - context.marker.setOffset(offset) + render.pixelNonRender = () => { + return MapFactory.PixelInstance(-15, -15); } - this.unitCluster = new AMap.MarkerCluster(this.map, unitMarkerArrcluster, { + this.unitCluster = MapFactory.MarkerClusterInstance(this.map, unitMarkerArrcluster, { gridSize: gridSize, // 设置网格像素大小 - renderClusterMarker: _renderClusterMarker, // 自定义聚合点样式 - renderMarker: _renderMarker, // 自定义非聚合点样式 + render: render //自定义聚合点样式, 自定义非聚合点样式 }); this.unitCluster.on('click', (e) => { if (e.clusterData.length == 1) { @@ -440,7 +445,7 @@ export class GisLabelingComponent implements OnInit { ` // 创建一个自定义内容的 infowindow 实例 - this.infoWindow = new AMap.InfoWindow({ + this.infoWindow = MapFactory.InfoWindowInstance({ position: [item.location.x, item.location.y], offset: MapFactory.PixelInstance(0, -30), content: markerContent, @@ -539,8 +544,10 @@ export class GisLabelingComponent implements OnInit { this.map.plugin(["AMap.MarkerClusterer"], () => { var gridSize = 60 var count = fireForceMarkerArrcluster.length; - var _renderClusterMarker = function (context) { - var factor = Math.pow(context.count / count, 1 / 18); + + let render = MapFactory.RenderClusterMarkerInstance(); + render.contentRender = (contextCount) => { + var factor = Math.pow(contextCount / count, 1 / 18); var div = document.createElement('div'); var Hue = 180 - factor * 180; var bgColor = 'hsla(' + Hue + ',100%,40%,0.7)'; @@ -548,29 +555,32 @@ export class GisLabelingComponent implements OnInit { var borderColor = 'hsla(' + Hue + ',100%,40%,1)'; var shadowColor = 'hsla(' + Hue + ',100%,90%,1)'; div.style.backgroundColor = bgColor; - var size = Math.round(30 + Math.pow(context.count / count, 1 / 5) * 20); + var size = Math.round(30 + Math.pow(contextCount / count, 1 / 5) * 20); div.style.width = div.style.height = size + 'px'; div.style.border = 'solid 1px ' + borderColor; div.style.borderRadius = size / 2 + 'px'; div.style.boxShadow = '0 0 5px ' + shadowColor; - div.innerHTML = context.count; + div.innerHTML = contextCount; div.style.lineHeight = size + 'px'; div.style.color = fontColor; div.style.fontSize = '14px'; div.style.textAlign = 'center'; - context.marker.setOffset(MapFactory.PixelInstance(-size / 2, -size / 2)); - context.marker.setContent(div) + return div; + }; + render.pixelRender = (contextCount) => { + var size = Math.round(30 + Math.pow(contextCount / count, 1 / 5) * 20); + return MapFactory.PixelInstance(-size / 2, -size / 2); + }; + + render.contentNonRender = (src) => { + return ``; }; - var _renderMarker = (context) => { - var content = ``; - var offset = MapFactory.PixelInstance(-15, -15); - context.marker.setContent(content) - context.marker.setOffset(offset) + render.pixelNonRender = () => { + return MapFactory.PixelInstance(-15, -15); } - this.fireForceCluster = new AMap.MarkerCluster(this.map, fireForceMarkerArrcluster, { + this.fireForceCluster = MapFactory.MarkerClusterInstance(this.map, fireForceMarkerArrcluster, { gridSize: gridSize, // 设置网格像素大小 - renderClusterMarker: _renderClusterMarker, // 自定义聚合点样式 - renderMarker: _renderMarker, // 自定义非聚合点样式 + render: render //自定义聚合点样式, 自定义非聚合点样式 }); }); } @@ -682,8 +692,10 @@ export class GisLabelingComponent implements OnInit { this.map.plugin(["AMap.MarkerClusterer"], () => { var gridSize = 60 var count = linkageForcesMarkerArrcluster.length; - var _renderClusterMarker = function (context) { - var factor = Math.pow(context.count / count, 1 / 18); + + let render = MapFactory.RenderClusterMarkerInstance(); + render.contentRender = (contextCount) => { + var factor = Math.pow(contextCount / count, 1 / 18); var div = document.createElement('div'); var Hue = 180 - factor * 180; var bgColor = 'hsla(' + Hue + ',100%,40%,0.7)'; @@ -691,29 +703,33 @@ export class GisLabelingComponent implements OnInit { var borderColor = 'hsla(' + Hue + ',100%,40%,1)'; var shadowColor = 'hsla(' + Hue + ',100%,90%,1)'; div.style.backgroundColor = bgColor; - var size = Math.round(30 + Math.pow(context.count / count, 1 / 5) * 20); + var size = Math.round(30 + Math.pow(contextCount / count, 1 / 5) * 20); div.style.width = div.style.height = size + 'px'; div.style.border = 'solid 1px ' + borderColor; div.style.borderRadius = size / 2 + 'px'; div.style.boxShadow = '0 0 5px ' + shadowColor; - div.innerHTML = context.count; + div.innerHTML = contextCount; div.style.lineHeight = size + 'px'; div.style.color = fontColor; div.style.fontSize = '14px'; div.style.textAlign = 'center'; - context.marker.setOffset(MapFactory.PixelInstance(-size / 2, -size / 2)); - context.marker.setContent(div) + return div; }; - var _renderMarker = (context) => { - var content = ``; - var offset = MapFactory.PixelInstance(-15, -15); - context.marker.setContent(content) - context.marker.setOffset(offset) + render.pixelRender = (contextCount) => { + var size = Math.round(30 + Math.pow(contextCount / count, 1 / 5) * 20); + return MapFactory.PixelInstance(-size / 2, -size / 2); + }; + + render.contentNonRender = (src) => { + return ``; + }; + render.pixelNonRender = () => { + return MapFactory.PixelInstance(-15, -15); } - this.linkageForcesCluster = new AMap.MarkerCluster(this.map, linkageForcesMarkerArrcluster, { + + this.linkageForcesCluster = MapFactory.MarkerClusterInstance(this.map, linkageForcesMarkerArrcluster, { gridSize: gridSize, // 设置网格像素大小 - renderClusterMarker: _renderClusterMarker, // 自定义聚合点样式 - renderMarker: _renderMarker, // 自定义非聚合点样式 + render: render //自定义聚合点样式, 自定义非聚合点样式 }); }); } @@ -850,8 +866,8 @@ export class GisLabelingComponent implements OnInit { return MapFactory.PixelInstance(-size / 2, -size / 2); }; - render.contentNonRender = () => { - return ``; + render.contentNonRender = (src) => { + return ``; }; render.pixelNonRender = () => { return MapFactory.PixelInstance(-15, -15); @@ -1013,16 +1029,13 @@ export class GisLabelingComponent implements OnInit { } else { this.unitCluster ? this.unitCluster.setData([]) : null this.mapPattern = false - this.map = new AMap.Map('map', { + this.map = MapFactory.MapInstance('map', { viewMode: '3D', pitch: 60, rotation: -35, features: ['bg', 'road', 'point', 'building'], mapStyle: 'amap://styles/light', }); - - - this.map.setCity('上海市'); } this.satelliteModel = false @@ -1042,7 +1055,7 @@ export class GisLabelingComponent implements OnInit { that.map = MapFactory.MapInstance('map', { layers: [layer] }); that.map.setCity('上海市'); AMap.plugin(["AMap.RangingTool", "AMap.MouseTool"], function () { - that.mouseTool = new AMap.MouseTool(that.map); + that.mouseTool = new AMap.MouseTool(that.map.self); }); } @@ -1179,7 +1192,7 @@ export class GisLabelingComponent implements OnInit { this.markers.forEach((element, index) => { this.map.remove(element); }); //先删除所有标点 this.markers = [] - let marker = new AMap.Marker({ + let marker = MapFactory.MarkerInstance({ map: this.map, position: [e.location.x, e.location.y], // 基点位置, }); @@ -1220,7 +1233,7 @@ export class GisLabelingComponent implements OnInit { ` // 创建一个自定义内容的 infowindow 实例 - this.infoWindow = new AMap.InfoWindow({ + this.infoWindow = MapFactory.InfoWindowInstance({ position: [e.location.x, e.location.y], offset: MapFactory.PixelInstance(0, -30), content: markerContent, @@ -1233,7 +1246,7 @@ export class GisLabelingComponent implements OnInit { this.renderer2.listen(this.elementRef.nativeElement.querySelector('#seePlan'), 'click', (event) => { this.seePlan(e) })//查看预案点击事件 this.renderer2.listen(this.elementRef.nativeElement.querySelector('#share'), 'click', (event) => { this.share(e) })//分享点击事件 marker.on('click', (ev) => { //marker点击事件 - this.infoWindow = new AMap.InfoWindow({ + this.infoWindow = MapFactory.InfoWindowInstance({ position: [e.location.x, e.location.y], offset: MapFactory.PixelInstance(0, -30), content: markerContent, diff --git a/src/app/key-unit/water-road/water-road.component.ts b/src/app/key-unit/water-road/water-road.component.ts index c20f9fd..5984808 100644 --- a/src/app/key-unit/water-road/water-road.component.ts +++ b/src/app/key-unit/water-road/water-road.component.ts @@ -4,6 +4,7 @@ import { FormBuilder, FormControl, FormGroup } from '@angular/forms'; import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar'; import { ActivatedRoute } from '@angular/router'; +import { MapFactory } from '@src/modules/map/declare/factory'; declare var AMap: any; @Component({ @@ -224,38 +225,43 @@ export class WaterRoadComponent implements OnInit { this.map.plugin(["AMap.MarkerClusterer"],() => { var gridSize = 60 var count = waterMarkerArrcluster.length; - var _renderClusterMarker = function (context) { - var factor = Math.pow(context.count / count, 1 / 18); - var div = document.createElement('div'); - var Hue = 180 - factor * 180; - var bgColor = 'hsla(' + Hue + ',100%,40%,0.7)'; - var fontColor = 'hsla(' + Hue + ',100%,90%,1)'; - var borderColor = 'hsla(' + Hue + ',100%,40%,1)'; - var shadowColor = 'hsla(' + Hue + ',100%,90%,1)'; - div.style.backgroundColor = bgColor; - var size = Math.round(30 + Math.pow(context.count / count, 1 / 5) * 20); - div.style.width = div.style.height = size + 'px'; - div.style.border = 'solid 1px ' + borderColor; - div.style.borderRadius = size / 2 + 'px'; - div.style.boxShadow = '0 0 5px ' + shadowColor; - div.innerHTML = context.count; - div.style.lineHeight = size + 'px'; - div.style.color = fontColor; - div.style.fontSize = '14px'; - div.style.textAlign = 'center'; - context.marker.setOffset(new AMap.Pixel(-size / 2, -size / 2)); - context.marker.setContent(div) + + let render = MapFactory.RenderClusterMarkerInstance(); + render.contentRender = (contextCount) => { + var factor = Math.pow(contextCount / count, 1 / 18); + var div = document.createElement('div'); + var Hue = 180 - factor * 180; + var bgColor = 'hsla(' + Hue + ',100%,40%,0.7)'; + var fontColor = 'hsla(' + Hue + ',100%,90%,1)'; + var borderColor = 'hsla(' + Hue + ',100%,40%,1)'; + var shadowColor = 'hsla(' + Hue + ',100%,90%,1)'; + div.style.backgroundColor = bgColor; + var size = Math.round(30 + Math.pow(contextCount / count, 1 / 5) * 20); + div.style.width = div.style.height = size + 'px'; + div.style.border = 'solid 1px ' + borderColor; + div.style.borderRadius = size / 2 + 'px'; + div.style.boxShadow = '0 0 5px ' + shadowColor; + div.innerHTML = contextCount; + div.style.lineHeight = size + 'px'; + div.style.color = fontColor; + div.style.fontSize = '14px'; + div.style.textAlign = 'center'; + return div; + }; + render.pixelRender = (contextCount) => { + var size = Math.round(30 + Math.pow(contextCount / count, 1 / 5) * 20); + return MapFactory.PixelInstance(-size / 2, -size / 2); + }; + + render.contentNonRender = (src) => { + return ``; }; - var _renderMarker = (context)=> { - var content = ``; - var offset = new AMap.Pixel(-12.5, -12.5); - context.marker.setContent(content) - context.marker.setOffset(offset) + render.pixelNonRender = () => { + return MapFactory.PixelInstance(-15, -15); } - this.waterCluster = new AMap.MarkerCluster(this.map, waterMarkerArrcluster, { + this.waterCluster = MapFactory.MarkerClusterInstance(this.map, waterMarkerArrcluster, { gridSize: gridSize, // 设置网格像素大小 - renderClusterMarker: _renderClusterMarker, // 自定义聚合点样式 - renderMarker: _renderMarker, // 自定义非聚合点样式 + render: render //自定义聚合点样式, 自定义非聚合点样式 }); this.waterCluster.on('click',(e)=>{ if(e.clusterData.length == 1){ diff --git a/src/modules/map/declare/factory.ts b/src/modules/map/declare/factory.ts index ff6e8f3..2b139aa 100644 --- a/src/modules/map/declare/factory.ts +++ b/src/modules/map/declare/factory.ts @@ -1,7 +1,7 @@ const mapSupplier: number = 1; //1:高德 -import { IMap, IMapOptions, IMarker, IPixel, IMarkOptions, ILngLat, ILayer, ICircle, IMarkerCluster, IRenderClusterMarker } from './map' -import { GaodeCircle, GaodeLayer, GaoDeLngLat, GaoDeMap, GaoDeMarker, GaoDeMarkerCluster, GaoDePixel, GaoDeRenderClusterMarker } from './gaode-map' +import { IMap, IMapOptions, IMarker, IPixel, IMarkOptions, ILngLat, ILayer, ICircle, IMarkerCluster, IRenderClusterMarker, InfoWindow } from './map' +import { GaodeCircle, GaodeInfoWindow, GaodeLayer, GaoDeLngLat, GaoDeMap, GaoDeMarker, GaoDeMarkerCluster, GaoDePixel, GaoDeRenderClusterMarker } from './gaode-map' import { KeDaLngLat, KeDaMap, KeDaMarker, KeDaPixel } from './keda-map'; import MapTools from './map-tools'; @@ -52,6 +52,13 @@ export class MapFactory { } } + public static InfoWindowInstance(options: any): InfoWindow { + switch (mapSupplier) { + case 1: return new GaodeInfoWindow(options); + default: return null; + } + } + public static CircleInstance(options: any): ICircle { switch (mapSupplier) { case 1: return new GaodeCircle(options); diff --git a/src/modules/map/declare/gaode-map.ts b/src/modules/map/declare/gaode-map.ts index f962187..9656063 100644 --- a/src/modules/map/declare/gaode-map.ts +++ b/src/modules/map/declare/gaode-map.ts @@ -1,4 +1,4 @@ -import { HtmlRender, ICircle, ILayer, ILngLat, IMap, IMapOptions, IMarker, IMarkerCluster, IMarkOptions, IPixel, IRenderClusterMarker, ISelf, PixelRender } from './map' +import { HtmlRender, ICircle, ILayer, ILngLat, IMap, IMapOptions, IMarker, IMarkerCluster, IMarkOptions, InfoWindow, IPixel, IRenderClusterMarker, ISelf, PixelRender } from './map' import MapTools from './map-tools'; declare var AMap: any; @@ -28,7 +28,7 @@ export class GaoDeMap extends GaodeBasic implements IMap { return this.self.add(obj.self) } remove(obj: any) { - return this.self.remove(obj) + return this.self.remove(obj.self) } setCity(city: string) { return this.self.setCity(city) @@ -62,7 +62,9 @@ export class GaoDeMarker extends GaodeBasic implements IMarker { super(); let conf = MapTools.InstanceConvert(options); this.self = new AMap.Marker(conf); + this._position = this.self._position; } + _position: number[] setMap() { this.self.setMap(null) } @@ -83,6 +85,12 @@ export class GaoDeMarkerCluster extends GaodeBasic implements IMarkerCluster { let conf = MapTools.InstanceConvert(options); this.self = new AMap.MarkerCluster(map.self, list, conf) } + on(eventName: string, callback: Function): void { + this.self.on(eventName, callback); + } + setData(list:any[]) { + this.self.setData(list) + } } export class GaoDeLngLat extends GaodeBasic implements ILngLat { @@ -102,13 +110,27 @@ export class GaodeLayer extends GaodeBasic implements ILayer { } } -export class GaodeCircle extends GaodeBasic implements ICircle { +export class GaodeInfoWindow extends GaodeBasic implements InfoWindow { constructor(options: any) { + super(); + options.offset = options.offset.self + this.self = new AMap.InfoWindow(options); + } + open(map: IMap) { + return this.self.open(map.self) + } + listen(html: any, event: string, callback: Function) { + return this.self.listen(html,event,callback) + } +} + +export class GaodeCircle extends GaodeBasic implements ICircle { + constructor(options: Object) { super(); this.self = new AMap.Circle(options); } - setMap(map: any) { - return this.self.setMap(map) + setMap(map: IMap) { + return this.self.setMap(map.self) } setCenter(pos: number[]) { return this.self.setCenter(pos) @@ -134,7 +156,7 @@ export class GaoDeRenderClusterMarker implements IRenderClusterMarker, ISelf { context.marker.setOffset(this.pixelRender(context.count).self); }, renderMarker: (context) => { - context.marker.setContent(this.contentNonRender()); + context.marker.setContent(this.contentNonRender(this.getFirstImages(context))); context.marker.setOffset(this.pixelNonRender(context.count).self); } }; diff --git a/src/modules/map/declare/keda-map.ts b/src/modules/map/declare/keda-map.ts index fa7eeab..451bc96 100644 --- a/src/modules/map/declare/keda-map.ts +++ b/src/modules/map/declare/keda-map.ts @@ -72,6 +72,7 @@ export class KeDaMarker implements IMarker { }; this.self = d; } + _position: number[]; setMap() { throw new Error('Method not implemented.'); } diff --git a/src/modules/map/declare/map-tools.ts b/src/modules/map/declare/map-tools.ts index b0068a3..56629a0 100644 --- a/src/modules/map/declare/map-tools.ts +++ b/src/modules/map/declare/map-tools.ts @@ -6,6 +6,7 @@ export default class MapTools { } let obj = Object.assign({}, data); let convert = (obj: any, data: string) => { + if(!obj[data])return; if (obj[data].discriminator === "ISelf") { obj[data] = obj[data].self; } else if (obj[data].discriminator === "ISelfCombine") { @@ -13,19 +14,26 @@ export default class MapTools { } } - let process = (obj: any) => { + let process = (obj: any,deep:number=0) => { + try{ + deep++; + if(deep>=4)return; if (obj == undefined) return; if (!(obj instanceof Object)) return; for (var name in obj) { if (obj[name] instanceof Array) { for (var j in obj[name]) { - process(j); + process(j,deep); } continue; } convert(obj, name); - process(obj[name]); + process(obj[name],deep); } + }catch(e){ + console.log(e); + debugger + } } process(obj); return obj; diff --git a/src/modules/map/declare/map.d.ts b/src/modules/map/declare/map.d.ts index a2f6ee7..60900be 100644 --- a/src/modules/map/declare/map.d.ts +++ b/src/modules/map/declare/map.d.ts @@ -25,6 +25,7 @@ export interface IMapOptions { export interface IMarker extends ISelf { id: string; + _position:number[]; on(eventName: string, callback: Function); setMap(); } @@ -43,11 +44,11 @@ export interface IRenderClusterMarker { pixelNonRender: PixelRender; } - export class IMarkOptions { - position?: ILngLat; + position?: ILngLat | number[]; content?: string; offset?: IPixel; + map?: IMap; } export interface IPixel extends ISelf { @@ -62,6 +63,11 @@ export interface ILayer extends ISelf { } +export interface InfoWindow extends ISelf { + open(map:IMap); + listen(html:any, event:string, callback: Function) +} + export interface ICircle extends ISelf { setRadius(num: number); setCenter(pos: number[])