基础设置

  // 配置地图初始参数setMapOptions() {let mapOptions = {mapTypeId: google.maps.MapTypeId.ROADMAP,gestureHandling: 'greedy', // 地图上的手势mapTypeControl: false, // Map类型控件mapTypeControlOptions: {position: google.maps.ControlPosition.LEFT_TOP},clickableIcons: false, // 地图图标不可点击streetViewControl: false, // 街景街景小人物fullscreenControl: false, // 全屏控件panControl: false, // 平移控件--没效果panControlOptions: {position: google.maps.ControlPosition.LEFT_TOP},zoomControl: true, // 地图缩放级别zoomControlOptions: {position: google.maps.ControlPosition.LEFT_TOP}}return mapOptions},// 创建中心点centerZoom(map, point, zoom) {map.setCenter(point)map.setZoom(zoom)},// 获取点坐标createPoint(lng, lat) {// lat:纬度,lng:经度return new google.maps.LatLng(lat, lng) // 顺序和其它地图api的不一样},// 切换城市toggleCity(args) {const {map, cityName, zoom} = {...args}let geocoder = new google.maps.Geocoder()geocoder.geocode({'address': cityName}, function(results, status) {if (status === google.maps.GeocoderStatus.OK) {let point = results[0].geometry.location// results数组里有很多有用的信息,包括坐标和返回的标准位置信息map.setCenter(point)map.setZoom(zoom)} else {console.warn('Address resolution error!!!')}})},

信息窗

  // 创建信息窗createInfoWindow() {let infoWindow = new google.maps.InfoWindow({pixelOffset: new google.maps.Size(0, -40),maxWidth: 345,disableAutoPan: true // 打开时禁用自动平移})return infoWindow},// 打开信息窗openInfoWindow(map, infoWd, point) {infoWd.setPosition(point)infoWd.open(map)},// 关闭信息窗closeInfoWindow(map, infoWd) {infoWd && infoWd.close()},

覆盖物

  // 创建实时路况图层createTraffic() {return new google.maps.TrafficLayer()},// 加载markerwithlabel文件getMarkerWithLabel(googleMaps) {// 在npm上查询到markerwithlabelMarkerWithLabel = require('./js/markerwithlabel')(googleMaps)},// 创建markercreateMarker(args) {const { point, iconPath, isLabelMarker = false } = {...args}let marker// 默认是没有label的marker,如需要有lable的marker配置传入的参数isLabelMarker为true即可if (isLabelMarker) {marker = new MarkerWithLabel({position: point,icon: iconPath,raiseOnDrag: true,labelContent: '', // label的内容labelAnchor: new google.maps.Point(-25, 32),labelClass: 'google-labels', // the CSS class for the labellabelStyle: {'color': '#666','background-color': '#fff'},labelInBackground: false})// 给marker添加静态方法,用于设置label的内容、样式marker.setText = function (labelTxt) {marker.labelContent = labelTxt}marker.setStyle = function (styleOpts) {marker.labelStyle = {...marker.labelStyle, ...styleOpts}}} else {marker = new google.maps.Marker({icon: iconPath,position: point})}return marker},

圆形/矩形/多边形/折线

  // 绘制圆createCircle(point, radius) {let circle = new google.maps.Circle({center: point, // 圆心位置radius: radius, // 半径fillColor: '#1989fa', // 圆形填充颜色strokeWeight: 2, // 圆形边线的宽度strokeColor: '#1989fa', // 圆形边线颜色fillOpacity: 0.3 // 圆形填充的透明度// strokeOpacity: 0.3 // 圆形边线的透明度})return circle},// 绘制矩形createRectangle(pointObj) {let rectangle = new google.maps.Rectangle({bounds: pointObj,editable: false // 设置是否可编辑})return rectangle},// 绘制多边形createPolygon(pointArr) {let polygon = new google.maps.Polygon({path: pointArr,fillColor: '#1989fa', // 圆形填充颜色strokeWeight: 2, // 圆形边线的宽度strokeColor: '#1989fa', // 圆形边线颜色fillOpacity: 0.3 // 圆形填充的透明度})return polygon},// 绘制折线createPolyline(pointArr) {let polyline = new google.maps.Polyline({path: pointArr,geodesic: true,strokeColor: '#B89AE5',strokeWeight: 4,strokeOpacity: 1})return polyline},

