基础设置
setMapOptions() {
let mapOptions = {
mapTypeId: google.maps.MapTypeId.ROADMAP,
gestureHandling: 'greedy',
mapTypeControl: false,
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) {
return new google.maps.LatLng(lat, lng)
},
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
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()
},
getMarkerWithLabel(googleMaps) {
MarkerWithLabel = require('./js/markerwithlabel')(googleMaps)
},
createMarker(args) {
const { point, iconPath, isLabelMarker = false } = {...args}
let marker
if (isLabelMarker) {
marker = new MarkerWithLabel({
position: point,
icon: iconPath,
raiseOnDrag: true,
labelContent: '',
labelAnchor: new google.maps.Point(-25, 32),
labelClass: 'google-labels',
labelStyle: {
'color': '#666',
'background-color': '#fff'
},
labelInBackground: false
})
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
})
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) {
let styleOptions = {
strokeColor: '#1989fa',
fillColor: '#6130CA',
strokeWeight: 2,
fillOpacity: 0.2,
strokeStyle: 'solid',
clickable: false,
editable: false
}
let drawingManager = new google.maps.drawing.DrawingManager({
map: map,
drawingControl: 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 = false
let gpsamap = point
let 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旋转
const setRotation = (options) => {
return new Promise((resolve, reject) => {
let w = options.width || 40
let h = options.height || 40
let canvas = document.createElement('canvas')
canvas.width = w
canvas.height = h
let ctx = canvas.getContext('2d')
let angle = options.deg ? options.deg * Math.PI / 180 : 0
let centerX = w / 2
let centerY = h / 2
let dataURL = ''
let img = new Image()
img.src = options.url
img.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
})
}
})
}