目前在vue中使用google map有以下两种方法:

一、使用 JavaScript 创建地图实例

该方法优点在于可配置项多,方便自定义,缺点是较复杂,且文档为英文,有一定学习难度。

在开始之前确保你已经在https://console.cloud.google.com/google/maps-apis/overview(谷歌地图API官网)创建账户、开通并启用以下API,最后获取到你的Google Map JavaScript API Key,并且有科学上网的办法

Directions API 为路径规划API,而Maps JavaScript API是基础地图展示所需的API

然后在 index.htmlhead 标签中引入

<script src="https://maps.googleapis.com/maps/api/jskey=YOUR_KEY"></script>

如果不在 head 标签中引入的话会出现创建地图时用到的方法未定义的问题,所以需要先使文件加载完成后再初始化地图

国内访问的话目前是没有办法的

<script src="http://ditu.google.cn/maps/api/js?&key=YOUR_KEY"></script> // 国内访问方式,已不再支持

YOUR_KEY 为你的API Key

在你的vue文件中,创建一个 id 为 gMap 的 div,并且指定宽度和高度,不然会无法显示。然后创建 initMap 方法来初始化地图实例,最后在 mounted 钩子函数中调用,不然容易出现 google undefined 的错误

图例(仅供参考):

代码:

<template><div class="map-main" id="gMap"></div>
</template>
<script>// MarkerWithLabel.js 如果引入不生效的话,可以把内容复制到这里export default {name: 'FB_map',data() {map: null,markers:[{name: 'william',url: require('../../assets/signIn.png'),position: {lat: 45.51118967089818,lng: -73.63236753474335}}]},mounted() {this.initMap() // vue实例挂载完成后初始化地图},methods: {initMap() {this.map = new google.maps.Map(document.getElementById('gMap'), {zoom: 12, // 缩放的数值center: this.markers[0].position, // 将第一个marker的坐标作为地图中心的坐标点mapTypeId: google.maps.MapTypeId.ROADMAP // 地图类别});// 遍历标记的数组this.markers.map(item => {let marker = new MarkerWithLabel({position: item.position,icon: {url: require('../../assets/signIn.png'), // 你的 icon 路径scaledSize: new google.maps.Size(60, 60), // icon 的位置//origin: new google.maps.Point(0, 0), // origin// labelOrigin: { x: 25, y: 50} // label 的位置},draggable: false, // 是否可拖动map: this.map, // 绑定的地图实例labelAnchor: new google.maps.Point(30, 60), // label 的位置labelClass: '' // label 的 class});marker.addListener("click", () => { // 为标记添加点击事件map.setCenter(item.position) // 每次点击标记会将地图的中心定位到标记marker.set('labelClass', 'labels'); // 每次点击标记会设置label的class为labels})// var infowindow = new google.maps.InfoWindow({  // 信息窗口//   content: item.name// });// marker.addListener("mouseover", () => { // hover 触发信息窗口//   infowindow.open(this.map, marker);// });// marker.addListener("mouseout", () => {//   infowindow.close(this.map, marker);// });})}},}
</script>
<style>.map-main {width: 100%;height: 500px;border-radius: 10px;overflow: hidden;}.labels { // 如果 labels 样式不生效看看 style 标签的 scoped 是否去掉height: 52px;width: 52px;border-radius: 50%;border: 4px solid #6c62db;}</style>

二、使用vue2-google-maps

该方法优点在于使用方便,无需使用 js 创建地图的实例,缺点在于自定义范围小,如无法自定义 label 的样式

1.安装

在开始前我们需要安装一下相关依赖:

npm install vue2-google-maps

2.配置

然后到 main.js 文件中,添加如下配置:

import * as VueGoogleMaps from 'vue2-google-maps'
Vue.use(VueGoogleMaps, {load: {key: "YOUR_API_KEY"}
})

YOUR_KEY 为你的API Key

3.使用

接下来就可以在你的vue文件中正常使用了,注意不同于使用JavaScript创建地图实例,我们使用到了 vue2-google-maps 中自带的组件 <GmapMap> 以及 <GmapMarker>

图例:

代码(无需使用 js 创建地图实例):

<template><div class="map-container"><div class="map-main"><GmapMap :center='center' :zoom='12' ref="mapRef" class="map-main"><GmapMarker @dragend="updateMaker" :key="index" v-for="(marker, index) in markers" :position="marker.position" :clickable="true" :icon="marker.markerData" @click="center=marker.position" class="map-marker" :label="marker.label"></GmapMarker></GmapMap><!--label:需要传入图标的标签配置position:需要传入地图标记的坐标clickable:需要传入布尔类型的值,控制地图标记是否可以点击icon:地图标记的图标路径@click:标记点击事件@dragend:拖动结束触发事件--></div>
<template><script>export default {name: 'FB_map',data() {return {markers: [{markerData: {url: require('../../assets/signIn.png'),size: {width: 60, height: 60, f: 'px', b: 'px',},scaledSize: {width: 60, height: 60, f: 'px', b: 'px',},labelOrigin: {x: 16, y: -10}},label: 'label',position: {lat: 45.53317193016025,lng: -73.58580366167472}},{markerData: {url: require('../../assets/logo.png'),scaledSize: {width: 50, height: 50, f: 'px', b: 'px',}},label: {text: 'label',color: "black",fontWeight: "bold",fontSize: "12px"},title: 'fff',position: {lat: 45.49118967089818,lng: -73.62236753474335}}],center: {lat: 45.508,lng: -73.587}};}}</script>

三、总结

方法 优点 缺点
JavaScript创建地图实例 可以详细自定义地图的各项配置,有官方文档以及海量博客来帮助学习和配置 相比另一种方法较为复杂,需要踩的坑也比较多
使用vue2-google-maps 上手简单,配置项虽然少但方便操作 配置项少,比如无法操作label样式,相关问题解决的博客相比起来比较少

四、MarkerWithLabel.js 源代码

/*** @name MarkerWithLabel for V3* @version 1.1.8 [February 26, 2013]* @author Gary Little (inspired by code from Marc Ridey of Google).* @copyright Copyright 2012 Gary Little [gary at luxcentral.com]* @fileoverview MarkerWithLabel extends the Google Maps JavaScript API V3*  <code>google.maps.Marker</code> class.*  <p>*  MarkerWithLabel allows you to define markers with associated labels. As you would expect,*  if the marker is draggable, so too will be the label. In addition, a marker with a label*  responds to all mouse events in the same manner as a regular marker. It also fires mouse*  events and "property changed" events just as a regular marker would. Version 1.1 adds*  support for the raiseOnDrag feature introduced in API V3.3.*  <p>*  If you drag a marker by its label, you can cancel the drag and return the marker to its*  original position by pressing the <code>Esc</code> key. This doesn't work if you drag the marker*  itself because this feature is not (yet) supported in the <code>google.maps.Marker</code> class.*//*!** Licensed under the Apache License, Version 2.0 (the "License");* you may not use this file except in compliance with the License.* You may obtain a copy of the License at**       http://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an "AS IS" BASIS,* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.*//*jslint browser:true *//*global document,google *//*** @param {Function} childCtor Child class.* @param {Function} parentCtor Parent class.*/function inherits(childCtor, parentCtor) {/** @constructor */function tempCtor() {};tempCtor.prototype = parentCtor.prototype;childCtor.superClass_ = parentCtor.prototype;childCtor.prototype = new tempCtor();/** @override */childCtor.prototype.constructor = childCtor;
}/*** This constructor creates a label and associates it with a marker.* It is for the private use of the MarkerWithLabel class.* @constructor* @param {Marker} marker The marker with which the label is to be associated.* @param {string} crossURL The URL of the cross image =.* @param {string} handCursor The URL of the hand cursor.* @private*/
function MarkerLabel_(marker, crossURL, handCursorURL) {this.marker_ = marker;this.handCursorURL_ = marker.handCursorURL;this.labelDiv_ = document.createElement("div");this.labelDiv_.style.cssText = "position: absolute; overflow: hidden;";// Set up the DIV for handling mouse events in the label. This DIV forms a transparent veil// in the "overlayMouseTarget" pane, a veil that covers just the label. This is done so that// events can be captured even if the label is in the shadow of a google.maps.InfoWindow.// Code is included here to ensure the veil is always exactly the same size as the label.this.eventDiv_ = document.createElement("div");this.eventDiv_.style.cssText = this.labelDiv_.style.cssText;// This is needed for proper behavior on MSIE:this.eventDiv_.setAttribute("onselectstart", "return false;");this.eventDiv_.setAttribute("ondragstart", "return false;");// Get the DIV for the "X" to be displayed when the marker is raised.this.crossDiv_ = MarkerLabel_.getSharedCross(crossURL);
}
inherits(MarkerLabel_, google.maps.OverlayView);/*** Returns the DIV for the cross used when dragging a marker when the* raiseOnDrag parameter set to true. One cross is shared with all markers.* @param {string} crossURL The URL of the cross image =.* @private*/
MarkerLabel_.getSharedCross = function (crossURL) {var div;if (typeof MarkerLabel_.getSharedCross.crossDiv === "undefined") {div = document.createElement("img");div.style.cssText = "position: absolute; z-index: 1000002; display: none;";// Hopefully Google never changes the standard "X" attributes:div.style.marginLeft = "-8px";div.style.marginTop = "-9px";div.src = crossURL;MarkerLabel_.getSharedCross.crossDiv = div;}return MarkerLabel_.getSharedCross.crossDiv;
};/*** Adds the DIV representing the label to the DOM. This method is called* automatically when the marker's <code>setMap</code> method is called.* @private*/
MarkerLabel_.prototype.onAdd = function () {var me = this;var cMouseIsDown = false;var cDraggingLabel = false;var cSavedZIndex;var cLatOffset, cLngOffset;var cIgnoreClick;var cRaiseEnabled;var cStartPosition;var cStartCenter;// Constants:var cRaiseOffset = 20;var cDraggingCursor = "url(" + this.handCursorURL_ + ")";// Stops all processing of an event.//var cAbortEvent = function (e) {if (e.preventDefault) {e.preventDefault();}e.cancelBubble = true;if (e.stopPropagation) {e.stopPropagation();}};var cStopBounce = function () {me.marker_.setAnimation(null);};this.getPanes().overlayImage.appendChild(this.labelDiv_);this.getPanes().overlayMouseTarget.appendChild(this.eventDiv_);// One cross is shared with all markers, so only add it once:if (typeof MarkerLabel_.getSharedCross.processed === "undefined") {this.getPanes().overlayImage.appendChild(this.crossDiv_);MarkerLabel_.getSharedCross.processed = true;}this.listeners_ = [google.maps.event.addDomListener(this.eventDiv_, "mouseover", function (e) {if (me.marker_.getDraggable() || me.marker_.getClickable()) {this.style.cursor = "pointer";google.maps.event.trigger(me.marker_, "mouseover", e);}}),google.maps.event.addDomListener(this.eventDiv_, "mouseout", function (e) {if ((me.marker_.getDraggable() || me.marker_.getClickable()) && !cDraggingLabel) {this.style.cursor = me.marker_.getCursor();google.maps.event.trigger(me.marker_, "mouseout", e);}}),google.maps.event.addDomListener(this.eventDiv_, "mousedown", function (e) {cDraggingLabel = false;if (me.marker_.getDraggable()) {cMouseIsDown = true;this.style.cursor = cDraggingCursor;}if (me.marker_.getDraggable() || me.marker_.getClickable()) {google.maps.event.trigger(me.marker_, "mousedown", e);cAbortEvent(e); // Prevent map pan when starting a drag on a label}}),google.maps.event.addDomListener(document, "mouseup", function (mEvent) {var position;if (cMouseIsDown) {cMouseIsDown = false;me.eventDiv_.style.cursor = "pointer";google.maps.event.trigger(me.marker_, "mouseup", mEvent);}if (cDraggingLabel) {if (cRaiseEnabled) { // Lower the marker & labelposition = me.getProjection().fromLatLngToDivPixel(me.marker_.getPosition());position.y += cRaiseOffset;me.marker_.setPosition(me.getProjection().fromDivPixelToLatLng(position));// This is not the same bouncing style as when the marker portion is dragged,// but it will have to do:try { // Will fail if running Google Maps API earlier than V3.3me.marker_.setAnimation(google.maps.Animation.BOUNCE);setTimeout(cStopBounce, 1406);} catch (e) {}}me.crossDiv_.style.display = "none";me.marker_.setZIndex(cSavedZIndex);cIgnoreClick = true; // Set flag to ignore the click event reported after a label dragcDraggingLabel = false;mEvent.latLng = me.marker_.getPosition();google.maps.event.trigger(me.marker_, "dragend", mEvent);}}),google.maps.event.addListener(me.marker_.getMap(), "mousemove", function (mEvent) {var position;if (cMouseIsDown) {if (cDraggingLabel) {// Change the reported location from the mouse position to the marker position:mEvent.latLng = new google.maps.LatLng(mEvent.latLng.lat() - cLatOffset, mEvent.latLng.lng() - cLngOffset);position = me.getProjection().fromLatLngToDivPixel(mEvent.latLng);if (cRaiseEnabled) {me.crossDiv_.style.left = position.x + "px";me.crossDiv_.style.top = position.y + "px";me.crossDiv_.style.display = "";position.y -= cRaiseOffset;}me.marker_.setPosition(me.getProjection().fromDivPixelToLatLng(position));if (cRaiseEnabled) { // Don't raise the veil; this hack needed to make MSIE act properlyme.eventDiv_.style.top = (position.y + cRaiseOffset) + "px";}google.maps.event.trigger(me.marker_, "drag", mEvent);} else {// Calculate offsets from the click point to the marker position:cLatOffset = mEvent.latLng.lat() - me.marker_.getPosition().lat();cLngOffset = mEvent.latLng.lng() - me.marker_.getPosition().lng();cSavedZIndex = me.marker_.getZIndex();cStartPosition = me.marker_.getPosition();cStartCenter = me.marker_.getMap().getCenter();cRaiseEnabled = me.marker_.get("raiseOnDrag");cDraggingLabel = true;me.marker_.setZIndex(1000000); // Moves the marker & label to the foreground during a dragmEvent.latLng = me.marker_.getPosition();google.maps.event.trigger(me.marker_, "dragstart", mEvent);}}}),google.maps.event.addDomListener(document, "keydown", function (e) {if (cDraggingLabel) {if (e.keyCode === 27) { // Esc keycRaiseEnabled = false;me.marker_.setPosition(cStartPosition);me.marker_.getMap().setCenter(cStartCenter);google.maps.event.trigger(document, "mouseup", e);}}}),google.maps.event.addDomListener(this.eventDiv_, "click", function (e) {if (me.marker_.getDraggable() || me.marker_.getClickable()) {if (cIgnoreClick) { // Ignore the click reported when a label drag endscIgnoreClick = false;} else {google.maps.event.trigger(me.marker_, "click", e);cAbortEvent(e); // Prevent click from being passed on to map}}}),google.maps.event.addDomListener(this.eventDiv_, "dblclick", function (e) {if (me.marker_.getDraggable() || me.marker_.getClickable()) {google.maps.event.trigger(me.marker_, "dblclick", e);cAbortEvent(e); // Prevent map zoom when double-clicking on a label}}),google.maps.event.addListener(this.marker_, "dragstart", function (mEvent) {if (!cDraggingLabel) {cRaiseEnabled = this.get("raiseOnDrag");}}),google.maps.event.addListener(this.marker_, "drag", function (mEvent) {if (!cDraggingLabel) {if (cRaiseEnabled) {me.setPosition(cRaiseOffset);// During a drag, the marker's z-index is temporarily set to 1000000 to// ensure it appears above all other markers. Also set the label's z-index// to 1000000 (plus or minus 1 depending on whether the label is supposed// to be above or below the marker).me.labelDiv_.style.zIndex = 1000000 + (this.get("labelInBackground") ? -1 : +1);}}}),google.maps.event.addListener(this.marker_, "dragend", function (mEvent) {if (!cDraggingLabel) {if (cRaiseEnabled) {me.setPosition(0); // Also restores z-index of label}}}),google.maps.event.addListener(this.marker_, "position_changed", function () {me.setPosition();}),google.maps.event.addListener(this.marker_, "zindex_changed", function () {me.setZIndex();}),google.maps.event.addListener(this.marker_, "visible_changed", function () {me.setVisible();}),google.maps.event.addListener(this.marker_, "labelvisible_changed", function () {me.setVisible();}),google.maps.event.addListener(this.marker_, "title_changed", function () {me.setTitle();}),google.maps.event.addListener(this.marker_, "labelcontent_changed", function () {me.setContent();}),google.maps.event.addListener(this.marker_, "labelanchor_changed", function () {me.setAnchor();}),google.maps.event.addListener(this.marker_, "labelclass_changed", function () {me.setStyles();}),google.maps.event.addListener(this.marker_, "labelstyle_changed", function () {me.setStyles();})];
};/*** Removes the DIV for the label from the DOM. It also removes all event handlers.* This method is called automatically when the marker's <code>setMap(null)</code>* method is called.* @private*/
MarkerLabel_.prototype.onRemove = function () {var i;this.labelDiv_.parentNode.removeChild(this.labelDiv_);this.eventDiv_.parentNode.removeChild(this.eventDiv_);// Remove event listeners:for (i = 0; i < this.listeners_.length; i++) {google.maps.event.removeListener(this.listeners_[i]);}
};/*** Draws the label on the map.* @private*/
MarkerLabel_.prototype.draw = function () {this.setContent();this.setTitle();this.setStyles();
};/*** Sets the content of the label.* The content can be plain text or an HTML DOM node.* @private*/
MarkerLabel_.prototype.setContent = function () {var content = this.marker_.get("labelContent");if (typeof content.nodeType === "undefined") {this.labelDiv_.innerHTML = content;this.eventDiv_.innerHTML = this.labelDiv_.innerHTML;} else {this.labelDiv_.innerHTML = ""; // Remove current contentthis.labelDiv_.appendChild(content);content = content.cloneNode(true);this.eventDiv_.appendChild(content);}
};/*** Sets the content of the tool tip for the label. It is* always set to be the same as for the marker itself.* @private*/
MarkerLabel_.prototype.setTitle = function () {this.eventDiv_.title = this.marker_.getTitle() || "";
};/*** Sets the style of the label by setting the style sheet and applying* other specific styles requested.* @private*/
MarkerLabel_.prototype.setStyles = function () {var i, labelStyle;// Apply style values from the style sheet defined in the labelClass parameter:this.labelDiv_.className = this.marker_.get("labelClass");this.eventDiv_.className = this.labelDiv_.className;// Clear existing inline style values:this.labelDiv_.style.cssText = "";this.eventDiv_.style.cssText = "";// Apply style values defined in the labelStyle parameter:labelStyle = this.marker_.get("labelStyle");for (i in labelStyle) {if (labelStyle.hasOwnProperty(i)) {this.labelDiv_.style[i] = labelStyle[i];this.eventDiv_.style[i] = labelStyle[i];}}this.setMandatoryStyles();
};/*** Sets the mandatory styles to the DIV representing the label as well as to the* associated event DIV. This includes setting the DIV position, z-index, and visibility.* @private*/
MarkerLabel_.prototype.setMandatoryStyles = function () {this.labelDiv_.style.position = "absolute";this.labelDiv_.style.overflow = "hidden";// Make sure the opacity setting causes the desired effect on MSIE:if (typeof this.labelDiv_.style.opacity !== "undefined" && this.labelDiv_.style.opacity !== "") {this.labelDiv_.style.MsFilter = "\"progid:DXImageTransform.Microsoft.Alpha(opacity=" + (this.labelDiv_.style.opacity * 100) + ")\"";this.labelDiv_.style.filter = "alpha(opacity=" + (this.labelDiv_.style.opacity * 100) + ")";}this.eventDiv_.style.position = this.labelDiv_.style.position;this.eventDiv_.style.overflow = this.labelDiv_.style.overflow;this.eventDiv_.style.opacity = 0.01; // Don't use 0; DIV won't be clickable on MSIEthis.eventDiv_.style.MsFilter = "\"progid:DXImageTransform.Microsoft.Alpha(opacity=1)\"";this.eventDiv_.style.filter = "alpha(opacity=1)"; // For MSIEthis.setAnchor();this.setPosition(); // This also updates z-index, if necessary.this.setVisible();
};/*** Sets the anchor point of the label.* @private*/
MarkerLabel_.prototype.setAnchor = function () {var anchor = this.marker_.get("labelAnchor");this.labelDiv_.style.marginLeft = -anchor.x + "px";this.labelDiv_.style.marginTop = -anchor.y + "px";this.eventDiv_.style.marginLeft = -anchor.x + "px";this.eventDiv_.style.marginTop = -anchor.y + "px";
};/*** Sets the position of the label. The z-index is also updated, if necessary.* @private*/
MarkerLabel_.prototype.setPosition = function (yOffset) {var position = this.getProjection().fromLatLngToDivPixel(this.marker_.getPosition());if (typeof yOffset === "undefined") {yOffset = 0;}this.labelDiv_.style.left = Math.round(position.x) + "px";this.labelDiv_.style.top = Math.round(position.y - yOffset) + "px";this.eventDiv_.style.left = this.labelDiv_.style.left;this.eventDiv_.style.top = this.labelDiv_.style.top;this.setZIndex();
};/*** Sets the z-index of the label. If the marker's z-index property has not been defined, the z-index* of the label is set to the vertical coordinate of the label. This is in keeping with the default* stacking order for Google Maps: markers to the south are in front of markers to the north.* @private*/
MarkerLabel_.prototype.setZIndex = function () {var zAdjust = (this.marker_.get("labelInBackground") ? -1 : +1);if (typeof this.marker_.getZIndex() === "undefined") {this.labelDiv_.style.zIndex = parseInt(this.labelDiv_.style.top, 10) + zAdjust;this.eventDiv_.style.zIndex = this.labelDiv_.style.zIndex;} else {this.labelDiv_.style.zIndex = this.marker_.getZIndex() + zAdjust;this.eventDiv_.style.zIndex = this.labelDiv_.style.zIndex;}
};/*** Sets the visibility of the label. The label is visible only if the marker itself is* visible (i.e., its visible property is true) and the labelVisible property is true.* @private*/
MarkerLabel_.prototype.setVisible = function () {if (this.marker_.get("labelVisible")) {this.labelDiv_.style.display = this.marker_.getVisible() ? "block" : "none";} else {this.labelDiv_.style.display = "none";}this.eventDiv_.style.display = this.labelDiv_.style.display;
};/*** @name MarkerWithLabelOptions* @class This class represents the optional parameter passed to the {@link MarkerWithLabel} constructor.*  The properties available are the same as for <code>google.maps.Marker</code> with the addition*  of the properties listed below. To change any of these additional properties after the labeled*  marker has been created, call <code>google.maps.Marker.set(propertyName, propertyValue)</code>.*  <p>*  When any of these properties changes, a property changed event is fired. The names of these*  events are derived from the name of the property and are of the form <code>propertyname_changed</code>.*  For example, if the content of the label changes, a <code>labelcontent_changed</code> event*  is fired.*  <p>* @property {string|Node} [labelContent] The content of the label (plain text or an HTML DOM node).* @property {Point} [labelAnchor] By default, a label is drawn with its anchor point at (0,0) so*  that its top left corner is positioned at the anchor point of the associated marker. Use this*  property to change the anchor point of the label. For example, to center a 50px-wide label*  beneath a marker, specify a <code>labelAnchor</code> of <code>google.maps.Point(25, 0)</code>.*  (Note: x-values increase to the right and y-values increase to the top.)* @property {string} [labelClass] The name of the CSS class defining the styles for the label.*  Note that style values for <code>position</code>, <code>overflow</code>, <code>top</code>,*  <code>left</code>, <code>zIndex</code>, <code>display</code>, <code>marginLeft</code>, and*  <code>marginTop</code> are ignored; these styles are for internal use only.* @property {Object} [labelStyle] An object literal whose properties define specific CSS*  style values to be applied to the label. Style values defined here override those that may*  be defined in the <code>labelClass</code> style sheet. If this property is changed after the*  label has been created, all previously set styles (except those defined in the style sheet)*  are removed from the label before the new style values are applied.*  Note that style values for <code>position</code>, <code>overflow</code>, <code>top</code>,*  <code>left</code>, <code>zIndex</code>, <code>display</code>, <code>marginLeft</code>, and*  <code>marginTop</code> are ignored; these styles are for internal use only.* @property {boolean} [labelInBackground] A flag indicating whether a label that overlaps its*  associated marker should appear in the background (i.e., in a plane below the marker).*  The default is <code>false</code>, which causes the label to appear in the foreground.* @property {boolean} [labelVisible] A flag indicating whether the label is to be visible.*  The default is <code>true</code>. Note that even if <code>labelVisible</code> is*  <code>true</code>, the label will <i>not</i> be visible unless the associated marker is also*  visible (i.e., unless the marker's <code>visible</code> property is <code>true</code>).* @property {boolean} [raiseOnDrag] A flag indicating whether the label and marker are to be*  raised when the marker is dragged. The default is <code>true</code>. If a draggable marker is*  being created and a version of Google Maps API earlier than V3.3 is being used, this property*  must be set to <code>false</code>.* @property {boolean} [optimized] A flag indicating whether rendering is to be optimized for the*  marker. <b>Important: The optimized rendering technique is not supported by MarkerWithLabel,*  so the value of this parameter is always forced to <code>false</code>.* @property {string} [crossImage="http://maps.gstatic.com/intl/en_us/mapfiles/drag_cross_67_16.png"]*  The URL of the cross image to be displayed while dragging a marker.* @property {string} [handCursor="http://maps.gstatic.com/intl/en_us/mapfiles/closedhand_8_8.cur"]*  The URL of the cursor to be displayed while dragging a marker.*/
/*** Creates a MarkerWithLabel with the options specified in {@link MarkerWithLabelOptions}.* @constructor* @param {MarkerWithLabelOptions} [opt_options] The optional parameters.*/
function MarkerWithLabel(opt_options) {opt_options = opt_options || {};opt_options.labelContent = opt_options.labelContent || "";opt_options.labelAnchor = opt_options.labelAnchor || new google.maps.Point(0, 0);opt_options.labelClass = opt_options.labelClass || "markerLabels";opt_options.labelStyle = opt_options.labelStyle || {};opt_options.labelInBackground = opt_options.labelInBackground || false;if (typeof opt_options.labelVisible === "undefined") {opt_options.labelVisible = true;}if (typeof opt_options.raiseOnDrag === "undefined") {opt_options.raiseOnDrag = true;}if (typeof opt_options.clickable === "undefined") {opt_options.clickable = true;}if (typeof opt_options.draggable === "undefined") {opt_options.draggable = false;}if (typeof opt_options.optimized === "undefined") {opt_options.optimized = false;}opt_options.crossImage = opt_options.crossImage || "http" + (document.location.protocol === "https:" ? "s" : "") + "://maps.gstatic.com/intl/en_us/mapfiles/drag_cross_67_16.png";opt_options.handCursor = opt_options.handCursor || "http" + (document.location.protocol === "https:" ? "s" : "") + "://maps.gstatic.com/intl/en_us/mapfiles/closedhand_8_8.cur";opt_options.optimized = false; // Optimized rendering is not supportedthis.label = new MarkerLabel_(this, opt_options.crossImage, opt_options.handCursor); // Bind the label to the marker// Call the parent constructor. It calls Marker.setValues to initialize, so all// the new parameters are conveniently saved and can be accessed with get/set.// Marker.set triggers a property changed event (called "propertyname_changed")// that the marker label listens for in order to react to state changes.google.maps.Marker.apply(this, arguments);
}
inherits(MarkerWithLabel, google.maps.Marker);/*** Overrides the standard Marker setMap function.* @param {Map} theMap The map to which the marker is to be added.* @private*/
MarkerWithLabel.prototype.setMap = function (theMap) {// Call the inherited function...google.maps.Marker.prototype.setMap.apply(this, arguments);// ... then deal with the label:this.label.setMap(theMap);
};google.maps.MarkerWithLabel = MarkerWithLabel;
ues to initialize, so all// the new parameters are conveniently saved and can be accessed with get/set.// Marker.set triggers a property changed event (called "propertyname_changed")// that the marker label listens for in order to react to state changes.google.maps.Marker.apply(this, arguments);
}
inherits(MarkerWithLabel, google.maps.Marker);/*** Overrides the standard Marker setMap function.* @param {Map} theMap The map to which the marker is to be added.* @private*/
MarkerWithLabel.prototype.setMap = function (theMap) {// Call the inherited function...google.maps.Marker.prototype.setMap.apply(this, arguments);// ... then deal with the label:this.label.setMap(theMap);
};google.maps.MarkerWithLabel = MarkerWithLabel;

2021年在vue中使用 Google Map相关推荐

  1. 【VUE】在vue中使用google地图

    文章目录 前言 前期准备 一.获取google地图的key 二.使用步骤 1.安装google官方依赖 2.使用googlemap 其他小方法1:设置marker 其他小方法2:设置infowindo ...

  2. 在bigemap中添加Google map(谷歌地图)

    BIGEMAP如何添加在线google map 谷歌地图 最近一直在研究如何在bigemap手机端和Gis office桌面上添加谷歌地图,经过调试,亲测有效. 谷歌卫星地图(无偏移): https: ...

  3. 关于在Winphone中使用Google Map的问题(徐林峰)

    老师,我现在做应用遇到一个问题:bing map的精度不够,很多地点显示不出来,后来我将Google Map嵌套进去,精度是够了,但是发现结果两种地图重叠了,我尝试着去掉bing map,只用Goog ...

  4. 在JAVA类中解析GOOGLE MAP地址和反向解析纬经度

    import java.io.IOException; import java.io.InputStreamReader; import java.io.UnsupportedEncodingExce ...

  5. vue中使用google地图(自定义label、信息窗口)

    最近公司爱尔兰项目需要使用google地图,项目还是用vue写的,那我就寻思找个vue能用的google地图的插件吧,找了vue2-google-maps,这个插件确实还行,而且github上还有ap ...

  6. 在vue中使用Google Recaptcha验证

    我们最近的项目中需要使用谷歌机器人验证,这个最主要的就是要有vpn,还需要有公司申请的google账号(自己申请的没用)用于商用的,利用这个账号去申请秘钥,然后有了秘钥之后就可以了. 部分代码如下: ...

  7. 在.net中构建Google Map( Building Google Map Mashups in .NET)

    http://www.drdobbs.com/windows/224700481 转载于:https://www.cnblogs.com/worfdream/archive/2010/05/24/17 ...

  8. 利用HTML5中Geolocation获取地理位置在Google Map上定位

    本小菜刚开始学习HTML5,现在对其中的Geolocation颇感兴趣,结合Google Map的API实现基本的地图定位功能. 1.获取当前地理位置 调用方法 void getCurrentPosi ...

  9. Google Map API运行提示Installation error: INSTALL_FAILED_MISSING_SHARED_LIBRARY

    以前写的一个工程中调用了google map的api,今天在AVD中运行却始终提示如下错误: [2012-11-14 17:54:38 - AndroidDemo] Installation erro ...

最新文章

  1. 使用cqengine进行集合检索
  2. 如何布局文章标题才更吸引搜索引擎注意?
  3. 【Python】表白程序
  4. Java并发编程:如何创建线程?
  5. 暑假周进度总结报告7
  6. python读取身份证照片信息_Python身份证照片识别信息,python
  7. 用iPad编写C/C++代码(计算机考研党也能用iPad写算法题)
  8. SAP计划策略组详细介绍
  9. 怎么打不开电脑计算机呢,双击我的电脑打不开怎么办
  10. 【新书速递】深入浅出Electron
  11. linux字体不识别不了怎么办,Docker容器不识别宋体等字体怎么办
  12. 润飞rf1800支持解密吗_RF-3148USB,北京润飞编程器
  13. 17_微信小程序之抖音微视无限滑动视频列表自定义组件编写
  14. char、int、long它们各占几个字节?占几位?
  15. 谈谈最近管理情绪和时间的心得:真的是破心中贼难
  16. 专题论坛:云计算安全论坛
  17. WordPress主题:Dux主题 V6.4免费分享(113p.cn)
  18. 解决/lib64/libstdc++.so.6: version `CXXABI_1.3.8‘ not found
  19. css亮黄色_写给前端工程师的色彩常识:色彩三属性及其在CSS中的应用
  20. 论文阅读笔记:Ultra-Scalable Spectral Clustering and Ensemble Clustering

热门文章

  1. JAVA编程习题及答案_完美版
  2. WIndow强制删除文件或文件夹
  3. 布莱克斯科尔斯模型(四)方程推导过程
  4. request.setAttribute的用法
  5. 免费的21个UI界面设计工具、资源及网站
  6. Apache+php安装整理
  7. Linux命令+shell脚本大全:处理数据文件
  8. 《卓有成效的管理者》——学习心得(七)
  9. 数据结构题目收录(一)
  10. socket接口技术和相关函数(socket,bind,listen,accept)