

<!-- 引入API -->
<script charset="utf-8" src="https://map.qq.com/api/gljs?v=1.exp&key=此处填入腾讯位置服务密钥"></script>
<body onload="initMap()">
<div id="container"></div>
<script type="text/javascript">
function initMap() {
var center = new TMap.LatLng(24.594221617, 117.9752365);//中心坐标
var ne = new TMap.LatLng(24.599587,117.980751);//东北角坐标
var sw = new TMap.LatLng(24.588856,117.969722);//西南角坐标
var latLngBounds = new TMap.LatLngBounds(sw, ne);//地图显示范围
//初始化地图
var map = new TMap.Map("container", {
rotation: 0,//设置地图旋转角度
pitch: 45, //设置俯仰角度(0~45)
zoom: 14,//设置地图缩放级别
center: center,//设置地图中心点坐标
boundary: latLngBounds,//设置地图显示范围
showControl: false,//是否显示地图控件
baseMap: {
type: 'vector',// 矢量地图底图模式
features: [
'base', // 路面
'building3d', //三维建筑
// 'point', // 隐藏POI文字
'label' // 道路文字
]
}
});
}
</script>
</body>

var position1 = new TMap.LatLng(39.916527, 116.397128);
//初始化标记
var marker = new TMap.MultiMarker({
id: "marker-layer", //图层id
map: map,
styles: { //点标注的相关样式
"marker": new TMap.MarkerStyle({
"width": 25,
"height": 35,
// "anchor": { x: 12, y: 35 }, // 锚点,默认为{ x: width/2, y: height }
"src": "https://mapapi.qq.com/web/lbs/javascriptGL/demo/img/markerDefault.png"
})
},
geometries: [{ //点标注数据数组
"id": "demo",
"styleId": "marker",
"position": position1,
"properties": {
"title": "marker"
}
}]
});
//初始化文本
var label = new TMap.MultiLabel({
id: 'label-layer',
map: map,
styles: {
'label': new TMap.LabelStyle({
'color': '#3777FF', //颜色属性
'size': 20, //文字大小属性
'offset': {x: 0, y: 10}, //文字偏移属性单位为像素
'angle': 0, //文字旋转属性
'alignment': 'center', //文字锚点水平对齐属性
'verticalAlignment': 'top' //文字锚点垂直对齐属性
})
},
geometries: [{
'id': 'label', //点图形数据的标志信息
'styleId': 'label', //样式id
'position': position1, //标注点位置
'content': '总部', //标注文本
'properties': { //标注点的属性数据
'title': 'label'
}
}]
});
//初始化infoWindow
var infoWindow = new TMap.InfoWindow({
map: map,
position: center, // 初始位置,必须设置
offset: { x: 0, y: -32 } //设置信息窗相对position偏移像素
});
infoWindow.close();//初始关闭信息窗关闭
//监听标注点击事件
marker.on("click", function (evt) {
//设置infoWindow
infoWindow.open(); //打开信息窗
infoWindow.setPosition(evt.geometry.position);//设置信息窗位置
infoWindow.setContent(evt.geometry.properties.title);//设置信息窗内容
var path = [[ //多边形的位置信息
new TMap.LatLng(24.590890, 117.974330),
new TMap.LatLng(24.592573, 117.972388),
new TMap.LatLng(24.595549, 117.975520),
new TMap.LatLng(24.593895, 117.977430),
]]
//初始化polygon
var polygon = new TMap.MultiPolygon({
id: 'polygon-layer', //图层id
map: map, //设置多边形图层显示到哪个地图实例中
//多边形样式
styles: {
'polygon': new TMap.ExtrudablePolygonStyle({
'color': 'rgba(0,125,255,0.2)', //面填充色
'showBorder': true, //是否显示拔起面的边线
'extrudeHeight': 30, //多边形拔起高度
'borderColor': 'rgba(0,125,255,1)' //边线颜色
})
},
//多边形数据
geometries: [
{
'id': 'p1', //该多边形在图层中的唯一标识(删除、更新数据时需要)
'styleId': 'polygon', //绑定样式名
'paths': path, //多边形轮廓
}
]
});
var paths = [
new TMap.LatLng(24.590885, 117.974335),
new TMap.LatLng(24.591480, 117.973638),
new TMap.LatLng(24.592251, 117.972747),
new TMap.LatLng(24.592573, 117.972382),
new TMap.LatLng(24.593188, 117.972972),
new TMap.LatLng(24.595266, 117.975204),
new TMap.LatLng(24.595568, 117.975537),
new TMap.LatLng(24.595188, 117.975987),
];
var green = 'rgba(0, 180, 0, 1)',
red = 'rgba(255, 0, 0, 1)',
yellow ='rgba(204,153, 0, 1)';
var polylineLayer = new TMap.MultiPolyline({
map: map, // 绘制到目标地图
// 折线样式定义
styles: {
'style_blue': new TMap.PolylineStyle({
color: '#3777FF', //线填充色
width: 10, //折线宽度
borderWidth: 0, //边线宽度
showArrow: true,
arrowOptions: {
space: 70
},
lineCap: 'round',
}),
},
geometries: [{
styleId: 'style_blue',
rainbowPaths: [ // 彩虹线数组
{
path: [paths[0], paths[1]],
color: yellow,
},
{
path: [paths[1], paths[2]],
color: green,
},
{
path: [paths[2], paths[3]],
color: red,
},
{
path: [paths[3], paths[4]],
color: yellow,
},
{
path: [paths[4], paths[5]],
color: green,
},
{
path: [paths[5], paths[6]],
color: red,
},
{
path: [paths[6], paths[7]],
color: yellow,
}
],
}],
});
window.map = map;
window.drivingFrom = [24.590129, 117.971079];
window.drivingTo = [24.593636, 117.972951];
var url = "https://apis.map.qq.com/ws/direction/v1/driving/"; //请求路径
url += "?from=" + drivingFrom[0] + "," + drivingFrom[1]; //起点坐标
url += "&to=" + drivingTo[0] + "," + drivingTo[1]; //终点坐标
url += "&output=jsonp&callback=cb"; //指定JSONP回调函数名,本例为cb
url += "&key=此处填入腾讯位置服务密钥"; //开发key,可在控制台自助创建
//发起JSONP请求,获取路线规划结果
jsonp_request(url);
//浏览器调用WebServiceAPI需要通过Jsonp的方式,此处定义了发送JOSNP请求的函数
function jsonp_request(url) {
var script = document.createElement('script');
script.src = url;
document.body.appendChild(script);
}
//定义请求回调函数,在此拿到计算得到的路线,并进行绘制
function cb(ret) {
// 如果调用失败可在ret中获取到错误消息
var coords = ret.result.routes[0].polyline, pl = [];
//坐标解压(返回的点串坐标,通过前向差分进行压缩)
var kr = 1000000;
for (var i = 2; i < coords.length; i++) {
coords[i] = Number(coords[i - 2]) + Number(coords[i]) / kr;
}
//将解压后的坐标放入点串数组pl中
for (var i = 0; i < coords.length; i += 2) {
pl.push(new TMap.LatLng(coords[i], coords[i + 1]));
}
display_polyline(pl)//显示路线
//标记起终点marker
var marker = new TMap.MultiMarker({
id: 'marker-layer-driving',
map: map,
styles: {
"start": new TMap.MarkerStyle({
"width": 25,
"height": 35,
"anchor": {x: 16, y: 32},
"src": 'https://mapapi.qq.com/web/lbs/javascriptGL/demo/img/start.png'
}),
"end": new TMap.MarkerStyle({
"width": 25,
"height": 35,
"anchor": {x: 16, y: 32},
"src": 'https://mapapi.qq.com/web/lbs/javascriptGL/demo/img/end.png'
})
},
geometries: [{
"id": 'start',
"styleId": 'start',
"position": new TMap.LatLng(drivingFrom[0], drivingFrom[1])
}, {
"id": 'end',
"styleId": 'end',
"position": new TMap.LatLng(drivingTo[0], drivingTo[1])
}]
});
}
function display_polyline(pl) {
//创建 MultiPolyline显示折线
var polylineLayer = new TMap.MultiPolyline({
id: 'polyline-layer', //图层唯一标识
map: map,//绘制到目标地图
//折线样式定义
styles: {
'style_blue': new TMap.PolylineStyle({
'color': '#3777FF', //线填充色
'width': 8, //折线宽度
'borderWidth': 5, //边线宽度
'borderColor': '#FFF', //边线颜色
'lineCap': 'round', //线端头方式
})
},
//折线数据定义
geometries: [
{
'id': 'pl_1',//折线唯一标识,删除时使用
'styleId': 'style_blue',//绑定样式名
'paths': pl
}
]
});
}