| import { NzModalSubject } from 'ng-zorro-antd'; | 
| import { ReactiveFormsModule } from '@angular/forms'; | 
| import { ViewEncapsulation, Component,  ViewChild, ElementRef, NgZone, OnInit } from '@angular/core'; | 
| import { MapOptions, Point, MarkerOptions, ControlAnchor, NavigationControlOptions, NavigationControlType, BMapInstance } from 'angular2-baidu-map'; | 
| import { CoorPicker } from '@business/entity/data'; | 
| import { CoorPickerService } from 'app/routes/map/coordinates-picker/coordinates-picker.service'; | 
|   | 
|   | 
|   | 
| @Component({ | 
|   encapsulation: ViewEncapsulation.None, | 
|   selector: 'app-coordinates-picker', | 
|   templateUrl: './coordinates-picker.component.html', | 
|   styleUrls: [ './coordinates-picker.component.css' ], | 
| }) | 
| export class CoordinatesPickerComponent implements OnInit { | 
|     Default_LNG = 121; | 
|     Default_LAT = 31.4; | 
|     showZoom = 19; | 
|     isSaving = false; | 
|     markerOption: { | 
|       point: Point, | 
|       options: MarkerOptions | 
|     } = { | 
|       point: null, | 
|       options: null | 
|     }; | 
|     data: CoorPicker; | 
|     navigationOpts: NavigationControlOptions; | 
|     options: MapOptions; | 
|     _BMap: any = null; | 
|   | 
|   constructor(private subject: NzModalSubject, private coorPickerService: CoorPickerService) { | 
|     | 
|   } | 
|   ngOnInit(): void { | 
|     this.data = this.coorPickerService.data; | 
|     let lng = this.data.longitude; | 
|     lng = !lng ? this.Default_LNG : lng; | 
|     this.data.longitude = lng; | 
|     let lat = this.data.latitude; | 
|     lat = !lat ? this.Default_LAT : lat; | 
|     this.data.latitude = lat; | 
|     this.options = { | 
|         minZoom: 3, | 
|         maxZoom: 19, | 
|         cursor: 'default', | 
|         centerAndZoom: {  | 
|           lng: this.data.longitude,  | 
|           lat: this.data.latitude, | 
|           zoom: this.showZoom | 
|         }, | 
|         enableKeyboard: true | 
|       };   | 
|       this.navigationOpts = { | 
|         anchor: ControlAnchor.BMAP_ANCHOR_BOTTOM_RIGHT, | 
|         type: NavigationControlType.BMAP_NAVIGATION_CONTROL_LARGE | 
|       }; | 
|       this.markerOption.point = { | 
|         lng: lng, | 
|         lat: lat | 
|       }; | 
|       this.markerOption.options = { | 
|         icon: { | 
|           imageUrl: './assets/img/map_coordinates.png', | 
|           size: { | 
|             height: 30, | 
|             width: 30 | 
|           } | 
|         }, | 
|         offset: { | 
|            height: -30, | 
|            width: -15 | 
|         } | 
|        }; | 
|   } | 
|   private _marker: any = null; | 
|   loadMarker(marker) { | 
|     if (this._marker == null) { | 
|       this._marker = marker;       | 
|     } | 
|   } | 
|   private _map: any; | 
|   private _localSearch; | 
|   loadMap(map: any) {       | 
|       this._map = map; | 
|       this._BMap = window.BMap;   | 
|       this._map.addEventListener( | 
|         'tilesloaded', | 
|         (type, fn) => { | 
|           //  this._map.clearOverlays(); | 
|            this._map.addOverlay(this._marker);           | 
|         } | 
|       );  | 
|       this._localSearch = new  this._BMap.LocalSearch(map, { | 
|         renderOptions: {map: map} | 
|       }); | 
|       if (this.data.latitude === this.Default_LAT  | 
|           && this.data.longitude === this.Default_LNG | 
|           && !!this.data.address | 
|           && !!this.data.address.trim()) { | 
|           this.mapSearch(this.data.address); | 
|       } | 
|   } | 
|   city: string; | 
|   // queryText: string; | 
|    mapSearch(queryText: string, isSearch?: boolean) { | 
|    | 
|       if (!!queryText && !!queryText.trim()) { | 
|         this.city = !!this.city ? this.city : '北京市'; | 
|         const end = queryText.indexOf('市') + 1; | 
|         if (end > 0) { | 
|           let start = queryText.indexOf('省') + 1; | 
|           start = start > 0 ? start : queryText.indexOf('区') + 1; | 
|           start = start > end ? 0 : start; | 
|           if (start < end) { | 
|              this.city = queryText.slice(start, end).trim(); | 
|              if (!!this.city) { | 
|                 this._map.setCurrentCity(this.city);  | 
|              } | 
|           } | 
|         } | 
|         console.log(this.city); | 
|         const myGeo = new this._BMap.Geocoder(); | 
|         const that = this; | 
|         that._map.setCurrentCity(that.city); | 
|         myGeo.getPoint(queryText, function(point){ | 
|             let getPoint = false; | 
|             if (point) { | 
|               that.data.latitude = point.lat; | 
|               that.data.longitude = point.lng; | 
|               getPoint = true; | 
|             }else { | 
|                 console.log('您选择地址没有解析到结果!'); | 
|             } | 
|             that.markerOption.point = { | 
|               lng:  that.data.longitude, | 
|               lat:  that.data.latitude | 
|             }; | 
|             that.options.centerAndZoom = {  | 
|                 lng: that.data.longitude,  | 
|                 lat: that.data.latitude, | 
|                 zoom: that.showZoom | 
|             }; | 
|             // setTimeout(() => { | 
|             if (getPoint && !isSearch) { | 
|               that._map.centerAndZoom(point, that.showZoom); | 
|                | 
|             } else { | 
|               that._localSearch.search(queryText);               | 
|             } | 
|             // }, 3000); | 
|         }, that.city); | 
|       } | 
|   } | 
|   clickMap(e: any) { | 
|        this.markerOption.point = { | 
|          lng: e.point.lng, | 
|          lat: e.point.lat | 
|        }; | 
|        this.coorPickerService.data.longitude = e.point.lng; | 
|        this.coorPickerService.data.latitude = e.point.lat; | 
|   } | 
|   close() { | 
|       this.subject.destroy(); | 
|   } | 
|   save() { | 
|       this.isSaving = true; | 
|       this.subject.next(); | 
|       this.subject.destroy(); | 
|   } | 
| } |