鼠标绘制工具

drawingManager(map) {// https://developers.google.com/maps/documentation/javascript/drawinglayerlet styleOptions = {strokeColor: '#1989fa', // 边线颜色。fillColor: '#6130CA', // 填充颜色。当参数为空时,圆形将没有填充效果。strokeWeight: 2, // 边线的宽度,以像素为单位。// strokeOpacity: 0.8,     // 边线透明度,取值范围0 - 1。fillOpacity: 0.2, // 填充的透明度,取值范围0 - 1。strokeStyle: 'solid', // 边线的样式,solid或dashed。clickable: false, // 是否可点击editable: false // 是否可编辑}let drawingManager = new google.maps.drawing.DrawingManager({map: map,// drawingMode: google.maps.drawing.OverlayType.MARKER, // 绘制模式 CIRCLE MARKER POLYGON POLYLINE RECTANGLEdrawingControl: false, // 绘图控件的启用drawingControlOptions: {position: google.maps.ControlPosition.TOP_CENTER,drawingModes: ['marker', 'circle', 'polygon', 'polyline', 'rectangle']},rectangleOptions: styleOptions, // 矩形的样式circleOptions: styleOptions, // 圆形的样式polygonOptions: styleOptions, // 多边形的样式polylineOptions: styleOptions // 线的样式})return drawingManager
}

计算类

  // 判断点是否在可视区域内pointInVisibleArea(map, point) {let flag = falselet gpsamap = pointlet bs = map.getBounds() // 获取可视区域let bssw = bs.getSouthWest() // 可视区域左下角let bsne = bs.getNorthEast() // 可视区域右上角let gpsamap_lon = gpsamap.lng()let gpsamap_lat = gpsamap.lat()if ((bssw.lng() <= gpsamap_lon && gpsamap_lon <= bsne.lng()) && (bssw.lat() <= gpsamap_lat && gpsamap_lat <= bsne.lat())) {flag = true}return flag},// 获取两点之间的距离getDistance(startPoint, endPoint) {return google.maps.geometry.spherical.computeDistanceBetween(startPoint, endPoint)},// 获取多边形的面积getComputeArea (pointArr) {return google.maps.geometry.spherical.computeArea(pointArr)},// 根据坐标点自动缩放setViewArea(map, bounds) {map.fitBounds(bounds)},

处理谷歌地图marker旋转

/*
* 功能:使用canvas旋转图标,并生成路径
* 参数:options(Object)
* 用途:处理谷歌地图marker旋转
* */
const setRotation = (options) => {return new Promise((resolve, reject) => {let w = options.width || 40let h = options.height || 40let canvas = document.createElement('canvas')canvas.width = wcanvas.height = hlet ctx = canvas.getContext('2d')let angle = options.deg ? options.deg * Math.PI / 180 : 0let centerX = w / 2let centerY = h / 2let dataURL = ''let img = new Image()img.src = options.urlimg.onload = function() {ctx.clearRect(0, 0, w, h)ctx.save()ctx.translate(centerX, centerY)ctx.rotate(angle)ctx.translate(-centerX, -centerY)ctx.drawImage(img, centerX/2, 0)ctx.restore()dataURL = canvas.toDataURL('image/png')resolve({size: options.size,origin: options.origin,url: dataURL})}})
}

