最近公司想要在国外也使用地图功能,而我们国内使用的是高德地图,国外客户需要用谷歌地图,所以去了解了一下谷歌地图的使用,这里记录一下。

准备工作

首先你得有一个谷歌账号,然后得用一点小魔法,去谷歌地图官网申请一个API密钥,现在好像还需要绑定信用卡,有点麻烦,我就直接白嫖公司的了。

开始使用

加载Maps JavaScript API

  • 内嵌方式加载
<script asyncsrc="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap">
</script>
  • 动态加载

使用npm安装

npm install @googlemaps/js-api-loader

导入到具体的页面

import { Loader } from "@googlemaps/js-api-loader"

创建地图

        <div style="height: 400px" id="GMap"></div>
   initMap() {const loader = new Loader({apiKey: "YOURKEY",version: "YOURVERSION",});loader.load().then(() => {this.myMap = new google.maps.Map(document.getElementById("GMap"), {// 纬度在前,经度在后center: { lat: -34.397, lng: 150.644 },zoom: 8,});});},

这就完成了一个简单的地图创建。

然而,这种简单的地图是肯定不符合我们的需求,所以我们需要再加亿点细节。

首先,在初始化地图时,加上一些限制。

    const loader = new Loader({apiKey: "AIzaSyC7b2_5RxBtvTjnFPmLrzOa_nmXFdALQU8",version: "3.34",});loader.load().then(() => {this.myMap = new google.maps.Map(document.getElementById("BMap-125"), {center:  { lat: -34.397, lng: 150.644 },//缩放范围zoom: 6,minZoom: 2,maxZoom: 16,//限制拖拽范围,防止出现除地图外的灰色区域restriction: {latLngBounds: {north: 85,south: -85,east: 180,west: -180,},},//禁用键盘控制keyboardShortcuts:false,//关闭地图类型选择控件mapTypeControl:false});});

地图限制

  • 限制缩放等级:maxZoom和minZoom分别对应最大的缩放级别和最小的缩放级别,加上对应的限制,防止地图过大或过小。(补充:缩放等级对应的地图详细。1:世界,5:大陆/洲,10:城市,15:街道,20:建筑物)。
  • 限制地图边界:加上restriction,可以限制地图可以拖拽的范围,防止拖拽地图范围过大,出现灰色区域。
  • 地图控件:可以根据自己的需求,留下哪些地图控件,还可以自定义控件。

标记

为地图添加普通标记:

initMap() {// 坐标const uluru = { lat: -25.344, lng: 131.031 };// 创建地图const map = new google.maps.Map(document.getElementById("map"), {zoom: 4,center: uluru,});// 创建标记const marker = new google.maps.Marker({position: uluru,map: map,});//或者是const marker = new google.maps.Marker({position: uluru,});marker.setMap(map);
}

创建自定义标点

    googlePositionHandle(){//地点let latLng = new google.maps.LatLng(-25.344,131.031 )// 创建地图const map = new google.maps.Map(document.getElementById("map"), {zoom: 4,center: latLng,});//设置Marker自定义图标的属性,size是图标尺寸,该尺寸为显示图标的实际尺寸,origin是切图坐标,该坐标是相对于图片左上角默认为(0,0)的相对像素坐标,anchor是锚点坐标,描述经纬度点对应图标中的位置var anchor = new google.maps.Point(0, 40)var size = new google.maps.Size(32, 32)var origin = new google.maps.Point(0, 0)var url=require('@/assets/img/p1.png')//创建图标var icon = new google.maps.MarkerImage(url,size,origin,anchor,);//设置自定义标记图标let marker=new google.maps.Marker({position: latLng,map: map,visible: true});marker.setIcon(icon)//标记添加点击事件,点击标记将地图中心设为标记点,放大地图marker.addListener('click', function() {map.setCenter(latLng)map.setZoom(16)});},

这是用png图片作为自定义图标,还可以使用svg图片作为图标,但是svg作为图标我暂时没搞懂,尤其是复杂的svg图片,所以就不写svg图片作为例子了。

创建信息窗口

  // 坐标const uluru = { lat: -25.344, lng: 131.031 };// 创建地图const map = new google.maps.Map(document.getElementById("map"), {zoom: 4,center: uluru,});//标记上方的信息框var div='<div style="text-align: center">'+'<div>'+alias+'</div>'+'</div>'let infoWindow = new google.maps.InfoWindow({content: div,});// 创建标记const marker = new google.maps.Marker({position: uluru,map: map,});//打开信息框infoWindow.open({anchor: marker,map:map,});
}

信息窗口是展示在标记的上方。

获取点击处的位置

       const myMap = new google.maps.Map(document.getElementById("GMap"), {center: {lat: -34.397, lng: 150.644},zoom: 8,});google.maps.event.addListener(myMap, 'click', function (event) {const pos = {lat: event.latLng.lat(),lng: event.latLng.lng()};console.log(pos)});

打印的位置信息,就是鼠标点击的位置的经纬度。

创建自定义控件
谷歌默认是没有获取当前按钮的控件,如果我们有这种需求,我们可以自己自定义一个控件。

 //添加定位按钮,map为地图实例addYourLocationButton(map) {var controlDiv = document.createElement('div');var firstChild = document.createElement('button');firstChild.style.backgroundColor = '#fff';firstChild.style.border = 'none';firstChild.style.outline = 'none';firstChild.style.width = '40px';firstChild.style.height = '40px';firstChild.style.borderRadius = '2px';firstChild.style.boxShadow = '0 1px 4px rgba(0,0,0,0.3)';firstChild.style.cursor = 'pointer';firstChild.style.marginRight = '10px';firstChild.style.padding = '0px';firstChild.title = 'Your Location';controlDiv.appendChild(firstChild);var secondChild = document.createElement('div');secondChild.style.margin = '5px';secondChild.style.width = '18px';secondChild.style.height = '18px';secondChild.style.backgroundImage = 'url(https://maps.gstatic.com/tactile/mylocation/mylocation-sprite-1x.png)';secondChild.style.backgroundSize = '180px 18px';secondChild.style.backgroundPosition = '0px 0px';secondChild.style.backgroundRepeat = 'no-repeat';secondChild.style.margin='auto'secondChild.id = 'location_img';firstChild.appendChild(secondChild);firstChild.addEventListener('click', function() {if(navigator.geolocation) {navigator.geolocation.getCurrentPosition(function(position) {const latlng = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);map.setCenter(latlng);map.setZoom(15)var myMarker = new google.maps.Marker({animation: google.maps.Animation.DROP,position: latlng});myMarker.setMap(map)});}});controlDiv.index = 1;map.controls[google.maps.ControlPosition.RIGHT_BOTTOM].push(controlDiv);}

这样调用这个方法后,地图上就有了获取当前位置的图标了。

在Echarts中使用谷歌地图
Echarts中默认使用的是百度地图,如果想要使用谷歌地图,需要额外安装插件——echarts-extension-gmap,在github上可以找到。
安装

npm install echarts-extension-gmap --save

使用

import * as echarts from 'echarts';
import 'echarts-extension-gmap';
     this.mapEChart=this.$echarts.init(document.getElementById('gmap'))var googleOption = {// load gmap componentgmap: {center: [108.39, 39.9],// center: { lng: 108.39, lat: 39.9 },zoom: 4,disableDefaultUI:true,renderOnMoving: true,// the zIndex of echarts layer for Google Map. `2000` by default.echartsLayerZIndex: 2019,// whether to enable gesture handling. `true` by default.// since v1.4.0roam: true,minZoom: 2,maxZoom: 16,//限制拖拽范围,防止出现除地图外的灰色区域restriction: {latLngBounds: {north: 85,south: -85,east: 180,west: -180,},}},series: [{type: 'scatter',coordinateSystem: 'gmap',data: this.mapPoints,//地图上的点encode: {value: 2},label: {formatter: "{b}",position: "right",show: false},emphasis: {label: {show: true}}},{type: 'effectScatter',color:'#3ba308',coordinateSystem: 'gmap',data: data,label: {formatter: "{b}",position: "right",show: true},emphasis: {label: {show: true}}}]};this.mapEChart.setOption(googleOption)//获取地图var gmap = this.mapEChart.getModel().getComponent('gmap').getGoogleMap();//创建标记var marker = new google.maps.Marker({ position: gmap.getCenter() });//设置marker.setMap(gmap);

这就完成了在谷歌地图上构建散点图。

总结

总的来说,谷歌地图的api使用起来还是比较友好的,官网写的也挺详细,如果有不清楚的地方可以多看看官网的例子。本人只是一个菜鸟,如果有什么不对的地方,欢迎评论区指出,谢谢。

GoogleMap——谷歌地图Api的使用相关推荐

  1. 谷歌地图API位置请求_Google Maps API

    谷歌地图API位置请求  Google maps api 以xml格式传回请求的地址:http://maps.google.com/maps/api/geocode/xml?latlng=39.910 ...

  2. html5谷歌地图,谷歌地图API和HTML 5

    我是新来的Stackoverflow,所以要善良.谷歌地图API和HTML 5 我一直在使用谷歌地图api和一些其他的东西来制作游戏的项目.这个想法是使用地理定位数据来清除地图上的雾(当你开始时地图充 ...

  3. 谷歌地图api的使用 一

    一.注册账号 使用谷歌地图api,需要注册一个谷歌账号,并创建一个你的项目,在项目中开通你所需要的api. 谷歌地图api网址:https://cloud.google.com/maps-platfo ...

  4. 谷歌地图api 微信小程序_使用Google的融合位置提供程序API进行实时位置跟踪

    谷歌地图api 微信小程序 Location tracking and monitoring have seen a surge in modern application development w ...

  5. googleMap 谷歌地图

    一.谷歌地图主页 谷歌地图对应不同的地区都会有一些专门的主页,首次登陆时会显示这些地区.比如,香港的:http://maps.google.com.hk,台湾的:http://maps.google. ...

  6. 谷歌地图显示服务器错误解决方法,谷歌地图API:内部服务器错误插入功能时

    我尝试在自定义谷歌地图上插入功能:我使用示例代码从文档 但我得到一个ServiceException(内部服务器错误),当我拨打 服务插入方法.谷歌地图API:内部服务器错误插入功能时 这里是我做的: ...

  7. 用谷歌地图api获取图形范围内有几个标记点

    有一个需求用谷歌地图绘制一个图形,获取图形范围内有哪些标记点.我试着看谷歌地图的js文档,发现里面有此类的功能. 文档链接:谷歌地图api 我来分享一下使用方法: //核心方法 google.maps ...

  8. 去除谷歌地图api上的各种默认标记

    针对于谷歌地图api上显示的各种样式问题 详情参考: https://mapstyle.withgoogle.com/

  9. 使用 html5 显示导航路线 谷歌地图api

    最近在项目遇到一个关于谷歌地图的问题,看了下谷歌地图api后实现了导航和定位的功能,特意记录下,以便以后查看. 整个流程从服务端获得目的地(简称 B)的经纬度地址,通过客户端获得用户(简称A)的经纬度 ...

最新文章

  1. CAPSNET:具有自我注意路由的胶囊网络
  2. 100万+奖金池!目标检测、车牌识别、人体分割等赛事全面启动! ECV-2021 来了...
  3. Caffe代码导读(1):Protobuf例子
  4. N Problems During K Days
  5. VTK:几何对象之Vertex
  6. 终于把结婚照片做成了MTV
  7. 重磅汇总!2015-2019学硕国家线走势情况!
  8. P3615 如厕计划
  9. cgicc输出指定编码为utf-8
  10. v-for key的作用
  11. LeetCode:三个数的最大乘积【628】
  12. 腾讯云超级播放器实现无直播占位图,有直播播放视频
  13. jsBarCode生成条码并且打印的问题
  14. C#: 生辰八字五行计算算法
  15. win10键盘快捷键
  16. 用Python复现机器学习中12种经典降维算法
  17. 工业大数据竞赛的轴承数据集
  18. 大量数据导出Excel方案
  19. 普通运维人员就是秋后的蚂蚱!
  20. 骨传导耳机到底怎么样,五款好用的骨传导耳机推荐

热门文章

  1. 知识表示模型汇总分析--Trans系列
  2. neutron使用metering服务监控内网流量
  3. 百度小程序开发的基础
  4. 带你一步一步深入Handler源码,看这一篇就够了!
  5. app架构升级,4面字节跳动拿到Offer,3面直接拿到offer
  6. 产品思考 - CSDN的一键速评
  7. 常见的几种数据加密算法
  8. Mysql优化汇总系列
  9. java.lang.NoSuchMethodError: javax.persistence.OneToMany.orphanRemoval()Z 两种解决方案
  10. java中parseInt()方法