angualr6高德地图UI的使用

1.index.html:

 

<!--引入高德地图JSAPI -->
<script src="http://webapi.amap.com/maps?v=1.4.3&key=自己申请的key"></script>

<!--引入UI组件库(1.0版本) -->
<script src="//webapi.amap.com/ui/1.0/main.js"></script>

2.html:

 

<div id='container' ></div>

3.ts

 

import { Component, OnInit } from '@angular/core';
declare var AMap: any;
declare var AMapUI: any;
let map:any;
@Component({
  selector: 'map',
  templateUrl: './map.component.html',
  styleUrls: ['./map.component.css']
})
export class MapComponent implements OnInit {
  constructor() { }
  ngOnInit() {
    this.getMap ();
    this. maker();
  }
  // 基本地图使用
  getMap() {
   map =  new AMap.Map('container', {
     zoom: 4
   });
    // 地图控件
    AMap.plugin(['AMap.ToolBar'], function() {
      map.addControl(new AMap.ToolBar({
        map: map
      }));
    });
  }
  // 地图UI的使用
 maker(){
   AMapUI.loadUI(['overlay/SimpleMarker'], function(SimpleMarker) {

    let lngLats = getGridLngLats(map.getCenter(), 4, 4,0,0);

     new SimpleMarker({
       //普通文本
       iconLabel: 'A',

       map: map,
       position: lngLats[0]
     });

     new SimpleMarker({

       containerClassNames: 'my-marker',
       //普通文本
       iconLabel: 'BC',

       iconStyle: 'green',

       map: map,
       position: lngLats[1]
     });

     new SimpleMarker({

       //设置节点属性
       iconLabel: {
         //普通文本
         innerHTML: '热',
         //设置样式
         style: {
           color: '#fff',
           fontSize: '120%',
           marginTop: '2px'
         }
       },

       iconStyle: 'red',
       map: map,
       position: lngLats[2]
     });

     new SimpleMarker({
       iconLabel: {
         //html
         innerHTML: '<div class="my-blue-point"><img src="//webapi.amap.com/theme/v1.3/hotNew.png"/></div>',
       },
       iconStyle: 'black',
       map: map,
       position: lngLats[3]
     });
   });
   function getGridLngLats(center, colNum, size, cellX, cellY) {

     let pxCenter = map.lnglatToPixel(center);

     let rowNum = Math.ceil(size / colNum);

     let startX = pxCenter.getX(),
       startY = pxCenter.getY();

     cellX = cellX || 70;

     cellY = cellY || 70;


     let lngLats = [];

     for ( let r = 0; r < rowNum; r++) {

       for ( let c = 0; c < colNum; c++) {

         let x = startX + (c - (colNum - 1) / 2) * (cellX);

         let y = startY + (r - (rowNum - 1) / 2) * (cellY);

         lngLats.push(map.pixelToLngLat(new AMap.Pixel(x, y)));

         if (lngLats.length >= size) {
           break;
         }
       }
     }
     return lngLats;
   }
 }

}
效果图:

 

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 安装必要的依赖 使用 Angular 框架实现高德地图需要安装 @types/amap-js-api 和 @types/amap-js-sdk 两个依赖。 ```bash npm install @types/amap-js-api @types/amap-js-sdk --save-dev ``` 2. 配置 highCharts API Key 在 app.module.ts 中配置高德地图的 API Key: ```typescript import { AMapLoaderService, LoaderOptions } from '@delon/theme'; // ... const options: LoaderOptions = { key: '你的高德地图 API Key', }; // ... @NgModule({ imports: [ // ... ], declarations: [ // ... ], providers: [ // ... AMapLoaderService, { provide: 'DA_STORE_TOKEN', useValue: {}, }, { provide: 'HIGHCHARTS_MODULES', useFactory: () => [more, exporting], }, { provide: HIGHCHARTS_MODULES, useFactory: () => [highcharts], } ], }) export class AppModule {} ``` 3. 创建地图的 wrapper 服务类 我们需要创建一个 wrapper 类,封装高德地图的调用,以便在内部进行维护和扩展。 ```typescript import { Injectable } from '@angular/core'; @Injectable({ providedIn: 'root' }) export class MapService { private AMap: any; constructor() { this.loadMapScript(); } private loadMapScript() { const script = document.createElement('script'); script.type = 'text/javascript'; script.async = true; script.src = `https://webapi.amap.com/maps?v=1.4.15&key=${environment.amapApiKey}&callback=initAMap`; script.onerror = () => { console.error('Could not load map script!'); }; document.body.appendChild(script); } public getMapInstance() { return new Promise<any>((resolve, reject) => { if (this.AMap) { resolve(this.AMap); } else { const callbackName = `initAMap${Math.floor(Math.random() * 10000)}`; window[callbackName] = () => { this.AMap = window.AMap; resolve(this.AMap); delete window[callbackName]; }; const script = document.createElement('script'); script.type = 'text/javascript'; script.async = true; script.src = `https://webapi.amap.com/maps?v=1.4.15&key=${environment.amapApiKey}&callback=${callbackName}`; script.onerror = () => { console.error('Could not load map script!'); delete window[callbackName]; reject(); }; document.body.appendChild(script); } }); } } ``` 在上面的代码中,我们加载了高德地图 SDK 并在异步加载结束后返回 AMap 实例。 4. 在组件中使用地图查询服务 现在我们可以在组件中使用地图查询服务了。让我们创建一个 search.component.ts 文件实现这个服务。 ```typescript import { Component, OnInit } from '@angular/core'; import { MapService } from '../services/map.service'; @Component({ selector: 'app-search', templateUrl: './search.component.html', styleUrls: ['./search.component.scss'] }) export class SearchComponent implements OnInit { constructor(private mapService: MapService) {} ngOnInit() {} searchPlace(query: string) { this.mapService.getMapInstance().then(AMap => { const placeSearch = new AMap.PlaceSearch({ pageSize: 10, pageIndex: 1, city: '全国', map: new AMap.Map('map', { zoom: 15, resizeEnable: true, }), panel: 'panel' }); placeSearch.search(query, function (status: any, result: any) { // 处理查找结果 }); }); } } ``` 这里我们定义了一个 `searchPlace` 方法,用来查询地点。当我们调用 `searchPlace(query)` 的时候,它将使用 `MapService` 实例来获取 AMap 实例,然后使用 AMap 的 `PlaceSearch` 类查询地点。 5. 在 HTML 模板中添加搜索输入框和地图 最后,我们将在 HTML 模板中创建搜索输入框和地图。 ```html <div class="search-container"> <input type="text" [(ngModel)]="searchQuery" placeholder="请输入地点名称"> <button (click)="searchPlace(searchQuery)">搜索</button> </div> <div id="map" style="height: 400px;"></div> <div id="panel"></div> ``` 现在我们已经实现了一个简单的搜索地点页面,它可以通过高德地图查询地点并在地图上展示出来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值