谷歌地图的API应用相关推荐

  1. 谷歌地图JavaScript API第3版 地理编码服务

    地理编码服务 概观 地理编码请求 地理编码响应 地理编码结果 地址组件类型 状态代码 反向地理编码 视口偏置 区码偏置 概观 地理编码地址(如"1600剧场百汇,山景,CA")转换 ...

  2. Windows Store Javascript项目使用高德地图、谷歌地图、百度地图API

    Windows Store Javascript项目使用高德地图.谷歌地图.百度地图API 原文 Windows Store Javascript项目使用高德地图.谷歌地图.百度地图API 在Win8 ...

  3. GoogleMap——谷歌地图Api的使用

    最近公司想要在国外也使用地图功能,而我们国内使用的是高德地图,国外客户需要用谷歌地图,所以去了解了一下谷歌地图的使用,这里记录一下. 准备工作 首先你得有一个谷歌账号,然后得用一点小魔法,去谷歌地图官 ...

  4. 谷歌地图开发:地理编码和反地理编码

    谷歌地图Geocoding说明:内容主要来自谷歌官网的文档,谷歌地图android api地理和反地理编码反应迟钝内容有时不准确,这里使用的googlemap的webapi接口.嗯,需要vpn这个不多 ...

  5. C#版谷歌地图下载器设计与实现

    关于如何将地球经纬度坐标系统转换成程序中常用到的平面2D坐标系统,网上的文章很多,参考http://www.cnblogs.com/beniao/archive/2010/04/18/1714544. ...

  6. [转载]谷歌地图下载

    关于如何将地球经纬度坐标系统转换成程序中常用到的平面2D坐标系统,网上的文章很多,参考http://www.cnblogs.com/beniao/archive/2010/04/18/1714544. ...

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

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

  8. python 谷歌地图api_《Python网络编程》学习笔记--使用谷歌地理编码API获取一个JSON文档...

    Foundations of Python Network Programing,Third Edition <python网络编程>,本书中的代码可在Github上搜索fopnp下载 本 ...

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

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

  10. 谷歌地图api的使用 一

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

最新文章

  1. 第三章:创建用户界面组件--可视化组件(一)
  2. ubuntu 突然不能 sudo成功,报错su: Authentication failure
  3. mysql主从复制replication的一些相关命令
  4. mysql 临时列_mysql – 在SQL中添加一个临时列,其中值取决于另一列
  5. php回调函数求1+2+3+...+100的值_PHP全栈学习笔记6
  6. 前端学习(1265):接口调用axios
  7. 面试官系统精讲Java源码及大厂真题 - 02 String、Long 源码解析和面试题
  8. 制作win10安装u盘_最简单的Win10系统安装U盘制作方法
  9. linux执行db2的sql脚本,LinuxShell自动执行当前目录所有DB2 SQL语句
  10. CentOS常用基础命令大全
  11. mysql常用加密方法_MYSQL 加密的 3 类方法
  12. ae 创建图像等高线 蒙版_UI设计教程:几步教你如何创建一个漂亮又好吃的饼干...
  13. java 获取密码框密码,获得Windows下的密码框密码--编程学习网
  14. 员工管理的html页面,员工管理.html
  15. java 反射 静态成员_java 利用反射获取内部类静态成员变量的值
  16. Visual Assist X 颜色配置习惯
  17. python-opencv第四期:threshold函数详解
  18. 索尼BDP-S580回顾 - 一个最好的蓝光播放器在2011年
  19. 软件测试面试中都会问到哪些关于Python的问题?
  20. 处理器协同机制其三C++内存顺序与栅栏(及依赖性读屏障)

热门文章

  1. c语言用后缀字母表示不同数制,C语言基础知识总结
  2. MATLAB ttest和ttest2
  3. SK Comms信息外泄事件使韩国企业开始提高安全预算
  4. git 删除历史记录
  5. 客户价值分析之RFM模型
  6. 面试反问环节应该问什么?
  7. 皮克定理(计算多边形面积)
  8. IDC运维工程师的基本要求
  9. 网络流量分析netflow
  10. js 实现全国省市区三级联动